Skip to main content

Service Catalog: use a loop to get variable values with very similar names

current.variables.<variable_name> works fine when you know the variable name

but what if you have a number of repeat variables with very similar names on the catalog item form, such as
retail_kit_1
retail_kit_2
retail_kit_3
...

And you wish to loop round and get all the values, and then use them to carry out a repeat task (for example, insert new CIs into the CMDB)?

must be an easier way of doing this...but until I find it here's some code that does the trick:

repeat fields on the catalog item form:



code to loop round these, for example in the RITM workflow:

//--get a load of variable values which are named very similar
var grRITM=new GlideRecord('sc_req_item');
if (grRITM.get('number', 'RITM0016189')){

   getVariables (grRITM);
}

function getVariables (grRITM){
    var variablePrefix='retail_kit_';
          
    for (i=1;i<10;i++){
        var kit_extra= get_variable(variablePrefix+i, grRITM);
                if (!gs.nil(kit_extra)){
          gs.print(kit_extra);
                }
         
    }
}

function get_variable (variable_name, grRITM){

        //--retrieve a variable value where the variable name is passed in as a string
        var sReturn='';
        var varGR=new GlideRecord('sc_item_option_mtom');
        varGR.addQuery('request_item', grRITM.sys_id);   //--sys id of the sc_req_item
                varGR.addQuery('sc_item_option.item_option_new.name='+variable_name);
        varGR.query();
               
        if(varGR.next()){
             var gr= new GlideRecord ('sc_item_option');
            gr.addQuery('sys_id', varGR.sc_item_option.toString());
            gr.query();
                       
            if(gr.next()){
                sReturn=gr.value; //--sys id, typically for this search          
            }
        }
        return sReturn;
}

Comments

Popular posts from this blog

Get URL Parameter - server side script (portal or classic UI)

Classic UI : var sURL_editparam = gs . action . getGlideURI (). getMap (). get ( ' sysparm_aparameter ' ); if ( sURL_editparam == 'true' ) { gs . addInfoMessage ( 'parameter passed ); } Portal : var sURL_editparam = $sp . getParameter ( " sysparm_aparameter " ); if ( sURL_editparam == 'true' ) { gs . addInfoMessage ( 'parameter passed ); }

ServiceNow - script include: build up the results as a JSON object (array) - example 2

function call var sCurrentGroupMembers = new <script_include> (). getGroupMembers ( group_sysid ); gs . print ( 'sCurrentGroupMembers:' + sCurrentGroupMembers ); var oGroupMembers = JSON . parse ( sCurrentGroupMembers ); gs . print ( JSON . stringify ( oGroupMembers . users )); oNewGroupMember = JSON . parse ( group_members ); var oGroupConfig = getGroupDeltas ( oGroupMembers . users , oNewGroupMember ); gs . print ( JSON . stringify ( oGroupConfig . remove )); gs . print ( JSON . stringify ( oGroupConfig . add )) output : *** Script: sCurrentGroupMembers: {"manager":"3b2649efdb0f8c10cc0652f3f39xxxxx", "email":"", "type":"33a2226edb99c340edfc7cbdae96xxxx", "description":"Created for xyz", "users":[{"user":"3b2649efdb0f8c10cc0652f3f396xxxx"},{"user":"856a8f71db3d73041b4ffc45ae96196a"},{"user":"3752771