Skip to main content
gautams4173
Known Participant
Apr 16, 2023 2:40 PM UTC
Solved

Reject Function

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 ? 

sanchitg0002
Inspiring
Apr 16, 2023 5:05 PM UTC

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

sanchitg0002
Inspiring
Apr 16, 2023 4:41 PM UTC

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
Known Participant
Apr 16, 2023 4:57 PM UTC

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

sanchitg0002
Inspiring
Apr 16, 2023 4:59 PM UTC
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?