Appian Community and Appian Academy are being upgraded. From July 24–August 3, the Appian Community will be in read-only mode. During this time, the site will be read-only and user registration will be disabled. We apologize for any inconvenience this may cause, but a more secure, stable, and performant Community experience is coming soon!
The new Appian Community launches August 3, followed by Appian Academy on August 7. During the migration, Appian Community Edition, Appian Academy, Documentation, Certifications, Instructor-led Customer Training, Partner Sales Training & Accreditation, and Forum (for Appian Partners and Customers only) will remain available.
I have enhancement requirement , I have editable grid and when user add new row to the grid it should be inserted before the last row , Is that possible if yes can anyone help to get started with?
Below is my existing code
a!localVariables( local!feeDetails: ri!feeDetails, local!minimumFee: reject( fn!isnull, a!flatten( a!forEach( items: ri!feeDetails, expression: if( and( toboolean( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{be1056cb-8331-4446-8fa4-3081fc64bc73}isactive'] ) = toboolean(true()), tointeger( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{30de7239-941c-401f-ad56-2672421eba71}scenarioId'] ) = tointeger( ri!selectedScenario['recordType!{94f6f945-ec9c-4178-8b3f-684a5547bb00}PRC Scenarios.fields.{ad9e991c-6487-437f-8665-fe15a96eba42}prcScenarioId'] ), tointeger( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{6e4fe629-03b7-49fe-8d52-f541257e3ca5}planId'] ) = tointeger( ri!selectedPlan['recordType!{3b41856e-be2b-486e-b0f7-09436ce2d07e}PRC Plan.fields.{4903a64b-b0f8-4ddb-98d1-00bcc0e648d1}prcPlanId'] ), tointeger( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{7e014768-277f-4844-a8d0-7c6baeccf934}iteration'] ) = tointeger(ri!iteration), or( isnull( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{4a8a03ee-98f5-4712-8135-4c235968e033}serviceExId'] ), contains( { 27, 75, 261, 251, 271 }, fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{4a8a03ee-98f5-4712-8135-4c235968e033}serviceExId'] ) ) ), fv!item, null ) ) ) ), local!minimumIndex: index(local!minimumFee, 1, {}), local!minimumValue: if( isnull(local!minimumIndex), tointeger(0), tointeger( index( local!minimumIndex, 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{67613804-ab49-4df7-91d4-358b515efd47}minimumfee', {} ), ) ), { a!cardLayout( marginAbove: "EVEN_MORE", showBorder: false, showShadow: true, contents: { a!sectionLayout( contents: a!gridLayout( headerCells: { a!gridLayoutHeaderCell("Annual Fee"), a!gridLayoutHeaderCell("Sequence"), a!gridLayoutHeaderCell("Amount"), a!gridLayoutHeaderCell(" "), }, columnConfigs: { a!gridLayoutColumnConfig(width: "NARROW_PLUS"), a!gridLayoutColumnConfig(width: "NARROW_PLUS"), a!gridLayoutColumnConfig(width: "NARROW_PLUS"), a!gridLayoutColumnConfig(width: "ICON") }, rows: a!forEach( items: local!feeDetails, expression: if( and( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{be1056cb-8331-4446-8fa4-3081fc64bc73}isactive'] = true(), tointeger( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{30de7239-941c-401f-ad56-2672421eba71}scenarioId'] ) = tointeger( ri!selectedScenario['recordType!{94f6f945-ec9c-4178-8b3f-684a5547bb00}PRC Scenarios.fields.{ad9e991c-6487-437f-8665-fe15a96eba42}prcScenarioId'] ), tointeger( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{6e4fe629-03b7-49fe-8d52-f541257e3ca5}planId'] ) = tointeger( ri!selectedPlan['recordType!{3b41856e-be2b-486e-b0f7-09436ce2d07e}PRC Plan.fields.{4903a64b-b0f8-4ddb-98d1-00bcc0e648d1}prcPlanId'] ), tointeger( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{7e014768-277f-4844-a8d0-7c6baeccf934}iteration'] ) = tointeger(ri!iteration), or( contains( { 271, 251, 261, 75, 27 }, fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{4a8a03ee-98f5-4712-8135-4c235968e033}serviceExId'] ), isnull( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{4a8a03ee-98f5-4712-8135-4c235968e033}serviceExId'] ) ) ), a!gridRowLayout( id: fv!index, contents: { a!textField( readOnly: not(ri!isEdit), value: if( a!isNotNullOrEmpty( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{796cea1b-ff7a-4223-a860-65e23373eab4}annualfee'] ), concat( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{796cea1b-ff7a-4223-a860-65e23373eab4}annualfee'], " BPS" ), "" ), saveInto: { a!save( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{796cea1b-ff7a-4223-a860-65e23373eab4}annualfee'], if( or(isnull(save!value), save!value = ""), null, tointeger(save!value) ) ), a!save(ri!feeDetails, local!feeDetails), a!save(ri!allfeeDetails, ri!feeDetails) }, align: "LEFT" ), a!textField( validations: { if( contains( { "Next", "First", "Over" }, fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{08ad88f5-e074-43e5-856e-a3661bdc2ee3}sequence'] ), {}, "Sequence should not be empty and Only First, Next, Over sequence allowed" ), if( a!isNullOrEmpty( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{08ad88f5-e074-43e5-856e-a3661bdc2ee3}sequence'] ), "Sequence should not be empty", {} ) }, value: fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{08ad88f5-e074-43e5-856e-a3661bdc2ee3}sequence'], saveInto: { fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{08ad88f5-e074-43e5-856e-a3661bdc2ee3}sequence'], a!save(ri!feeDetails, local!feeDetails), a!save(ri!allfeeDetails, ri!feeDetails) }, readOnly: not(ri!isEdit), align: "LEFT" ), a!textField( validations: if( or( a!isNullOrEmpty( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{7fed9839-24ea-47a8-b23b-4cc6245daff8}amount'] ), tointeger( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{7fed9839-24ea-47a8-b23b-4cc6245daff8}amount'] ) = cons!WMS_INT_ZERO ), "Please enter a valid dollar amount.", {} ), readOnly: not(ri!isEdit), value: if( a!isNotNullOrEmpty( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{7fed9839-24ea-47a8-b23b-4cc6245daff8}amount'] ), dollar( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{7fed9839-24ea-47a8-b23b-4cc6245daff8}amount'] ), dollar(0) ), saveInto: { a!save( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{7fed9839-24ea-47a8-b23b-4cc6245daff8}amount'], if( a!isNotNullOrEmpty(save!value), save!value, 0 ) ), a!save(ri!feeDetails, local!feeDetails), a!save(ri!allfeeDetails, ri!feeDetails) }, align: "LEFT" ), a!richTextDisplayField( value: a!richTextIcon( showWhen: contains( { cons!PRC_REF_ID_STAGE_IN_REVIEW, cons!PRC_REF_ID_STAGE_RETURNED_RESUBMITTED_PRICING, cons!PRC_REF_ID_STAGE_REVIEW_PRICING }, tointeger( ri!prcRequest['recordType!{9ffd9a48-c615-4180-a5a0-1782cd09348f}PRC Request.fields.{f3e4d721-201d-4797-a17a-cfec05ef3e98}stage'] ) ), icon: "close", altText: "delete ", caption: "Remove", link: a!dynamicLink( value: fv!index, saveInto: { a!save( local!feeDetails[fv!index]['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{be1056cb-8331-4446-8fa4-3081fc64bc73}isactive'], false() ), a!save(ri!feeDetails, local!feeDetails), a!save(ri!allfeeDetails, ri!feeDetails) } ), linkStyle: "STANDALONE", color: "NEGATIVE" ) ) } ), {} ) ), addRowLink: a!dynamicLink( showWhen: contains( { cons!PRC_REF_ID_STAGE_IN_REVIEW, cons!PRC_REF_ID_STAGE_RETURNED_RESUBMITTED_PRICING, cons!PRC_REF_ID_STAGE_REVIEW_PRICING }, tointeger( ri!prcRequest['recordType!{9ffd9a48-c615-4180-a5a0-1782cd09348f}PRC Request.fields.{f3e4d721-201d-4797-a17a-cfec05ef3e98}stage'] ) ), label: "Add Tier Schedule", value: {}, saveInto: { a!save( local!feeDetails, append( local!feeDetails, 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee'( 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{796cea1b-ff7a-4223-a860-65e23373eab4}annualfee': null(), 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{67613804-ab49-4df7-91d4-358b515efd47}minimumfee': local!minimumValue, 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{7fed9839-24ea-47a8-b23b-4cc6245daff8}amount': null(), 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{08ad88f5-e074-43e5-856e-a3661bdc2ee3}sequence': null(), 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{4a8a03ee-98f5-4712-8135-4c235968e033}serviceExId': ri!services['recordType!{471f50a7-6d9a-4e1b-a1ae-4b84239a4583}PRC Services.fields.{15ae6ce2-ff70-48b8-ac87-a04a0bb310b9}serviceExtId'], 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{6e4fe629-03b7-49fe-8d52-f541257e3ca5}planId': tointeger( index( ri!selectedPlan, 'recordType!{3b41856e-be2b-486e-b0f7-09436ce2d07e}PRC Plan.fields.{4903a64b-b0f8-4ddb-98d1-00bcc0e648d1}prcPlanId', {} ) ), 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{30de7239-941c-401f-ad56-2672421eba71}scenarioId': tointeger( index( ri!selectedScenario, 'recordType!{94f6f945-ec9c-4178-8b3f-684a5547bb00}PRC Scenarios.fields.{ad9e991c-6487-437f-8665-fe15a96eba42}prcScenarioId', {} ) ), 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{fcc63a8b-7dab-4ea1-b0c5-61269e0ff801}createdby': loggedInUser(), 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{7e014768-277f-4844-a8d0-7c6baeccf934}iteration': ri!iteration, 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{0e58f0ed-17dc-4b31-8622-5f0a01f59e11}createdon': now(), 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{be1056cb-8331-4446-8fa4-3081fc64bc73}isactive': true(), 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{ff8a31de-a89c-4848-b7b4-20726b0a81b9}updatedby': loggedInUser(), 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{f18ed932-7461-403c-9bde-5580a9831588}updatedon': now(), 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{e1f9189a-a80d-4454-b39d-d1b91be1a1ce}prcRequestId': index( ri!prcRequest, 'recordType!{9ffd9a48-c615-4180-a5a0-1782cd09348f}PRC Request.fields.{2e588546-edee-47b5-a888-9e8813bbf0d4}prcRequestId', {} ), 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{086743c7-671f-44b9-83ce-4978ed1e0403}wmsRequestId': ri!prcRequest['recordType!{9ffd9a48-c615-4180-a5a0-1782cd09348f}PRC Request.fields.{010c7913-357e-4e1e-8858-7a6a1b7525cd}wmsRequestId'] ) ) ), a!save(ri!feeDetails, local!feeDetails), a!save(ri!allfeeDetails, ri!feeDetails) } ) ), divider: "NONE" ), rule!WMS_VerticalSpacer(n: 3), a!sideBySideLayout( items: a!sideBySideItem( width: "MINIMIZE", item: a!textField( label: "Minimum Fee", labelPosition: "JUSTIFIED", readOnly: not(ri!isEdit), value: if( isnull(todecimal(local!minimumValue)), dollar(todecimal(0)), dollar(todecimal(local!minimumValue)) ), saveInto: { /* Save into the first row */ a!save( local!minimumValue, if( a!isNotNullOrEmpty(save!value), save!value, 0 ) ), /* Update all matching rows */ a!save( local!minimumFee, a!forEach( items: reject(fn!isnull, local!minimumFee), expression: a!update( data: fv!item, index: 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{67613804-ab49-4df7-91d4-358b515efd47}minimumfee', value: if( a!isNotNullOrEmpty(save!value), save!value, 0 ) ) ) ), /* Update original feeDetails */ a!save( local!feeDetails, a!forEach( items: local!feeDetails, expression: a!localVariables( local!match: index( local!minimumFee, wherecontains( tointeger( fv!item['recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{4b8a7034-4307-4a3d-8a34-aff1a0dcdfd5}prcservicesvmapid'] ), tointeger( index( local!minimumFee, 'recordType!{f6895dd9-7b01-4146-a52e-be727fef79d3}PRC Vmap Service Fee.fields.{4b8a7034-4307-4a3d-8a34-aff1a0dcdfd5}prcservicesvmapid', {} ) ) ), {} ), if( a!isNotNullOrEmpty(local!match), local!match, fv!item ) ) ), ), a!save(ri!feeDetails, local!feeDetails), a!save(ri!allfeeDetails, ri!feeDetails) }, align: "LEFT" ) ) ), a!buttonLayout( primaryButtons: { a!buttonWidget( label: "close", icon: "check", style: "SOLID", value: false, saveInto: ri!showFeeDetails, ), a!buttonWidget( label: "Submit", icon: "check", style: "SOLID", value: false, saveInto: { ri!showFeeDetails, a!startProcess( isSynchronous: true(), processModel: cons!PRC_WRITE_TO_VMAP_FEE_DETAILS, processParameters: { feeDetailsProspect: ri!allfeeDetails, prcRequest: ri!prcRequest, prcServices: ri!allServices }, onSuccess: { a!save( local!feeDetails, fv!processInfo.pv.RecordsUpdated1 ), a!save(ri!feeDetails, local!feeDetails), a!save(ri!allfeeDetails, ri!feeDetails) }, ) }, showWhen: contains( { cons!PRC_REF_ID_STAGE_IN_REVIEW, cons!PRC_REF_ID_STAGE_RETURNED_RESUBMITTED_PRICING, cons!PRC_REF_ID_STAGE_REVIEW_PRICING }, tointeger( ri!prcRequest['recordType!{9ffd9a48-c615-4180-a5a0-1782cd09348f}PRC Request.fields.{f3e4d721-201d-4797-a17a-cfec05ef3e98}stage'] ) ) ), }, secondaryButtons: { a!buttonWidget( label: "Cancel", icon: "times", style: "SOLID", value: false(), saveInto: ri!showFeeDetails, showWhen: contains( { cons!PRC_REF_ID_STAGE_IN_REVIEW, cons!PRC_REF_ID_STAGE_RETURNED_RESUBMITTED_PRICING, cons!PRC_REF_ID_STAGE_REVIEW_PRICING }, tointeger( ri!prcRequest['recordType!{9ffd9a48-c615-4180-a5a0-1782cd09348f}PRC Request.fields.{f3e4d721-201d-4797-a17a-cfec05ef3e98}stage'] ) ) ) } ) }, showWhen: ri!showFeeDetails ) } )
Discussion posts and replies are publicly visible
Did you try the insert() function?
https://docs.appian.com/suite/help/25.3/fnc_array_insert.html
Yes , insert works .