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.

Pulling Approvers from Affected CIs

olivershields
Kilo Explorer

Hi,

I am trying to automate the change process to pull a list of approvers from all the affected CIs when the change state is set to 'Approval requested'.

I can get it working when i pull from a single Reference field on a CI but many items have multiple approvers required on them and when i try to pull it from a List field it does nothing at all.

Im using the below script which has been adapted from one i found here.

var answer = [];


var affCIs = new GlideRecord('task_ci');
affCIs.addQuery('task', current.sys_id);
affCIs.query();
while(affCIs.next()){
    answer.push(affCIs.ci_item.u_approver__person_); !
}

u_approver__person is the name of the list field im trying to pull from. If you can suggest a field that can serve this function better or correct the script to pull from the List correctly that would be great.

Thanks

1 ACCEPTED SOLUTION

Here's an example .. Make sure that the affected CI list is loaded before this activity is being called ...



answer = [];



try


{


      var approvers = '';


      var ci = new GlideRecord('task_ci');


      ci.addQuery('task',current.sys_id);


      ci.query();


      while (ci.next()) {


              if(approvers.length == 0)


                      {


                      approvers = approvers + ci.ci_item.u_approver__person_.toString();


              }


              else


                      {


                      approvers = approvers + ',' + ci.ci_item.u_approver__person_.toString();


              }


      }


     


      var approversArray = (approvers.toString() + ',').split(',');


     


      for(i=0;i<approversArray.length;i++)


              {


              if(JSUtil.notNil(approversArray[i]))


                      {


                      answer.push(approversArray[i]);


              }


      }


}



catch(err)


{


      gs.log('Error While Processing-'+err + '-' +approvers);


}


View solution in original post

19 REPLIES 19

Sorry .. There was a typo...



var answer = [];


try


{


      var approvers = (current.watch_list.toString() + ',').split(',');


      gs.log('Current Value-'+current.watch_list.toString());


      gs.log('Approvers-'+approvers);


      for(i=0;i<approvers.length;i++)


      {


              if(JSUtil.notNil(approvers[i]))


              {


                      answer.push(approvers[i]);


                      gs.log('Pushing the approvers-'+approvers[i]);


              }


      }


}



catch(err)


{


      gs.log('Error While Processing-'+err);


}



Change the field from watch_list to your custom field


The syntax error is gone but its still not working im afraid.



I noticed in one of the earlier attempts that you too the _ off the end of u_approver__person. Was this for a reason or just a typo?


The code works well .. Just tested on demo .. Have you replaced 'watch_list' with your field name ? What is your field name ?


Here is a screenshot of what im entering into the User Approval task on the workflow:



SN3.png


You can remove line 1. That is not required ... Also what is the output from the logs ?