Document template scripts

  • Release version: Yokohama
  • Updated January 30, 2025
  • 3 minutes to read
  • Summarize
    Summarized using AI
    This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.

    Summary of Document template scripts

    Document template scripts in ServiceNow enable dynamic modification of text within the body of HTML document templates. These scripts support a wide range of tasks, from simple data display, such as HR information, to complex database queries. By embedding a script tag (${templatescript:scriptname}) in the HTML template, you can reuse scripts across multiple document templates, enhancing efficiency and consistency.

    Show full answer Show less

    Creating and Using Document Template Scripts

    You create scripts under Document Templates > Document Templates Script. The script executes in the context of a target record (e.g., an HR case) and can generate HTML content dynamically, such as tables listing employee emergency contacts. When the Sanitize option is enabled on the HTML template, script output is automatically sanitized for security.

    Example scripts demonstrate how to query related records (like emergency contacts) and format output as HTML tables. Scripts can access record fields, apply display values, and generate structured content that appears in the generated document.

    Localization and Formatting

    Scripts can leverage the document template’s language and date format settings to localize content dynamically. APIs like getDisplayValueLang allow field values to be translated according to the template language, while getByFormat formats dates per the selected date format. This ensures documents are generated with appropriate translations and date formatting, improving readability and compliance with regional standards.

    Practical Benefits for ServiceNow Customers

    • Reusable dynamic content: Write once, use in multiple templates to maintain consistency and reduce maintenance.
    • Enhanced document personalization: Dynamically populate data, such as employee emergency contacts, with accurate formatting and localization.
    • Improved end-user experience: Generated documents reflect the correct language and date format settings, supporting global operations.
    • Security: Automatic sanitization protects against injection risks when enabled.

    By incorporating document template scripts, ServiceNow customers can create rich, flexible, and localized documents that align with their HR and other process needs, streamlining case management and reporting.

    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.

    You can add a ${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 toDocument Templates > Document Templates Script.
    Note:
    The output of the HTML script is automatically sanitized when the Sanitize option is enabled in the HTML template. For more details, refer to the Sanitize field in Configure an HTML document template.

    Example of how to create and use a document template script in an HTML template

    1. 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);
    2. 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.

      A template showing fields, including a script input area that has basic editing controls.

    3. The Employee Profile HTML document template is selected on a case and the document template is generated with emergency contacts list as follows:

      The HR Case form where you can enter "Employee Profile" in the Document template field.

      A preview of the Employee Profile document.

    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);
    Following is an example of how dynamic tokens are translated in an HTML doc template.
    1. While configuring an HTML template, the template language is selected as German and date format is set to dd/MM/yyyy.The HR Case Employment Verification Letter template. It displays all the fields and the body text that is used for the letter.
    2. The HTML document template is referenced in an HR case.
    3. 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.

      The translated preview of the document template. I is translated to German.