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.

Show MultiRow variable set in approval email notification

NIcollas Viggia
Tera Contributor

Hi, i am trying to retrieve variables from a Multirow variable set to an approval notification (sysapproval_approver table), but i am have trouble with that, i tried some solutions that i have seen in the forum, but that doesn't work for me. Below the email script that i am trying to use.

 

(function runMailScript(/* GlideRecord */ current, /* TemplatePrinter */ template,
          /* Optional EmailOutbound */ email, /* Optional GlideRecord */ email_action,
          /* Optional GlideRecord */ event) {
	var record = new GlideRecord('sc_req_item');
    var sysCurrentRecordSysId = current.sys_id;
    record.addQuery('sys_id', sysCurrentRecordSysId);
    record.query();
	while (record.next()) {
//Note, the value is a JSON string, so we parse it back into an obect to make it easier to work with
        var obj = JSON.parse(record.variables.request_information); //update with your variable set name
	for(var i=0; i<obj.length; i++) {
	template.print('<br/>' + 'System: ' + obj[i].system_name); 
	template.print('<br/>' + 'Profile: ' + obj[i].profile_name);
	template.print('<br/>' + 'Approver: ' + obj[i].aprovador_do_perfil);
// you copy and paste the template.print line and add more variables here	
		}
	}
}

)(current, template, email, email_action, event);

Below what is showing in the notification, its only retrieve the catalog variables and not the multirow that i setup in the mail script

find_real_file.png

1 ACCEPTED SOLUTION

@NIcollas Viggiano 

Glad to know.

For that sysId you need to query the table being referred by that variable and then get the display value

(function runMailScript(/* GlideRecord */ current, /* TemplatePrinter */ template,
          /* Optional EmailOutbound */ email, /* Optional GlideRecord */ email_action,
          /* Optional GlideRecord */ event) {

    
    var record = new GlideRecord('sc_req_item');
    var sysCurrentRecordSysId = current.sysapproval;
    record.addQuery('sys_id', sysCurrentRecordSysId);
    record.query();
    if (record.next()) {
        var obj = JSON.parse(record.variables.request_information); //update with your variable set name
        for(var i=0; i<obj.length; i++) {

            var rec = new GlideRecord('tableReferredBySystemName');
            rec.get(obj[i].system_name);

            var rec1 = new GlideRecord('tableReferredByProfileName');
            rec1.get(obj[i].profile_name);

            template.print('<br/>' + 'System: ' + rec.getDisplayValue()); 
            template.print('<br/>' + 'Profile: ' + rec1.getDisplayValue());
            template.print('<br/>' + 'Approver: ' + obj[i].aprovador_do_perfil);
        }
    }
}

)(current, template, email, email_action, event);

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

16 REPLIES 16

Mohith Devatte
Tera Sage
Tera Sage

hello @NIcollas Viggiano ,

try this script once 

Also make sure your syntax of accessing email script in notification is like below 

${mail_script:your_mail_script_name}

(function runMailScript(/* GlideRecord */ current, /* TemplatePrinter */ template,
          /* Optional EmailOutbound */ email, /* Optional GlideRecord */ email_action,
          /* Optional GlideRecord */ event) {
	

        var obj = JSON.parse(current.variables.request_information); //update with your variable set name
	for(var i=0; i<obj.length; i++) {
	template.print('<br/>' + 'System: ' + obj[i].system_name); 
	template.print('<br/>' + 'Profile: ' + obj[i].profile_name);
	template.print('<br/>' + 'Approver: ' + obj[i].aprovador_do_perfil);

		}
	
}

)(current, template, email, email_action, event);

Hope this helps 

please mark my answer correct if this helps you

I tried this, but still not showing the variables from multirow.

I check the syntax in notification, and its correct.

MrMuhammad
Giga Sage

@NIcollas Viggiano -  Please try this:

(function runMailScript(/* GlideRecord */ current, /* TemplatePrinter */ template,
   
        var mrvs = record.variables.request_information; //update with your variable set name
        var objectCount = obj.getRowCount();
	for(var i=0; i< objectCount .length; i++) {
        var row = mrvs.getRow(i)
	template.print('<br/>' + 'System: ' + row.system_name); 
	template.print('<br/>' + 'Profile: ' + row.profile_name);
	template.print('<br/>' + 'Approver: ' + row.aprovador_do_perfil);
// you copy and paste the template.print line and add more variables here	
		}
	}
}

)(current, template, email, email_action, event);
Regards,
Muhammad

still not working with that