Editable Grid: Save Into not working Properly

Hi! I have the following editable grid, in which some values are passed from another record and other ones are completed by the user

When I run the process model, it seems to work properly, auto-generated values appear and the user completes the rest of values:

But after this, the auto-completed values don´t appear in the record! I´m using a WriteRecords function directly in the interface, not in the process model

My configuration is the following one:

I´m using the fv!item to save the values into the local variables, the appending to create new rows and finally using the writeRecords function. But it fails for the variables in which the value is a rule input from a previous interface (idFactura, idPedido, proveedor). The rest of them are saved correctly. What can I do? Thanks a lot!

My code is the following:

a!localVariables(
  local!data,
  {
    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: "Factura"),
        a!gridLayoutHeaderCell(label: "Pedido"),
        a!gridLayoutHeaderCell(label: "Proveedor"),
        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:"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:ri!recordFact['recordType!{51d44df6-c727-4443-8114-aef8a7509b41}CPF Maestro Facturas.fields.{6f993c32-7f64-424a-859f-d779194c4a18}id_factura'], saveInto: {fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{9c440183-9c71-423b-a300-eb4c3ea747fb}idFactura']}
            ),
            a!textField(value:ri!recordFact['recordType!{51d44df6-c727-4443-8114-aef8a7509b41}CPF Maestro Facturas.fields.{e8009662-ca1c-43da-9c72-2840463214be}id_pedido'], saveInto: {fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{60774c8e-9b47-486f-9fea-b32c525c05fd}idPedido']}
            ),
            a!textField(value:ri!recordFact['recordType!{51d44df6-c727-4443-8114-aef8a7509b41}CPF Maestro Facturas.fields.{c2a60669-567e-41b8-acdd-29729912b3e5}nomProveedor'], saveInto: {fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{844be35b-6de5-434e-9c69-e7c7b8a148dd}proveedor']}
            ),
            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'], a!save(fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{53f231a2-9bf7-40a1-af07-74373fa7bd9f}importe'],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']
            ) )},
            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'], a!save(fv!item['recordType!{6e637180-b344-49d2-a1f7-f87eed0041ba}CPF Lineas Factura.fields.{53f231a2-9bf7-40a1-af07-74373fa7bd9f}importe'],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']
            ) )},
            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
  • +1
    Certified Lead Developer

    This is probably because in the grid, you mix data from rule inputs and local variables. Then you store the local variables to the database, but not the rule inputs. And then you do something with the data coming from the rule inputs flowing to process variables.

    In my experience, the most important step to solve such a situation, is to simplify it down to a level that you really understand end-to-end. Then, step by step, add more to it. And for each step, test, check and validate the result.

    Another advice, do not mix writeRecords in the interface with writeRecords in process. As you are using a process, remove it from the button and persist the data in process.

Reply
  • +1
    Certified Lead Developer

    This is probably because in the grid, you mix data from rule inputs and local variables. Then you store the local variables to the database, but not the rule inputs. And then you do something with the data coming from the rule inputs flowing to process variables.

    In my experience, the most important step to solve such a situation, is to simplify it down to a level that you really understand end-to-end. Then, step by step, add more to it. And for each step, test, check and validate the result.

    Another advice, do not mix writeRecords in the interface with writeRecords in process. As you are using a process, remove it from the button and persist the data in process.

Children