how to pass array in expression rule

I



I want the result of this expression rule to be in the below format or the highlighted format in the editor. currently I am passing name and comment from one CDT ,now along with this 2 fields  I need to pass the colleagues array with add array with in the colleague array.


I have created other new  CDT for colleague array with id , typeid and addcolleague array in it ,how to call it in the expression rule to get the result in the below format . Please advise



How can I get this result in the below format ,can someone please advise


Expected RESULT

a!toJson

({

"name": "string",
"Comment": "string",

Colleagues:
{

{

"TypeId": 1,
addColleague:

{
"email": "string",
"displayName": "String",
"eFlag": false,
"dFlag": false,
"ProviderID": 2,
"idFromProvider": "string"   }

}

}


})

  Discussion posts and replies are publicly visible

Parents Reply Children
  • I want this body as input to an integration .In the existing process model we are passing body only with name and comment as an input to an integration via scriptask (input as expressionrule )


    I need to get output of expressionrule as below




    a!toJson
    ({
         "name": " some string from db ",
         "Comment": "some string from db",

          CAC:{
          {

          "TypeId":  1,                    /*Value is always 1*/
         
            add: {
            "email":               "some string from data ",
            "dName" :  "some string from data",
            "Provider"        :  "some string from data",

            "eFlag": false,
            "dFlag": false,
            "ID": 2
             
          }
        }
      }
    })


    name ,comment,email,provider and dname values are present in one CDT  . I'm trying build an array structure and get email and dname  from main CDT where existing values are present.


    1. Have already existing CDT I..e Main CDT ---name ,comment,email,dname and few other fields and now i have added CAC Cdt in this mail CDT as an array

    2. Created One CDT for CAC with fields type ID and add CDT

    3. In ADD CDT , added fields email,name,provider,eflag ,dflag 

    Can you please help because of incorrect looping server got crashes due to memoryheap


  • 0
    Certified Lead Developer
    in reply to ZAINAB

    The info you're providing is all super unclear.  Please show us:

    1) a screenshot of your actual incoming data (making sure we can understand where a CDT is an array of values or not)
    2) a screenshot of your actual currently-configured expression rule, which you're trying to run and it isn't working

    Just double checking here but do you know how to use a!forEach()?  From the context of the code in your original post expression rule screenshot, it looks like you might not.  I don't see a single reference to "fv!item" though, so it's making me prety doubtful.

    e.g.

    a!map(
      name: "some string from DB",
      comment: "some comment",
      
      translatedInputs: a!forEach(
        ri!testInput,
        a!map(
          email: fv!item.inputEmail,
          dName: fv!item.name,
          eFlag: false(),
          isActive: fv!item.activeFlag
        )
      )
    )

  • 0
    Certified Lead Developer
    in reply to Mike Schmitt

    (and of course that entire thing can just be wrapped in a!toJson once you know it's working...)

  •   :

    I have one table in DB and created a CDT created from the same  . In the CDT I want to add a nested CDT , will it impact  db of that table if I add nested cdt in the CDT?

  • 0
    Certified Lead Developer
    in reply to ZAINAB

    I don't recommend ever using nested CDTs, personally.

  • a!toJson(
    {
    name: "NAME",
    Comment: "comments",
    CAC: {
    a!map(
    TypeId: 1,
    addcolleague: a!map(
    email: "requestorEmail",
    displayname:"requestorName",

    deletedFlag: false,
    identityProviderID: 2,
    idFromProvider:"Value"

    )

    )
    }
    }
    )


    I'm getting output as 


    "{"name":"NAME",
      Comment":"comments",

    "CAC:
    [

    {"TypeId":1,
    "addcolleague":{"email":"requestorEmail",
    "displayname":"requestorName",
    deletedFlag":false,
    "identityProviderID":2,

    "idFromProvider":"sagdoi"

    }}

    ]

    }"


     :Instead  of [ ] , I need  { } ,can you please help ,rest everything is expected.


    I'm passing this expressinrule output as an input to integration ,it says [ ] is invalid. can you please help

  • 0
    Certified Lead Developer
    in reply to ZAINAB
    Instead  of [ ] , I need  { }

    The [ ] here are because the structure of your code indicates that the "CAC" property will contain an array, since you use curly brackets and then a!map().  If it's just supposed to contain a single sub-dictionary then you don't need to double-indicate this - meaning you could just pass in an a!map() call, OR the curly brackets - when you use both, it assumes that the property contains an array of (one of) that map.

    This is what I get when I comment out just one of those: