Read script helper functions for LFDocumentContentBuilder
Summarize
Summary of LFDocumentContentBuilder Script Helper Functions
TheLFDocumentContentBuilderis a utility in ServiceNow designed to help customers build document content programmatically. It enables the extraction and organization of translatable content from various artifacts, regardless of whether they use standard translation tables. This is particularly useful for localization and translation tasks within the Zurich release and beyond.
Show less
Key Functions and Their Use
- initialize(version, targetLanguage, sysid, tableName): Acts as a constructor for creating an instance of LFDocumentContentBuilder specifying the document version (e.g., "v1" for Zurich), target language, artifact sysid, and its table name.
- processString(string, groupName, label): Adds a single string as a translatable document content element grouped under a specified name with a unique label.
- processStringArray(stringArray, groupName, label): Processes multiple strings, adding each as elements grouped and labeled accordingly.
- processScript(scriptContent, groupName, label): Extracts translatable strings from scripts that use
getMessage,gs.getMessage, orgs.getMessageLang, facilitating translation of script messages. - processTranslatableFieldsForSingleRecord(glideRecord, groupName): Automatically processes all translatable fields (translatedfield, translatedtext, translatedhtml) of a single GlideRecord, grouping the content for translation.
- processTranslatableFieldsForMultipleRecords(tableName, encodedQuery, groupName): Fetches and processes multiple records from a table based on a query, extracting all translatable fields into grouped elements.
- processElement(element): Adds a pre-built LFDocumentContentElement to the document content, allowing manual construction and inclusion of elements.
- build(): Generates and returns the finalized LFDocumentContent object representing all accumulated translatable content. Note that
getFinalJSONis deprecated andbuild()should be used instead.
Practical Application
Customers can instantiate the builder to gather and organize translatable content from records, scripts, or string arrays. For example, using processTranslatableFieldsForSingleRecord simplifies extracting all relevant fields from a record, while processScript helps with script-based messages.
The builder supports grouping and labeling content elements, making it easier to manage and reference translation units.
Example Usage
A sample script demonstrates creating an LFDocumentContentBuilder, processing translatable fields from a GlideRecord, adding custom fields and elements, and finally building the document content object ready for localization workflows.
Another example shows how to iterate over the LFDocumentContent object’s elements and fields to retrieve original and translated values, facilitating saving or further processing of translated content.
The LFDocumentContentBuilder provides utility functions to build document content. Use these functions to write the logic to extract the translatable content from any artifacts regardless of them using standard tables or not for translations.
initialize (version, targetLanguage, sys_id, tableName)
| Name | Type | Description |
|---|---|---|
| Version | String | The version type of the document content to be generated. For Zurich, this value is v1. |
| targetLanguage | String | The target language of the localization task document content. The target language is the same as the language available from the read script function argument. |
| Sys_id | String | The sys_id of the artifact record. |
| tableName | String | The table name of the artifact record. |
processString (string, groupName, label)
| Name | Type | Description |
|---|---|---|
| string | String | The value for which a document content entry is created. |
| groupName | String | The name of the group to which element should belong. |
| label | String | The unique label identifier for the created element. |
processStringArray (stringArray, groupName, label)
| Name | Type | Description |
|---|---|---|
| stringArray | List of Strings | The list of values for which document content entry is created. |
| groupName | String | The name of the group these strings belongs to. |
| label | String | The unique label identifier for these strings. |
processScript (scriptContent, groupName, label)
| Name | Type | Description |
|---|---|---|
| scriptContent | String | The Script to be processed to get the strings present as input of getMessage, gs.getMessage, or gs.getMessageLang. |
| groupName | String | The name of the group for this input. |
| label | String | The unique label identifier for this input. |
var documentContentBuilder = new LFDocumentContentBuilder("v1", language, sysId, tableName);
Var name = "name";
documentContentBuilder .processScript("gs.getMessage('Hello {0}, How are you', name)", "Script_Group", "Script_Label");processTranslatableFieldsForSingleRecord (glideRecord, groupName)
| Name | Type | Description |
|---|---|---|
| glideRecord | GlideRecord | The GlideRecord object to be processed for translatable fields. The GlideRecord should be pointing to the valid table record. |
| groupName | String | The name of the group for this input. |
processTranslatableFieldsForMultipleRecords (tableName, encodedQuery, groupName)
| Name | Type | Description |
|---|---|---|
| tableName | String | The table to fetch records. |
| encodedQuery | String | The encoded query for filtering records from the processTranslatableFieldsForSingleRecord table. |
| groupName | String | The name of the group for this input. |
processElement()
| element | LFDocumentContentElement | Element to be added to the document content. |
build()
Returns the LFDocumentContent object.
getTranslatableContent: function(params) {
var tableName = params.tableName;
var sysId = params.sysId;
var language = params.language;
var lfDocumentContentBuilder = new global.LFDocumentContentBuilder("v1", language, sysId, tableName);
// This will create a new object of LFDocumentContent and stores it internally
lfDocumentContentBuilder.processTranslatableFieldsForSingleRecord(gr, "Basic Info");
var field = LFDocumentContentHelper.createField(originalValue, translatedValue);
field.setTextType(LFDocumentContentHelper.PLAIN_TEXT_TYPE);
// All the other relevant attributes can be set
var element = LFDocumentContentHelper.createElement(groupName, label);
element.addField(field);
lfDocumentContentBuilder.processElement(element); // Adds element to the LFDocumentContent object
return lfDocumentContentBuilder.build(); // return the LFDocumentContent object
}
Sample script to extract data from the LFDocumentContent
saveTranslatedContent: function(documentContent) {
// LFDocumentContent object is passed as an argument to the saveTranslatedContent
var targetLanguage = documentContent.getLanguage();
var version = documentContent.getVersion();
var elements = documentContent.getElements(); // Array of LFDocumentContentElement objects
for (var idx = 0; idx < elements.length; idx++) {
var element = elements[idx];
var groupName = element.getGroupName();
var fields = element.getFields(); // Array of LFDocumentContentField objects
for (var fieldIdx = 0; fieldIdx < fields.length; fieldIdx++) {
var field = fields[fieldIdx];
var originalValue = field.getOriginalValue();
var translatedValue = field.getTranslatedValue();
// Get all the other required members and process them appropriately
}
}
}