Email Script to display all populated Variables from the [sc_request]

Scott29
Kilo Sage

I have an email script I use for RITM and SC_TASK (below). How can I run this on an email notification targeting the [sc_request] table? assuming the request only has 1 RITM.

 

 

 

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

    template.print('<span style="font-size: 14pt; font-weight: 600">Request Details</span><br/><br/>');
    var variables = current.variables.getElements();
    for (var i = 0; i < variables.length; i++) {
        var question = variables[i].getQuestion();
        var label = question.getLabel();
        var value = question.getDisplayValue()

        if(value!= '' && value != 'false'){
            template.space(4);
            template.print(label + ': <span style="font-weight: 600">' + value + '</span><br/>');
        }
    }
})(current, template, email, email_action, event);
3 ACCEPTED SOLUTIONS

Medi C
Giga Sage

@Scott29 

If your email script is being used on a notification which is on sc_request table, you would need to get the related requested item in order to get the variables.

 

Please use and adjust the following as per your requirements:

(function runMailScript( /* GlideRecord */ current, /* TemplatePrinter */ template,
    /* Optional EmailOutbound */
    email, /* Optional GlideRecord */ email_action,
    /* Optional GlideRecord */
    event) {
    var grRequest = new GlideRecord("sc_request");
    if (grRequest.get(grRequest.sys_id)) {
        var grReqItem = new GlideRecord("sc_req_item");
        grReqItem.addQuery("request=" + grRequest.sys_id);
        grReqItem.query();
        if (grReqItem.next()) {
            template.print('<span style="font-size: 14pt; font-weight: 600">Request Details</span><br/><br/>');
            var variables = grReqItem.variables.getElements();
            for (var i = 0; i < variables.length; i++) {
                var question = variables[i].getQuestion();
                var label = question.getLabel();
                var value = question.getDisplayValue();
                if (value != '' && value != 'false') {
                    template.space(4);
                    template.print(label + ': <span style="font-weight: 600">' + value + '</span><br/>');
                }
            }
        }
    }
})(current, template, email, email_action, event);

If you found this helpful, please hit the thumbs-up button and mark as correct. That helps others find their solutions.

View solution in original post

Amit Verma
Kilo Patron
Kilo Patron

Hi @Scott29 

 

Try with below email script. Ensure that your notification is running on sc_request table.

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

    // Add your code here
    template.print("Summary of Requested items:<br />");
    var item = new GlideRecord("sc_req_item");
    item.addQuery("request", current.sys_id);
    item.query();
    while (item.next()) {
        template.print(item.number + ":  " + item.quantity + " X " + item.cat_item.getDisplayValue() + " at " + item.cat_item.price.getDisplayValue() + " each <br />");
        template.print("    Options:<br />");
        var keys = [];
        var set = new GlideappVariablePoolQuestionSet();
        set.setRequestID(item.sys_id);
        set.load();
        var vs = set.getFlatQuestions();
        for (var i = 0; i < vs.size(); i++) {
            if (vs.get(i).getLabel() != '') {
                template.space(4);
                template.print('     ' + vs.get(i).getLabel() + " = " + vs.get(i).getDisplayValue() + "<br />");
            }
        }
    }
})(current, template, email, email_action, event);

 

Thanks and Regards

Amit Verma


Please mark this response as correct and helpful if it assisted you with your question.

View solution in original post

Ankur Bawiskar
Tera Patron
Tera Patron

@Scott29 

update as this

(function runMailScript( /* GlideRecord */ current, /* TemplatePrinter */ template,
    /* Optional EmailOutbound */
    email, /* Optional GlideRecord */ email_action,
    /* Optional GlideRecord */
    event) {
    var ritmRec = new GlideRecord("sc_req_item");
    if (ritmRec.get('request', current.sys_id)) {
            template.print('<span style="font-size: 14pt; font-weight: 600">Request Details</span><br/><br/>');
            var variables = ritmRec.variables.getElements();
            for (var i = 0; i < variables.length; i++) {
                var question = variables[i].getQuestion();
                var label = question.getLabel();
                var value = question.getDisplayValue();
                if (value != '' && value != 'false') {
                    template.space(4);
                    template.print(label + ': <span style="font-weight: 600">' + value + '</span><br/>');
                }
            }
    }
})(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
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

3 REPLIES 3

Medi C
Giga Sage

@Scott29 

If your email script is being used on a notification which is on sc_request table, you would need to get the related requested item in order to get the variables.

 

Please use and adjust the following as per your requirements:

(function runMailScript( /* GlideRecord */ current, /* TemplatePrinter */ template,
    /* Optional EmailOutbound */
    email, /* Optional GlideRecord */ email_action,
    /* Optional GlideRecord */
    event) {
    var grRequest = new GlideRecord("sc_request");
    if (grRequest.get(grRequest.sys_id)) {
        var grReqItem = new GlideRecord("sc_req_item");
        grReqItem.addQuery("request=" + grRequest.sys_id);
        grReqItem.query();
        if (grReqItem.next()) {
            template.print('<span style="font-size: 14pt; font-weight: 600">Request Details</span><br/><br/>');
            var variables = grReqItem.variables.getElements();
            for (var i = 0; i < variables.length; i++) {
                var question = variables[i].getQuestion();
                var label = question.getLabel();
                var value = question.getDisplayValue();
                if (value != '' && value != 'false') {
                    template.space(4);
                    template.print(label + ': <span style="font-weight: 600">' + value + '</span><br/>');
                }
            }
        }
    }
})(current, template, email, email_action, event);

If you found this helpful, please hit the thumbs-up button and mark as correct. That helps others find their solutions.

Amit Verma
Kilo Patron
Kilo Patron

Hi @Scott29 

 

Try with below email script. Ensure that your notification is running on sc_request table.

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

    // Add your code here
    template.print("Summary of Requested items:<br />");
    var item = new GlideRecord("sc_req_item");
    item.addQuery("request", current.sys_id);
    item.query();
    while (item.next()) {
        template.print(item.number + ":  " + item.quantity + " X " + item.cat_item.getDisplayValue() + " at " + item.cat_item.price.getDisplayValue() + " each <br />");
        template.print("    Options:<br />");
        var keys = [];
        var set = new GlideappVariablePoolQuestionSet();
        set.setRequestID(item.sys_id);
        set.load();
        var vs = set.getFlatQuestions();
        for (var i = 0; i < vs.size(); i++) {
            if (vs.get(i).getLabel() != '') {
                template.space(4);
                template.print('     ' + vs.get(i).getLabel() + " = " + vs.get(i).getDisplayValue() + "<br />");
            }
        }
    }
})(current, template, email, email_action, event);

 

Thanks and Regards

Amit Verma


Please mark this response as correct and helpful if it assisted you with your question.

Ankur Bawiskar
Tera Patron
Tera Patron

@Scott29 

update as this

(function runMailScript( /* GlideRecord */ current, /* TemplatePrinter */ template,
    /* Optional EmailOutbound */
    email, /* Optional GlideRecord */ email_action,
    /* Optional GlideRecord */
    event) {
    var ritmRec = new GlideRecord("sc_req_item");
    if (ritmRec.get('request', current.sys_id)) {
            template.print('<span style="font-size: 14pt; font-weight: 600">Request Details</span><br/><br/>');
            var variables = ritmRec.variables.getElements();
            for (var i = 0; i < variables.length; i++) {
                var question = variables[i].getQuestion();
                var label = question.getLabel();
                var value = question.getDisplayValue();
                if (value != '' && value != 'false') {
                    template.space(4);
                    template.print(label + ': <span style="font-weight: 600">' + value + '</span><br/>');
                }
            }
    }
})(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
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader