Skip to main content
gautams4173
April 16, 2023
Solved

Reject Function

  • April 16, 2023
  • 6 replies
  • 0 views

Hi,

Im new to using reject function. 

Now im using the reject function in a process model in a script task 

In the input : I am calculating a map which looks like this : 

{

   id : <>,

   account : <account_cdt(id, name, hold_code)> 

}

Now in the output tab I want to use reject function to reject all those accounts who have hold codes null ... but then my requirement is that the ID should remain in the output

I am using reject function like this : 

reject(

fn!isnull(_),

    a!forEach(

          items : ac!map,

          expression : {

                 id : fv!item.id,

                 holdCodes : index(index(fv!item, "account"), "hold_code")

          }

   )

)

Now I know this wont work, but can anyone suggest me how to make it work ? 

Best answer by sanchitg0002

Then, just make a slight change in the code.

a!localVariables(
  local!map: {
    a!map(
      id: 1,
      account: 'type!{urn:com:appian:types:PA}PA_accountTemp'(id: 1, name: "test", holdCode: "")
    ),
    a!map(
      id: 2,
      account: 'type!{urn:com:appian:types:PA}PA_accountTemp'(id: 1, name: "test1", holdCode: "abcd")
    ),
    a!map(
      id: 3,
      account: 'type!{urn:com:appian:types:PA}PA_accountTemp'(id: 1, name: "test2", holdCode: "")
    )
  },
  reject(
    isnull(_),
    a!forEach(
      items: local!map,
      expression: if(
        isnull(
          index(fv!item, "account", "holdCode", null)
        ),
        null,
        fv!item
      )
    )
  )
)

edit: Even simpler 

a!localVariables(
  local!map: {
    a!map(
      id: 1,
      account: 'type!{urn:com:appian:types:PA}PA_accountTemp'(id: 1, name: "test", holdCode: "")
    ),
    a!map(
      id: 2,
      account: 'type!{urn:com:appian:types:PA}PA_accountTemp'(id: 1, name: "test1", holdCode: "abcd")
    ),
    a!map(
      id: 3,
      account: 'type!{urn:com:appian:types:PA}PA_accountTemp'(id: 1, name: "test2", holdCode: "")
    )
  },
  remove(
    local!map,
    wherecontains(null, local!map.account.holdCode)
  )
)

6 replies

April 16, 2023

I don't understand the purpose of removing holdCode from the cdt if it is null and only show the account id in that case.

But if I can understand the requirement correctly then you will be wanting to implement it as follows:

a!localVariables(
  local!map: {
    a!map(
      id: 1,
      account: 'type!{urn:com:appian:types:PA}PA_accountTemp'(id: 1, name: "test", holdCode: "")
    ),
    a!map(
      id: 2,
      account: 'type!{urn:com:appian:types:PA}PA_accountTemp'(id: 1, name: "test1", holdCode: "abcd")
    ),
    a!map(
      id: 3,
      account: 'type!{urn:com:appian:types:PA}PA_accountTemp'(id: 1, name: "test2", holdCode: "")
    )
  },
  a!forEach(
    items: local!map,
    expression: if(
      isnull(
        index(fv!item, "account", "holdCode", null)
      ),
      updatedictionary(
        fv!item,
        { account: { id: fv!item.account.id } }
      ),
      fv!item
    )
  )
)

gautams4173
April 16, 2023

Thanks for the solution

But the purpose was not to remove the hold code ... The purpose was to just retain the map who actually has a hold code and ignore the ones that doesn't

April 16, 2023
but then my requirement is that the ID should remain in the output

Then what about this that you have mentioned above in the description?