Document template scripts
Summarize
Summary of Document template scripts
Document template scripts in ServiceNow allow customers to dynamically modify the text within the body of HTML document templates. These scripts enable both simple and complex data retrieval and formatting tasks, such as displaying HR data or performing advanced database queries. By embedding script tags referencing named scripts, customers can reuse scripts across multiple document templates, enhancing consistency and efficiency.
Show less
How to Create and Use Document Template Scripts
Customers create scripts by navigating to Document Templates > Document Templates Script. Scripts are embedded in HTML templates using the syntax ${templatescript:scriptname}, where scriptname is the name of the created script. The output of these scripts is automatically sanitized if the Sanitize option is enabled in the HTML template settings, ensuring secure content rendering.
Key Features
- Dynamic Content Generation: Scripts can dynamically generate HTML content based on task records, such as retrieving emergency contact information for employees.
- Localization Support: Scripts can access the document template’s language and date format settings to translate dynamic tokens and format dates accordingly.
- Reusable Script Logic: Using embedded script tags, the same script can be reused in multiple templates, reducing duplication.
- APIs for Localization: Methods like
getDisplayValueLangandgetByFormathelp translate field values and format dates per the document template’s locale settings.
Practical Application
A typical use case is an employeeemergencycontacts script that queries emergency contact data related to an employee and outputs it as an HTML table. When called in an HTML document template, this script populates the emergency contacts list dynamically. Furthermore, the script respects the selected language and date format of the document template, ensuring localized display for fields like relationship, priority, and date of birth.
For example, if the document template language is set to German and the date format to dd/MM/yyyy, the script automatically translates terms and formats dates accordingly in the generated document. This localization enhances document clarity and user experience for diverse audiences.
Benefits for ServiceNow Customers
- Enables tailored document generation with dynamic and localized content.
- Improves maintainability by centralizing complex logic in reusable scripts.
- Ensures secure and consistent output through automatic sanitization options.
- Simplifies the creation of rich, data-driven HR and case-related documents.
With document template scripts, you can dynamically change the text in the body of the HTML template. Document template scripts allow you to perform simple tasks, such as displaying HR data, and complex ones, such as making advanced database queries.
${template_script:script name} embedded script tag to the body of the HTML template, replacing script name with the name of the script you created. This makes it easy to use the same scripts in
multiple document templates. You can create a script by navigating to.Example of how to create and use a document template script in an HTML template
- The employee_emergency_contacts script populates the emergency contacts list in an
Employee Profile document.
(function runTemplateScript(target /*GlideRecord for target task*/ ) { var getHeaderCell = function(label) { return '<th style="border: 1px solid #dddddd; text-align: left; padding: 8px;">' + label + '</th>'; }; var getDataCell = function(value) { return '<td style="border: 1px solid #dddddd; text-align: left; padding: 8px;">' + value + '</td>'; }; var html = ''; var hrTaskGr = new GlideRecord('sn_hr_core_contact'); hrTaskGr.addQuery('user', target.getValue('subject_person')); hrTaskGr.query(); while(hrTaskGr.next()) { html = html + '<tr>'; html = html + getDataCell(hrTaskGr.getDisplayValue('name')); html = html + getDataCell(hrTaskGr.getDisplayValue('mobile_phone')); html = html + getDataCell(hrTaskGr.getDisplayValue('relation_to_employee')); html = html + '</tr>'; } if(!gs.nil(html)) html = '<h4>Emergency Contact Information</h4><table width="500px;"><tr>' + getHeaderCell('Name') + getHeaderCell('Mobile phone') + getHeaderCell('Relationship') + html + '</table>'; return html; })(target); - The employee_emergency_contacts script is called in an HTML document template by typing $ {template_script:employee_emergency_contacts} in the body of the Employee Profile HTML document template.
- The Employee Profile HTML document template is selected on a case and the document template is generated with emergency contacts list as follows:
Example of how document template script translates text in an HTML template
Following is an employee_emergency_contacts script that populates the emergency contacts list in an Employee Profile document.
docTemplate in this script references to the document template record, which helps in identifying the language and date format that are selected on the document template.
getDisplayValueLang is an API that helps in changing the language of dynamic tokens to the display language set in the Template language field in a document template.
getByFormat is an API that helps in displaying the date in the format set in the Template date format field in a document template.
(function runTemplateScript(target /*GlideRecord for target task*/, docTemplate /*GlideRecord for doc template*/) {
//Add your code here to return the dynamic content for template
var getHeaderCell = function(label) {
return '<th style="border: 1px solid #dddddd; text-align: left; padding: 8px;">' + label + '</th>';
};
var getDataCell = function(value) {
return '<td style="border: 1px solid #dddddd; text-align: left; padding: 8px;">' + value + '</td>';
};
var html = '';
var templateLang = docTemplate.getValue('language');
var templateDateFormat = docTemplate.getValue('template_date_format');
var hrTaskGr = new GlideRecord('sn_hr_core_contact');
hrTaskGr.addQuery('user', target.getValue('subject_person'));
hrTaskGr.query();
while(hrTaskGr.next()) {
var dob = hrTaskGr.getDisplayValue('date_of_birth');
var grDOB = new GlideDateTime(dob);
html = html + '<tr>';
html = html + getDataCell(hrTaskGr.getDisplayValue('name'));
html = html + getDataCell(hrTaskGr.getDisplayValue('mobile_phone'));
html = html + getDataCell(hrTaskGr.getElement('relation_to_employee').getDisplayValueLang(templateLang));
html = html + getDataCell(hrTaskGr.getElement('priority').getDisplayValueLang(templateLang));
html = html + getDataCell(grDOB.getLocalDate().getByFormat(templateDateFormat)
);
html = html + '</tr>';
}
if(!gs.nil(html))
html = '<h4>Emergency Contact Information</h4><table width="500px;"><tr>' + getHeaderCell('Name') + getHeaderCell('Mobile phone') + getHeaderCell('Relationship') + getHeaderCell('Priority') + getHeaderCell('Date of birth') + html + '</table>';
return html;
})(target, docTemplate);- While configuring an HTML template, the template language is selected as German and date format is set to dd/MM/yyyy.
- The HTML document template is referenced in an HR case.
- When the agent previews the document, generates the attachment, or initiates document tasks for participants, priority and relationship fields are translated into the German language, and dates appear in the dd/MM/yyyy format.