Skip to main content
August 13, 2021
Solved

Update specific field on specific index

  • August 13, 2021
  • 7 replies
  • 2 views

Hello All,

I just want to know how can I update a specific field to a specific index? example is I have 3 list of items, and I only want to update the 2nd index first name to "Jerry" and not "Henry". I tried to use updatearray() but its only updating the whole data or I am missing something? 

{

index: 1,

name: "John",

lastName: "Doe"

},


{

index: 2,

name: "Henry",

lastName: "Doe"

},


{

index: 3,

name: "Jenny",

lastName: "Doe"

},

Looking forward to anyone reply. Thank you!

Best answer by csteward

As an alternative for prior versions of Appian, the Dictionary Manipulation plugin is very useful for these sorts of things:

a!localVariables(
  local!data: {
    { index: 1, name: "John", lastName: "Doe" },
    { index: 2, name: "Henry", lastName: "Doe" },
    { index: 3, name: "Jenny", lastName: "Doe" },
  },
  
  a!forEach(
    items: local!data,
    expression: if(
      fv!index=2,
      updatedictionary(
        fv!item,
        {
          name: "Jerry"
        }
      ),
      fv!item
    )
  )
)

7 replies

peter.lewis
Employee
August 13, 2021

Are you on 21.2? There's a great function that was recently released called a!update() that makes this pretty easy. The only tricky thing is that since you're updating a single value in a list of lists, you have to perform a!update() twice. Here's an example of how it works:

a!localVariables(
  local!data: {
    { index: 1, name: "John", lastName: "Doe" },
    { index: 2, name: "Henry", lastName: "Doe" },
    { index: 3, name: "Jenny", lastName: "Doe" },
  },
  a!update(
    data: local!data,
    index: 2,
    value: a!update(
      data: index(local!data, 2, {}),
      index: "name",
      value: "Jerry"
    ),
  )
)

August 14, 2021

Hello Peter, Thank you for your reply. I tried this but I can't update multiple data. ex. 2nd and 3rd index 

peter.lewis
Employee
August 16, 2021

You can still use a!update(), just use a!forEach() instead of the first update:

a!localVariables(
  local!data: {
    { index: 1, name: "John", lastName: "Doe" },
    { index: 2, name: "Henry", lastName: "Doe" },
    { index: 3, name: "Jenny", lastName: "Doe" },
  },
  a!forEach(
    items: local!data,
    expression: if(
      fv!index = 2,
      a!update(
        data: index(local!data, 2, {}),
        index: "name",
        value: "Jerry"
      ),
      if(
        fv!index = 3,
        a!update(
          data: index(local!data, 3, {}),
          index: "name",
          value: "Justine"
        ),
        fv!item
      )
    )
  )
)

csteward
cstewardAnswer
August 13, 2021

As an alternative for prior versions of Appian, the Dictionary Manipulation plugin is very useful for these sorts of things:

a!localVariables(
  local!data: {
    { index: 1, name: "John", lastName: "Doe" },
    { index: 2, name: "Henry", lastName: "Doe" },
    { index: 3, name: "Jenny", lastName: "Doe" },
  },
  
  a!forEach(
    items: local!data,
    expression: if(
      fv!index=2,
      updatedictionary(
        fv!item,
        {
          name: "Jerry"
        }
      ),
      fv!item
    )
  )
)

August 14, 2021

Sorry for the late reply. I tried this 

if the index is 1 and 2 the value should be both updated. but its not working as expected on my end only one can be updated.