Skip to main content
July 5, 2024
Solved

Saving editable grid

  • July 5, 2024
  • 49 replies
  • 0 views

Hello Team,

I have build an editable grind and now I want to save the values inside my records. I have record table and rule input in my interface the problem is how I can save this data for each request I have. The data is a sample there are around 15 rows which I want the user to be able to save some of them can be null some of them can be filled out. Basically the property is read only, once user enter value we can use a!save to save the property for the respective row, but I always get cannot index rule input records..

rows: {
                            a!gridRowLayout(
                              contents: {
                                a!richTextDisplayField(
                                  labelPosition: "COLLAPSED",
                                  value: {
                                    a!richTextItem(
                                      text: {"Melting Point"}
                                    )
                                  }
                                ),
                                a!textField(
                                  label: "Text",
                                  labelPosition: "ABOVE",
                                  saveInto: {},
                                  refreshAfter: "UNFOCUS",
                                  disabled: false,
                                  validations: {}
                                ),
                                a!dropdownField(
                                  choiceLabels: {"g/cm3", "kg/m3"},
                                  choiceValues: {"g/cm3", "kg/m3"},
                                  label: "Dropdown",
                                  labelPosition: "ABOVE",
                                  placeholder: "Select",
                                  saveInto: {},
                                  searchDisplay: "AUTO",
                                  validations: {}
                                ),
                                a!textField(
                                  label: "Text",
                                  labelPosition: "ABOVE",
                                  saveInto: {},
                                  refreshAfter: "UNFOCUS",
                                  validations: {}
                                ),
                                a!textField(
                                  label: "Text",
                                  labelPosition: "ABOVE",
                                  saveInto: {},
                                  refreshAfter: "UNFOCUS",
                                  validations: {}
                                ),
                                a!dropdownField(
                                  choiceLabels: {"℃", "℉"},
                                  choiceValues: {"℃", "℉"},
                                  label: "Dropdown",
                                  labelPosition: "ABOVE",
                                  placeholder: "Select",
                                  saveInto: {},
                                  searchDisplay: "AUTO",
                                  validations: {}
                                ),
                                a!dropdownField(
                                  choiceLabels: {"Property has not been measured"},
                                  choiceValues: {"Property has not been measured"},
                                  label: "Dropdown",
                                  labelPosition: "ABOVE",
                                  placeholder: "--- Select a Value ---",
                                  saveInto: {},
                                  searchDisplay: "AUTO",
                                  validations: {}
                                )
                              },
                              showWhen: if(
                                or(
                                  ri!AOS_PhysChem['recordType!{1ddc2dbc-133e-49a3-a416-3e896db0beb4}AOS_Phys_chem.fields.{6862862b-7cbf-4b5d-be70-7944f6a23f5b}PhysicalState'] = "LIquid",
                                  ri!AOS_PhysChem['recordType!{1ddc2dbc-133e-49a3-a416-3e896db0beb4}AOS_Phys_chem.fields.{6862862b-7cbf-4b5d-be70-7944f6a23f5b}PhysicalState'] = "Solid",
                                  ri!AOS_PhysChem['recordType!{1ddc2dbc-133e-49a3-a416-3e896db0beb4}AOS_Phys_chem.fields.{6862862b-7cbf-4b5d-be70-7944f6a23f5b}PhysicalState'] = ""
                                ),
                                true,
                                false)
                            ),
                            a!gridRowLayout(
                              contents: {
                                a!richTextDisplayField(
                                  labelPosition: "COLLAPSED",
                                  value: {
                                    a!richTextItem(
                                      text: {"Freezing Point"}
                                    )
                                  }
                                ),
                                a!textField(
                                  label: "Text",
                                  labelPosition: "ABOVE",
                                  saveInto: {},
                                  refreshAfter: "UNFOCUS",
                                  disabled: false,
                                  validations: {}
                                ),
                                a!dropdownField(
                                  choiceLabels: {"g/cm3", "kg/m3"},
                                  choiceValues: {"g/cm3", "kg/m3"},
                                  label: "Dropdown",
                                  labelPosition: "ABOVE",
                                  placeholder: "Select",
                                  saveInto: {},
                                  searchDisplay: "AUTO",
                                  validations: {}
                                ),
                                a!textField(
                                  label: "Text",
                                  labelPosition: "ABOVE",
                                  saveInto: {},
                                  refreshAfter: "UNFOCUS",
                                  validations: {}
                                ),
                                a!textField(
                                  label: "Text",
                                  labelPosition: "ABOVE",
                                  saveInto: {},
                                  refreshAfter: "UNFOCUS",
                                  validations: {}
                                ),
                                a!dropdownField(
                                  choiceLabels: {"℃", "℉"},
                                  choiceValues: {"℃", "℉"},
                                  label: "Dropdown",
                                  labelPosition: "ABOVE",
                                  placeholder: "Select",
                                  saveInto: {},
                                  searchDisplay: "AUTO",
                                  validations: {}
                                ),
                                a!dropdownField(
                                  choiceLabels: {"Property has not been measured"},
                                  choiceValues: {"Property has not been measured"},
                                  label: "Dropdown",
                                  labelPosition: "ABOVE",
                                  placeholder: "--- Select a Value ---",
                                  saveInto: {},
                                  searchDisplay: "AUTO",
                                  validations: {}
                                )
                              },
                              showWhen: if(
                                or(
                                  ri!AOS_PhysChem['recordType!{1ddc2dbc-133e-49a3-a416-3e896db0beb4}AOS_Phys_chem.fields.{6862862b-7cbf-4b5d-be70-7944f6a23f5b}PhysicalState'] = "LIquid",
                                  ri!AOS_PhysChem['recordType!{1ddc2dbc-133e-49a3-a416-3e896db0beb4}AOS_Phys_chem.fields.{6862862b-7cbf-4b5d-be70-7944f6a23f5b}PhysicalState'] = "Solid",
                                  ri!AOS_PhysChem['recordType!{1ddc2dbc-133e-49a3-a416-3e896db0beb4}AOS_Phys_chem.fields.{6862862b-7cbf-4b5d-be70-7944f6a23f5b}PhysicalState'] = ""
                                ),
                                true,
                                false)
                            ),
                            a!gridRowLayout(
                              contents: {
                                a!richTextDisplayField(
                                  labelPosition: "COLLAPSED",
                                  value: {
                                    a!richTextItem(
                                      text: {"Boiling Point"}
                                    )
                                  }
                                ),

Best answer by mikes0011

Depending on your needs, you could do the above initialization either in the process prior to your form, or on your form itself. 

For the sake of argument I've gone ahead and mocked up this simplified example grid with the first 2 "properties" from my example above, but now displayed on an on-form grid and ready to accept changes to the "value" column (saved into the "lastName" recordtype property since this is still my "personnel" record type).

a!localVariables(

  local!properties: {
    "freezing point",
    "melting point"
  },

  local!initialRowData: a!forEach(
    local!properties,

    'recordType!{...}Personnel'(
      'recordType!{...}Personnel.fields.{firstName}firstName': fv!item
    )
  ),
  
  
  a!gridLayout(
    label: "Items",
    headerCells: {
      a!gridLayoutHeaderCell(label: "Property"),
      a!gridLayoutHeaderCell(label: "Value")
    },
    
    rows: a!forEach(
      local!initialRowdata,
      
      a!gridRowLayout(
        contents: {
          a!richTextDisplayField(
            value: a!richTextItem(
              text: fv!item['recordType!{...}Personnel.fields.{firstName}firstName']
            )
          ),
          
          a!textField(
            value: fv!item['recordType!{...}Personnel.fields.{lastName}lastName'],
            saveInto: fv!item['recordType!{...}Personnel.fields.{lastName}lastName']
          )
        }
      )
    )
  )
)

49 replies

davidj137213
Brainy
July 5, 2024

Can you share details about the error reveived?

July 6, 2024

a!gridLayout(
                          label: "",
                          labelPosition: "ABOVE",
                          headerCells: {
                            a!gridLayoutHeaderCell(label: "Properties",
                            align: "LEFT"),
                            a!gridLayoutHeaderCell(label: "Value"),
                            a!gridLayoutHeaderCell(label: "Unit"),
                            a!gridLayoutHeaderCell(label: "Concentration"),
                            a!gridLayoutHeaderCell(label: "Temperature"),
                            a!gridLayoutHeaderCell(label: "Temperature Unit"),
                            a!gridLayoutHeaderCell(
                              label: "Explanation for Absence of data",
                              helpTooltip: "Explanation for Absence of data is required if value is not provided"
                            )
                          },
                          columnConfigs: {
                            a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 3),
                            a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 3),
                            a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 3),
                            a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 3),
                            a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 3),
                            a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 3),
                            a!gridLayoutColumnConfig(width: "DISTRIBUTE", weight: 3)
                          },
                          rows: {
                            a!gridRowLayout(
                              contents: {
                                a!richTextDisplayField(
                                  labelPosition: "COLLAPSED",
                                  value: {
                                    a!richTextItem(
                                      text: {"Melting Point"}
                                    )
                                  }
                                ),
                                a!textField(
                                  label: "Text",
                                  labelPosition: "ABOVE",
                                a!dropdownField(
                                  choiceLabels: {"g/cm3", "kg/m3"},
                                  choiceValues: {"g/cm3", "kg/m3"},
                                  label: "Dropdown",
                                  labelPosition: "ABOVE",
                                  placeholder: "Select",
                                  saveInto: {},
                                  searchDisplay: "AUTO",
                                  validations: {}
                                ),
                                a!textField(
                                  label: "Text",
                                  labelPosition: "ABOVE",
                                  saveInto: {},
                                  refreshAfter: "UNFOCUS",
                                  validations: {}
                                ),
                                a!textField(
                                  label: "Text",
                                  labelPosition: "ABOVE",
                                  saveInto: {},
                                  refreshAfter: "UNFOCUS",
                                  validations: {}
                                ),
                                a!dropdownField(
                                  choiceLabels: {"℃", "℉"},
                                  choiceValues: {"℃", "℉"},
                                  label: "Dropdown",
                                  labelPosition: "ABOVE",
                                  placeholder: "Select",
                                  saveInto: {},
                                  searchDisplay: "AUTO",
                                  validations: {}
                                ),
                                a!dropdownField(
                                  choiceLabels: {"Property has not been measured"},
                                  choiceValues: {"Property has not been measured"},
                                  label: "Dropdown",
                                  labelPosition: "ABOVE",
                                  placeholder: "--- Select a Value ---",
                                  saveInto: {},
                                  searchDisplay: "AUTO",
                                  validations: {}

Could not display interface. Please check definition and inputs. Interface Definition: Expression evaluation error [evaluation ID = 005f7:92346] : An error occurred while executing a save: Expression evaluation error: Cannot index null List of 

stefanhelzle0001
Brainy
July 6, 2024

I see only a single row in that code snippet. Is that by intention? If not, I suggest to try one of the examples from the documentation

https://docs.appian.com/suite/help/24.2/Editable_Grid_Component.html#examples

July 7, 2024

This may be occurring due to the direct [ ] indexing. Try Using the property or Index function.

July 7, 2024

Can you give me an example with the full code which I provided in my previous comment. Thank you!

July 7, 2024

Sure. I have tried to replicate and solve this error in 1st and 2nd SS respectively.

In the first SS, as you can see I am trying to access a field of a null row which is causing the same error mentioned


if you have done something like the one mentioned in 1st SS then try to replicate the 2nd SS logic