Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

How to iterate the array find some elements & pass their associated values to store in new variable

Rochel hans
Tera Contributor

Hello  @Ankur Bawiskar @Chuck Tomasi @Pradeep Sharma 

 

We have an array retrieved from the "cmdb_ci_rel" table where the array contains the group's and their associated sys-id's but we are unable to iterate the array to find the values and then extract their sys_id to store these values in new variables which later needs to be passed in to another function

 

Sample array : [{"sys_id":"sys-id of the group","name":"group name "},{"sys_id":"sys-id of the group","name":"group name"},{"sys_id":"sys-id of the group","name":"group name"},{"sys_id":"sys-id of the group","name":"group name"}];

 

Can you suggest how we can interate , the group names are based on the CI in addition to certain suffixes of the groups where suffix could be something like approver , manager etc

 

Regards

Rochel 

5 REPLIES 5

James Chun
Kilo Patron

Hi @Rochel hans,

 

Where are you doing the iteration? A script? Flow designer? A workflow?

Also, can you provide what you have done and what went wrong?

 

Thanks

hello James , 

 

Its in the script include , there is already a function where some of the parameters like CI value , its owners are passed (the owners are the manager and deputy manager of these relationship groups ). There are 4 different types of groups .

 

We are able to generate the array with sys_id , name of the group but we also need to check in the array if a certain group exists that associated sys-id must be retrieved and stored in a new variable 

 

code : 

var busId = "sys_id of the CI";

var busServiceGroups = new GlideRecord('cmdb_rel_group');

busServiceGroups.addEncodedQuery("ci.sys_class_name=cmdb_ci_service^ci=" + busId);

 

busServiceGroups.query();

 

var groupDetails = []; // creating empty array to store group values

 

while (busServiceGroups.next()) {

    var groupSysId = busServiceGroups.getValue('group');

    var groupName = busServiceGroups.group.getDisplayValue();

 

//groupInfo is the object with 2 parameters , in the groupDetails array there are 4 objects in the output as there only 4 rel groups for this CI passed.

    var groupInfo = {

        sys_id: groupSysId,

        name: groupName

 

    };

 

    groupDetails.push(groupInfo);

    var newArray = JSON.stringify(groupDetails);

 

}

   

gs.info("The new array values are " + newArray);

 the output is as i mentioned above

 

what we need now is  : for example if the array has lets approver group in it , it should pass the sys_id of the approver group and i need to save it a new variable.

what we tried already is to use array.indexOf , include functions but its not passing the values like we need since its returns only the index.

Regards

Rochel

Thanks @Rochel hans,

 

Sorry, I did not get the part where you said 'what we need now is  : for example if the array has lets approver group in it , it should pass the sys_id of the approver group and i need to save it a new variable.'

 

But I am assuming that you want to save the sys_id of a group to another variable that passes a condition? If so, can't you just have an if statement within the while loop?

 

Thanks

 

Tai Vu
Kilo Patron
Kilo Patron

Hi @Rochel hans 

To iterate over the array and extract the sys_id values for each group, you can use a loop to go through each element in the array.

Sample.

var arr = [{"sys_id":"sys-id of the group","name":"group name "},{"sys_id":"sys-id of the group","name":"group name"},{"sys_id":"sys-id of the group","name":"group name"},{"sys_id":"sys-id of the group","name":"group name"}];

for (var i in arr){
    gs.info(arr[i].sys_id);
    gs.info(arr[i].name);
}

 

Cheers,

Tai Vu