Editable Grid Parameter not saving correctly

I´m trying to create an editable grid in which the user can add or delete several rows.

I have four columns (Material,Unit Price, Quantity, Total Price), and TotalPrice is the product of Price and Quantity (when the user enters both values, the product is created automatically). But the fact is that, even though the product is created correctly, it seems like it is not saved correctly like the other data values

Here is a picture of the interface

In the next picture you can see the column "Importe Total" and its values don´t appear

To create the editable grid and save the values temporarily (because after that I write them to a record) I created a local variable (data). Basically, I followed the instruction of an Appian Community Video about editable grids from scratch. I leave here the code and some captures.

In the end, I updated the records directly in the interface. I don´t know if it is a correct way to do it, or if I should write the records in the process model as a best practice:

Any help would be useful. Thanks a lot!

a!localVariables(
  local!data,
  {
    a!sectionLayout(
      label: "",
      contents: {
        a!columnsLayout(
          columns: {
            a!columnLayout(
              contents: {
                a!textField(
                  label: "Id Factura",
                  labelPosition: "ABOVE",
                  value: ri!recordFact['recordType!{51d44df6-c727-4443-8114-aef8a7509b41}CPF Maestro Facturas.fields.{6f993c32-7f64-424a-859f-d779194c4a18}id_factura'],
                  saveInto: ri!recordLineasFact['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{9c440183-9c71-423b-a300-eb4c3ea747fb}idFactura'],
                  refreshAfter: "UNFOCUS",
                  validations: {}
                )
              }
            ),
            a!columnLayout(
              contents: {
                a!textField(
                  label: "Id Pedido",
                  labelPosition: "ABOVE",
                  value: ri!recordFact['recordType!{51d44df6-c727-4443-8114-aef8a7509b41}CPF Maestro Facturas.fields.{e8009662-ca1c-43da-9c72-2840463214be}id_pedido'],
                  saveInto: ri!recordLineasFact['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{60774c8e-9b47-486f-9fea-b32c525c05fd}idPedido'],
                  refreshAfter: "UNFOCUS",
                  validations: {}
                )
              }
            ),
            a!columnLayout(
              contents: {
                a!textField(
                  label: "Proveedor",
                  labelPosition: "ABOVE",
                  value: ri!recordFact['recordType!{51d44df6-c727-4443-8114-aef8a7509b41}CPF Maestro Facturas.fields.{c2a60669-567e-41b8-acdd-29729912b3e5}nomProveedor'],
                  saveInto: ri!recordLineasFact['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{844be35b-6de5-434e-9c69-e7c7b8a148dd}proveedor'],
                  refreshAfter: "UNFOCUS",
                  validations: {}
                )
              }
            )
          }
        )
      }
    ),
    a!gridLayout(
      label: "A continuación, incorpore las líneas de factura correspondientes y pulse el botón de creación",
      headerCells: {
        a!gridLayoutHeaderCell(label: "Material"),
        a!gridLayoutHeaderCell(label: "Precio Unitario"),
        a!gridLayoutHeaderCell(label: "Cantidad"),
        a!gridLayoutHeaderCell(label: "Importe Total"),
        a!gridLayoutHeaderCell()


      },
      columnConfigs: {
        a!gridLayoutColumnConfig(width:"DISTRIBUTE"),
        a!gridLayoutColumnConfig(width:"DISTRIBUTE"),
        a!gridLayoutColumnConfig(width:"DISTRIBUTE"),
        a!gridLayoutColumnConfig(width:"DISTRIBUTE"),
        a!gridLayoutColumnConfig(width:"ICON")


      },
      rows: a!forEach(
        items: local!data,
        expression: a!gridRowLayout(
          contents: {
 
            a!textField(value:fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{019eb28b-727b-4e2c-8160-1bcf8a747ef1}material'], saveInto: fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{019eb28b-727b-4e2c-8160-1bcf8a747ef1}material']
            ),
            a!floatingPointField( value: fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{eda9bda7-ae57-44e7-a651-d097c8581021}precioUnit'],
            saveInto: fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{eda9bda7-ae57-44e7-a651-d097c8581021}precioUnit'],
            required: true,
            validations: {if(a!isNotNullOrEmpty(fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{eda9bda7-ae57-44e7-a651-d097c8581021}precioUnit'])=false,"", if(
              fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{eda9bda7-ae57-44e7-a651-d097c8581021}precioUnit'] < 0,
              "El precio unitario debe ser superior a cero",
              ""
            ))}),
            a!integerField( value: fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{b1b5fc0b-5be4-45be-8342-381cdc56017d}cantidad'],
            saveInto: fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{b1b5fc0b-5be4-45be-8342-381cdc56017d}cantidad'],
            required: true,
            validations: {if(a!isNotNullOrEmpty(fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{b1b5fc0b-5be4-45be-8342-381cdc56017d}cantidad'])=false,"", if(
              fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{b1b5fc0b-5be4-45be-8342-381cdc56017d}cantidad'] < 1,
              "La cantidad debe ser superior a cero",
              ""
            ))}),
            a!floatingPointField(
              value: if(
                or(isnull(fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{b1b5fc0b-5be4-45be-8342-381cdc56017d}cantidad']), isnull(fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{eda9bda7-ae57-44e7-a651-d097c8581021}precioUnit'])),
                0,
                fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{b1b5fc0b-5be4-45be-8342-381cdc56017d}cantidad'] * fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{eda9bda7-ae57-44e7-a651-d097c8581021}precioUnit']
              ),
              saveInto: fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{53f231a2-9bf7-40a1-af07-74373fa7bd9f}importe'],
              required: true,
              validations: {if(a!isNotNullOrEmpty(fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{53f231a2-9bf7-40a1-af07-74373fa7bd9f}importe'])=false,"", if(
                fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{53f231a2-9bf7-40a1-af07-74373fa7bd9f}importe'] < 0,
                "El importe debe ser superior a cero",
                ""
              ))},
              align: "RIGHT"
            ),
              a!richTextDisplayField(
                value: {
                  a!richTextIcon(
                    icon: "times-circle",
                    link: a!dynamicLink(
                      value: remove(local!data, fv!index),
                      saveInto: local!data
                    ),
                    linkstyle: "STANDALONE",
                    color: "NEGATIVE"
                  )

                }
              )

          }
        )
      ),
      addrowlink: a!dynamicLink(
        label: "Añadir nueva Línea de Factura",
        value: append(
          local!data,                             
          'recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura'()
        ),
        saveInto: local!data
      )
    )
    ,
    a!buttonLayout(
      primaryButtons: {
        a!buttonWidget(
          label: "Completar Creación Factura",
          saveInto: a!writeRecords(
            records:local!data,
            onSuccess: a!save(local!data, fv!recordsUpdated)
          ),
          submit: true,
          style: "PRIMARY",
          validate:true
        )
      },
      secondaryButtons: {
        a!buttonWidget(
          label: "Cancelar",
          value: true,
          saveInto: ri!cancel2,
          submit: true,
          style: "NORMAL",
          validate: false
        )
      }
    )

  }
)

  Discussion posts and replies are publicly visible

Parents Reply
  • I misunderstood you Stefan. I thought you were referring to put the calculation inside the save into of "Importe total".

    If I´m correct, I have to put the calculation in the "save into" of both fields ("Precio Unitario" and "Cantidad"). But the fact is that I already have a "Save Into" code in those cases, to store the value of the field. I don´t know how to add the calculation there

    How can I add my expression without deleting the actual one? 

Children