How to update list of map

Certified Associate Developer
Expression Rule Body: 

a!localVariables(

  local!formatDetails: {{format: "#.#", columnorder: 9, name: "ABC"}, {format: "#.##", columnorder: 11, name: "EFG"}, {format: "#.###", columnorder: 9, name: "HIJ"}, {format: "#.#", columnorder: 11, name: "KLM"}},

  local!data: {a!map(ABC: "6.78998", EFG: "15.44443", HIJ: "470.8888", KLM: "9.8989984"), a!map(ABC: "8.44544", EFG: "15.4323", HIJ: "470.656565", KLM: "9.2342"), a!map(ABC: "7.232323", EFG: "15.4234234", HIJ: "470.55445", KLM: "9.234234"), a!map(ABC: "5.64545", EFG: "15.4234234", HIJ: "470.2342", KLM: "9.63242"), a!map(ABC: "453.345345", EFG: "15.4234234", HIJ: "470.665434", KLM: "9.54343")},


  a!forEach(

    items: local!formatDetails,

    expression: a!localVariables(

      local!formt: fv!item.format,

      local!key: fv!item.name,

      a!update(

        data: local!data,

        index: local!key,

        value: todecimal(text(

          index(local!data, local!key, null),

          if(

            a!isNullOrEmpty(local!formt),

            "",

            local!formt

          )

        )

        ))

    )

  ),

)

This outputs 

{{a!map(ABC: 6.7, EFG: "15.44443", HIJ: "470.8888", KLM: "9.8989984"), a!map(ABC: 8.4, EFG: "15.4323", HIJ: "470.656565", KLM: "9.2342"), a!map(ABC: 7.2, EFG: "15.4234234", HIJ: "470.55445", KLM: "9.234234"), a!map(ABC: 5.6, EFG: "15.4234234", HIJ: "470.2342", KLM: "9.63242"), a!map(ABC: 453.3, EFG: "15.4234234", HIJ: "470.665434", KLM: "9.54343")}, {a!map(ABC: "6.78998", EFG: 15.44, HIJ: "470.8888", KLM: "9.8989984"), a!map(ABC: "8.44544", EFG: 15.43, HIJ: "470.656565", KLM: "9.2342"), a!map(ABC: "7.232323", EFG: 15.42, HIJ: "470.55445", KLM: "9.234234"), a!map(ABC: "5.64545", EFG: 15.42, HIJ: "470.2342", KLM: "9.63242"), a!map(ABC: "453.345345", EFG: 15.42, HIJ: "470.665434", KLM: "9.54343")}, {a!map(ABC: "6.78998", EFG: "15.44443", HIJ: 470.888, KLM: "9.8989984"), a!map(ABC: "8.44544", EFG: "15.4323", HIJ: 470.656, KLM: "9.2342"), a!map(ABC: "7.232323", EFG: "15.4234234", HIJ: 470.554, KLM: "9.234234"), a!map(ABC: "5.64545", EFG: "15.4234234", HIJ: 470.234, KLM: "9.63242"), a!map(ABC: "453.345345", EFG: "15.4234234", HIJ: 470.665, KLM: "9.54343")}, {a!map(ABC: "6.78998", EFG: "15.44443", HIJ: "470.8888", KLM: 9.8), a!map(ABC: "8.44544", EFG: "15.4323", HIJ: "470.656565", KLM: 9.2), a!map(ABC: "7.232323", EFG: "15.4234234", HIJ: "470.55445", KLM: 9.2), a!map(ABC: "5.64545", EFG: "15.4234234", HIJ: "470.2342", KLM: 9.6), a!map(ABC: "453.345345", EFG: "15.4234234", HIJ: "470.665434", KLM: 9.5)}}

But i need output

{{a!map(ABC: 6.7, EFG: 15.44, HIJ: 470.888, KLM: 9.8), a!map(ABC: 8.4, EFG: 15.43, HIJ: 470.656, KLM: 9.2), a!map(ABC: 7.2, EFG: 15.42, HIJ: 470.554, KLM: 9.2), a!map(ABC: 5.6, EFG: 15.42, HIJ: 470.234, KLM: 9.6), a!map(ABC: 453.3, EFG: 15.42, HIJ: 470.665, KLM: 9.5)}}

  Discussion posts and replies are publicly visible

  • 0
    Certified Lead Developer

    The problem was formatting columns separately, creating multiple partial results; fixing it by applying all formats sequentially per row created one fully formatted dataset as needed.

    a!localVariables(
      local!formatDetails: {
        {format: "#.#",   name: "ABC"},
        {format: "#.##",  name: "EFG"},
        {format: "#.###", name: "HIJ"},
        {format: "#.#",   name: "KLM"}
      },
      local!data: {
        a!map(ABC: "6.78998",    EFG: "15.44443",   HIJ: "470.8888",   KLM: "9.8989984"),
        a!map(ABC: "8.44544",    EFG: "15.4323",    HIJ: "470.656565", KLM: "9.2342"),
        a!map(ABC: "7.232323",   EFG: "15.4234234", HIJ: "470.55445",  KLM: "9.234234"),
        a!map(ABC: "5.64545",    EFG: "15.4234234", HIJ: "470.2342",   KLM: "9.63242"),
        a!map(ABC: "453.345345", EFG: "15.4234234", HIJ: "470.665434", KLM: "9.54343")
      },
    
      a!forEach(
        items: local!data,
        expression: a!localVariables(
          local!row: fv!item,
          local!formattedRow: a!forEach(
            items: local!formatDetails,
            expression: a!update(
              data: local!row,
              index: fv!item.name,
              value: todecimal(
                text(
                  index(local!row, fv!item.name, null),
                  fv!item.format
                )
              )
            )
          ),
          /* Return the last updated version, where all columns are formatted */
          local!formattedRow[count(local!formattedRow)]
        )
      )
    )