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.

Unable to get my notification email script to work in my custom application.

Ty9
Kilo Contributor

I have a notification email script that works great in the Global application. I'm unable to get it in my custom application though. The email script adds and displays all variables from a record producer within a sent email.  Below are things I have tried and more details I discovered while troubleshooting:

  • I created a copy of the working email script and put it in the custom application
  • The record producer is in the custom application
  • The record producer variable are in the custom application
  • The email notifications are in the custom application

Any help would be appreciated.  

Thanks.

Ty

1 ACCEPTED SOLUTION

As warning says, its scoped application in which getGlideObject can't be used, try reading in servicenow docs of alternative methods.

You are using method of GlideElement - Global methods in scope application

To use => GlideElement - Scoped methods

https://docs.servicenow.com/bundle/kingston-application-development/page/app-store/dev_portal/API_re...

 

If you need to print variable name & its value.

You can simply print 'key' variable label & for value like

for (var key in current.variables) {

template.print('<p><font size="3" face="arial">');
template.print("<div><b>" + key + "</b>: " + current.variables[key] + "</div>\r\n");

}

Just in-case if all good & emails are not getting sent, you may need to just pass email id in this

email.setFrom("Facilities Help Desk <facilities.helpdesk@terumobct.com>");

email.setFrom("facilities.helpdesk@terumobct.com");

 

Mark this answer helpful, if it solves, if not let me know happy to help you.

 

View solution in original post

6 REPLIES 6

Ty9
Kilo Contributor

Thanks ratnesh!  I really appreciate your input.  It works almost perfectly. 

Now the email script is displaying the variable names instead of the variable questions.

 

find_real_file.png

Any idea how to fix this? 

 

Here is what the email script looks like now:

 

(function runMailScript(current, template, email, email_action, event) {

// Add your code here
email.setFrom("Facilities Help Desk <facilities.helpdesk@terumobct.com>");

for (var key in current.variables) {

template.print('<p><font size="3" face="arial">');
template.print("<div><b>" + key + "</b>: " + current.variables[key].getDisplayValue() + "</div>\r\n");
}

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

 

 

Thanks!

 

Ty

I am glad to know it worked for you.

For your query, I tried to find something simple & straight, but could not. But able to do via some scripting.

 

Create a function which will accept two parameter sys_id of catalog item & variable name for which question needs to be find.

function getVariableName(catItem, variable_name){
 

var question='';
var gr=new GlideRecord('item_option_new');
gr.addQuery('cat_item',catItem);
gr.addQuery('name',variable_name);
gr.query();
 
if(gr.next()){
question=gr.question_text;
}
return question;

}
 

 

So your code go like this.

 

(function runMailScript(current, template, email, email_action, event) {

    // Add your code here
    email.setFrom("Facilities Help Desk <facilities.helpdesk@terumobct.com>");

    for (var key in current.variables) {

        template.print('<p><font size="3" face="arial">');
        template.print("<div><b>" + getVariableName(current.cat_item, key) + "</b>: " + current.variables[key].getDisplayValue() + "</div>\r\n");
    }



    function getVariableName(catItem, variable_name) {


        var question = '';
        var gr = new GlideRecord('item_option_new');
        gr.addQuery('cat_item', catItem);
        gr.addQuery('name', variable_name);
        gr.query();

        if (gr.next()) {
            question = gr.question_text;
        }
        return question;
    }


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

 

I believe making code modular so that it can be used from other scripts whenever needed. For this you can create a custom script include & call this via script include.

Sample you can see for JSUtil : which is out-of-box script include for common JS function to be used.

 

Do let me know if it worked or not worked for you