ServiceNow Fluent language constructs
Summarize
Summary of ServiceNow Fluent language constructs
ServiceNow Fluent language constructs enhance development using ServiceNow Fluent APIs by providing specialized syntax for defining and referencing metadata, including IDs, external references, file inclusions, and attachments within source code. These constructs improve code maintainability, readability, and synchronization between source files and platform metadata.
Show less
Key Features
- Now.ID: Defines human-readable unique IDs for metadata in source code using
Now.ID['string' or number]. These IDs are hashed into uniquesysidvalues during application build. IDs defined with Now.ID are for metadata definition only and cannot reference other metadata; use constants to reference metadata within the same application. - Now.ref: References metadata from different applications not defined in source code. It uses the format
Now.ref['table', 'sysid' or {column: 'value'}, ...]. This enables linking to external roles or records by name, GUID, or compound keys to maintain cross-application relationships. - Now.include: Includes text content from other files within the same application using relative file paths (
Now.include('./path/to/file')). This is ideal for properties that support other languages (e.g., JavaScript, HTML, CSS), enabling proper syntax highlighting and two-way synchronization between source code and platform metadata. - Now.attach: Attaches image files to records by referencing image files within the application using relative paths (
Now.attach('./path/to/file')). Supported formats include .jpg, .jpeg, .png, .gif, .bmp, .ico, and .svg. This construct supports two-way synchronization between source code files and instance metadata and allows image reuse by assigning the attachment to constants.
Practical Application for ServiceNow Customers
Using these constructs, customers can:
- Define and manage metadata with clear, human-readable IDs that are reliably transformed into system IDs.
- Reference external metadata cleanly without embedding raw IDs, improving cross-application integration.
- Modularize code by including external script or markup files, facilitating collaboration and maintaining syntax awareness.
- Manage and reuse image assets efficiently within applications while ensuring consistency between source control and the ServiceNow instance.
Overall, these constructs streamline application development and maintenance by promoting best practices in metadata management, code modularity, and asset synchronization within the ServiceNow AI Platform environment.
ServiceNow Fluent language constructs provide additional functionality for development in source code with ServiceNow Fluent APIs.
Now.ID
The Now.ID construct is used to specify human-readable unique IDs for metadata defined in source code. Now.ID uses the format Now.ID['String' or Number] with the
$id property in ServiceNow Fluent APIs. When you build an application, the ID is hashed into a unique sys_id.
You can use Now.ID only to define IDs for metadata and not to reference other metadata in an application. To reference other metadata within the same application, you can assign the object to a const variable and reference the variable identifier in other objects.
import { Role } from "@servicenow/sdk/core"
const managerRole = Role({
$id: Now.ID['manager_role'],
name: 'x_snc_example.manager'
})
Record({
table: 'some_table',
data: {
role: managerRole //"role" is a reference field to sys_user_role
}
})
Now.ref
The Now.ref construct is used to reference metadata in a different application that's not defined in source code. Now.ref uses the format Now.ref['table', 'sys_id' or {column: 'value'},
{column: 'value'}] with Reference properties in ServiceNow Fluent APIs.
import { Role } from "@servicenow/sdk/core"
Role({
name: 'x_test.admin',
contains_roles: [
'x_test.manager',
Now.ref('sys_user_role', { name: 'x_test.itil' }), // Coalescing ID reference
Now.ref('sys_user_role', '${itomId}'), // GUID-based reference
Now.ref('sys_user_role', '3D82d1a88947942a90b6d8aa25126d439b', { name: 'x_test.csm' }), // GUID with coalescing ID reference
],
})
Now.include
The Now.include construct is used to refer to text content in another file in the same application rather than including the content inline. Now.include uses relative file paths in the format
Now.include('./path/to/file') with any property in ServiceNow Fluent APIs. Using Now.include allows you to code with the appropriate syntax highlighting for the file type and is especially helpful with properties that support other
languages like JavaScript, HTML, CSS, and more.
Now.include supports two-way synchronization so that changes to fields from other ServiceNow AI Platform user interfaces are synced into the referenced file's source code and changes to the source code are synced back to metadata across the instance.
import { ScriptInclude } from '@servicenow/sdk/core'
ScriptInclude({
$id: Now.ID['my-script-include'],
name: 'MyScriptInclude',
active: true,
apiName: 'x_scriptincludes.MyScriptInclude',
script: Now.include('./MyScriptInclude.server.js') //The actual content of the "script" field is contained in the file specified
})
Now.attach
The Now.attach construct is used to refer to an image file in the same application and attach it to records associated with metadata defined in source code. Now.attach uses relative file paths
in the format Now.attach('./path/to/file') with properties that support user images (the user_image field type) in ServiceNow Fluent APIs. Now.attach supports the following file formats: .jpg, .jpeg, .png, .gif,
.bmp, .ico, and .svg.
Now.attach supports two-way synchronization so that changes to image files from other ServiceNow AI Platform user interfaces are synced into the application in source code and changes to image files in source code are synced back to metadata across the instance.
import { Record } from '@servicenow/sdk/core'
Record({
$id: Now.ID['sample-service-portal'],
table: 'sp_portal',
data: {
title: 'Sample Portal',
url_suffix: 'sample',
icon: Now.attach('../../assets/servicenow.jpg')
}
})
You can also reuse an image in an application by assigning the Now.attach construct to a const variable and referencing the variable identifier in other properties. For example:
import { Record } from '@servicenow/sdk/core'
const image = Now.attach('../../assets/servicenow.jpg')
Record({
$id: Now.ID['test'],
table: 'sp_portal',
data: {
title: 'Test Portal',
url_suffix: 'test',
icon: image,
logo: image,
}
})