Hi, After adding For Each function to rows in my editable grid, the rows not showing in UI. How to make my rows visible?.
Discussion posts and replies are publicly visible
Without any code snippet or screenshot, any tip would be just guesswork. Mode details please.
Did you follow any of the interface patterns like this one: https://docs.appian.com/suite/help/22.3/recipe-add-edit-and-remove-data-in-an-inline-editable-grid.html
a!localVariables( local!newGridRow: 'type!{urn:com:appian:types:AIP}AIP_items'(), a!formLayout( label: "Purchase Request", contents: { a!sectionLayout( contents: { a!gridLayout( label: "Items", labelPosition: "ABOVE", headerCells: { a!gridLayoutHeaderCell(label: "Description"), a!gridLayoutHeaderCell(label: "Category"), a!gridLayoutHeaderCell(label: "Quantity"), a!gridLayoutHeaderCell(label: "Unit Price"), a!gridLayoutHeaderCell(label: "Amount"), a!gridLayoutHeaderCell(label: "") }, columnConfigs: { a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 3), a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 3), a!gridLayoutColumnConfig(width: "DISTRIBUTE"), a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 2), a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 2), a!gridLayoutColumnConfig(width: "ICON") }, rows: { a!forEach( items: ri!items, expression: a!gridRowLayout( contents: { a!textField( label: "Description", labelPosition: "ABOVE", value: fv!item.description, saveInto: fv!item.description, refreshAfter: "UNFOCUS", required: true, validations: {} ), a!dropdownField( label: "Category", labelPosition: "ABOVE", placeholder: "--- Select a Value ---", choiceLabels: cons!AIP_PURCHASE_REQUEST_CATEGORIES, choiceValues: cons!AIP_PURCHASE_REQUEST_CATEGORIES, value: fv!item.category, saveInto: fv!item.category, searchDisplay: "AUTO", required: true, validations: {} ), a!integerField( label: "Quantity", labelPosition: "ABOVE", value: fv!item.quantity, saveInto: fv!item.quantity, refreshAfter: "UNFOCUS", required: true, validations: {} ), a!floatingPointField( label: "Unit Price", labelPosition: "ABOVE", value: fv!item.unitPrice, saveInto: fv!item.unitPrice, refreshAfter: "UNFOCUS", required: true, validations: {} ), a!textField( label: "Amount", labelPosition: "ABOVE", value: if( or( isnull(fv!item.quantity), isnull(fv!item.unitPrice) ), 0, tointeger(fv!item.quantity) * todecimal(fv!item.unitPrice) ), saveInto: fv!item.amount, refreshAfter: "UNFOCUS", required: true, validations: {} ), a!richTextDisplayField( labelPosition: "ABOVE", value: { a!richTextIcon( icon: "times", link: a!dynamicLink( label: "Dynamic Link", saveInto: { a!save(ri!items, remove(ri!items, fv!index)) } ), color: "NEGATIVE" ) } ) }, selectionDisabled: false ) ) }, selectionSaveInto: {}, addRowLink: a!dynamicLink( label: "Add New Item", saveInto: { a!save( ri!items, append(ri!items, local!newGridRow) ) } ), validations: {}, shadeAlternateRows: true ) } ) }, buttons: a!buttonLayout( primaryButtons: { a!buttonWidget( label: "Submit", submit: true, style: "PRIMARY" ) }, secondaryButtons: { a!buttonWidget( label: "Cancel", value: true, saveInto: ri!cancel, submit: true, style: "NORMAL", validate: false ) } ) ) )
My Ui will showing like this, but when i removed the a! foreach function it displays the rows.
The a!forEach() function needs an array to iterate on. Your configuration is right but you need to have an array in that variable. To check if your have configured everything correctly, try clicking on the "Add New Item" link and see if you are able to see a new row appearing.
If yes, then wherever you have called this interface, you will have to pass data in the ri!items rule input to see the rows prepopulated.