Variables translated in notifications
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-02-2016 09:23 AM
Hi all,
I found a way to have variables (from Service Catalog) translated in notifications.
I created a script include:
var My_EmailFormatter = Class.create();
My_EmailFormatter.prototype = {
initialize: function() {
},
compareVariables : function(a,b) {
if (a.order < b.order)
return -1;
if (a.order > b.order)
return 1;
return 0;
},
getTranslated : function(text, language){
var gr2 = new GlideRecord('sys_translated');
gr2.addQuery('value', text);
gr2.addQuery('element', 'question_text');
gr2.addQuery('language', language);
gr2.query();
if (gr2.next()){
return gr2.label;
} else {
return text;
}
},
getTranslatedText : function(sysid, fieldName, text, language){
var gr2 = new GlideRecord('sys_translated_text');
gr2.addQuery('documentkey', sysid);
gr2.addQuery('fieldname', fieldName);
gr2.addQuery('language', language);
gr2.query();
if (gr2.next()){
return gr2.value;
} else {
return text;
}
},
type: 'My_EmailFormatter'
};
Then I created the email script "get_all_variables_translated" for approval notification:
var lang = 'it';
var mf = new My_EmailFormatter();
var item = new GlideRecord("sc_req_item");
item.get(current.sysapproval.sys_id);
item.query();
while(item.next()) {
template.print('<dl class="dl-horizontal">');
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() != '' && vs.get(i).getDisplayValue() != '') {
template.print('<dt>' + mf.getTranslated(vs.get(i).getLabel(),lang) + ':</dt>');
template.print('<dd>' + vs.get(i).getDisplayValue() + '</dd>');
}
}
template.print('</dl>');
}
You can call the script from Notification HTML body using
${mail_script:get_all_variables_translated}
You can get the language dinamically if you want.
Hope this helps.
Bye
PS: Please mark Helpful, Like or Correct answer
- Labels:
-
Scripting and Coding
- 3,565 Views
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-25-2017 11:40 PM
Hi Dreon
I'm just starting to use ServiceNow since this March and maybe i'm the only Chinese guy to use this tool.
I just want to add the cu into the notification ony by one
Here is my variable set in English
var gr_ritm = new GlideRecord('sc_req_item');
if(gr_ritm.get(current.document_id)){
template.print(gr_ritm.variables.monitor);
I get to know that i need to get the value from sys_translated, but i don't know how to prepare the scripts.
I tried with this but it shows incorrect results:
var retVal='';
var trans=new GlideRecord('sys_translated');
// trans.addQuery('documentkey', current.cat_item.sys_id);
trans.addquery('value','Compact laptop');
trans.addQuery('Element','question_text');
trans.addQuery('language', 'zh');
trans.query();
while (trans.next()){
retVal=trans.label;
}
template.print(retVal)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2017 12:26 AM
Hi Moon LIN,
have you tried replacing the row
trans.addQuery('Element','question_text');
with
trans.addQuery('element','question_text');
?
The field names should be case sensitive..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-20-2017 11:44 AM
Hi Dreon,
I have followed your suggestions the only thing I changed was I wanted Polish as opposed to Italian.
I triggered an email notification, this returned a blank email. Would you have any advice ?
Kind regards,
Chris