Display Multi row variable set columns in notification

Chenab Khanna
Tera Expert

Hi

I have a multi row variable set and there is data in the columns. Does anyone have any idea how can i display that table in notification?

I am using email script wherein i am calling the variables via GlideAppVariablePoolQuestionSet, but unable to get the multi row variable?

Is there any way possible?

or may be some columns in it?

1 ACCEPTED SOLUTION

@Chenab Khanna 

that's correct.

If you are using any reference variable inside MRVS you will get sys_id and not the display value

you will have to query the reference table with that sys_id and get the display value.

Something like this

Updated in bold is the change

(function runMailScript( /* GlideRecord */ current, /* TemplatePrinter */ template,
                                            /* Optional EmailOutbound */
                                            email, /* Optional GlideRecord */ email_action,
                                            /* Optional GlideRecord */
                                            event) {
    var req_id = current.sysapproval;
    template.print('<p><span style="font-family: arial, helvetica, sans-serif; font-size: 10pt;"><strong>' + req_id.number + '</strong>');
    template.print(' : ' + req_id.short_description + ' <br /> <br />');

    //print variables
    var set = new GlideappVariablePoolQuestionSet();
    set.setRequestID(req_id);
    set.load();
    var vs = set.getFlatQuestions();

    if (vs.size() > 0) {
        template.print('<strong>Request Item Variables:</strong><br /><br />');
        for (var i = 0; i < vs.size(); i++) {
            var show_line = 'true';
            if (vs.get(i).getLabel() == 'Line Manager Approval required?' || vs.get(i).getLabel() == 'Line Manager') {
                show_line = 'false';
            }

            if (vs.get(i).getLabel() == 'AD Action') {
                var ritmGR = new GlideRecord('sc_req_item');
                if (ritmGR.get(req_id)) {
                    gs.log("Entered into the IF conditon of AD Action");

                    template.print('<table>');
                    template.print('<th>Name</th><th>Email</th><th>Department</th>');
                    var mrvs = ritmGR.variables.ad_management_multirow; //check and put correct name
                    var rowCount = mrvs.getRowCount();
                    gs.log("print mrvs " + mrvs);
                    gs.log("Row count of MRVS length " + rowCount);

                    for (var s = 0; s < rowCount; s++) {
                        var row = mvrs.getRow(s);

                        var displayDepartmentValue = getActualValue('cmn_department', row.user_department);

                        template.print("<tr>");
                        template.print("<td><center>" + row.user_name + "</center></td>"); //check fieldname
                        template.print("<td><left>" + row.user_email + "</left></td>"); //check fieldname
                        template.print("<td><left>" + displayDepartmentValue + "</left></td>"); //check fieldname
                        template.print("</tr>");
                    }

                    template.print('</table>');
                }
            }
            if (vs.get(i).getLabel() != '' && vs.get(i).getLabel() != null && show_line == 'true' && vs.get(i).getDisplayValue() != '' && vs.get(i).getLabel() != 'AD Action') {
                template.space(4);
                template.print('<strong>' + vs.get(i).getLabel() + "</strong>: " + vs.get(i).getDisplayValue() + "<br />");

            }
        }
    }

    function getActualValue(table, value){

        var gr = new GlideRecord(table);
        gr.addQuery("sys_id", value);
        gr.query();
        if (gr.next()) {
            return gr.getDisplayValue();
        }        
    }

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

Regards
Ankur

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

View solution in original post

21 REPLIES 21

@Chenab Khanna 

please share your sample MRVS json string and the script you are trying

Regards
Ankur

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

Hi, please find the script below - 

 

(function runMailScript( /* GlideRecord */ current, /* TemplatePrinter */ template,
/* Optional EmailOutbound */
email, /* Optional GlideRecord */ email_action,
/* Optional GlideRecord */
event) {
var req_id = current.sysapproval;
template.print('<p><span style="font-family: arial, helvetica, sans-serif; font-size: 10pt;"><strong>' + req_id.number + '</strong>');
template.print(' : ' + req_id.short_description + ' <br /> <br />');

//print variables
var set = new GlideappVariablePoolQuestionSet();
set.setRequestID(req_id);
set.load();
var vs = set.getFlatQuestions();

if (vs.size() > 0) {
template.print('<strong>Request Item Variables:</strong><br /><br />');
for (var i = 0; i < vs.size(); i++) {
var show_line = 'true';
if (vs.get(i).getLabel() == 'Line Manager Approval required?' || vs.get(i).getLabel() == 'Line Manager') {
show_line = 'false';
}

if (vs.get(i).getLabel() == 'AD Action') {
var ritmGR = new GlideRecord('sc_req_item');
if (ritmGR.get(current.sys_id)) {
gs.log("Entered into the IF conditon of AD Action");

var mrvs = ritmGR.variables.ad_management_multirow; //check and put correct name
var rowCount = mrvs.getRowCount();
gs.log("print mrvs " + mrvs);
gs.log("Row count of MRVS length " + rowCount);

for (var s = 0; s < rowCount; s++) {
var row = mvrs.getRow(s);
template.print("<tr>");
template.print("<td><center>" + row.user_name + "</center></td>"); //check fieldname
template.print("<td><left>" + row.user_email + "</left></td>"); //check fieldname
template.print("<td><left>" + row.user_department + "</left></td>"); //check fieldname
template.print("</tr>");
}
}
}
if (vs.get(i).getLabel() != '' && vs.get(i).getLabel() != null && show_line == 'true' && vs.get(i).getDisplayValue() != '' && vs.get(i).getLabel() != 'AD Action') {
template.space(4);
template.print('<strong>' + vs.get(i).getLabel() + "</strong>: " + vs.get(i).getDisplayValue() + "<br />");

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

I have been trying different things, this time it did not go into the if condition - Entered into the IF conditon of AD Action

@Chenab Khanna

please update code as below

use req_id to query

if (ritmGR.get(req_id)) {

Regards
Ankur

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

Worked. Now i am able to get the values in the notification but its not coming in a tabular format. 

find_real_file.png

and also i am getting the sys id's. Can you help on this?

Hello Chenab,

add <tr border=1> in your notification, then you will see a tabular format.

Mark the comment as helpful if it helps.