ServiceNow Fluent
Summarize
Summary of ServiceNow Fluent
ServiceNow Fluent is a declarative, domain-specific language (DSL) based on TypeScript designed to define application metadata files ([sysmetadata]) efficiently. It enables developers to specify metadata such as tables, roles, ACLs, business rules, and Automated Test Framework tests through concise source code rather than using forms or UI builders. Applications developed or converted with the ServiceNow IDE or SDK support Fluent, which also offers two-way synchronization to keep metadata and source code aligned across the instance.
Show less
Key Features
- Declarative API: Fluent provides specialized APIs for various metadata types and a Record API for metadata without dedicated APIs, helping you define application components programmatically.
- Two-way Synchronization: Changes made in source code or other ServiceNow AI Platform interfaces sync automatically, ensuring consistency between code and instance metadata.
- Source Code-Based Metadata Definition: Metadata is defined in
.now.tsfiles using Fluent APIs with TypeScript, supporting imports from JavaScript modules for server-side scripting. - Selective Sync Control: Use code directives like
@fluent-ignore,@fluent-disable-sync, and@fluent-disable-sync-for-fileto manage synchronization behavior and suppress diagnostic warnings. - Supported Metadata Types: Most metadata types can be represented, except some like Metadata Snapshots and UX Assets, which remain as XML files.
Practical Usage
Developers write application metadata in TypeScript files with the extension .now.ts, importing the necessary Fluent APIs (e.g., Table, ClientScript, BusinessRule). This allows defining tables with columns, client scripts with UI behavior, and business rules with server-side logic, referencing external JavaScript modules as needed.
For example, you can create a table with columns, define a client script that shows a message on record load, and a business rule that logs state changes on record updates—all declaratively in source code.
Benefits for ServiceNow Customers
- Streamlined Development: Reduce dependency on form-based metadata creation by leveraging code, enabling automation, reuse, and version control.
- Improved Consistency: Two-way sync ensures your source code and instance metadata stay aligned, decreasing errors and drift.
- Enhanced Collaboration: Using TypeScript and standard development tools facilitates collaboration among developers and integration with CI/CD pipelines.
- Flexibility and Control: Advanced sync directives let you control how changes propagate, enabling safe management of metadata in complex environments.
Next Steps
To begin using ServiceNow Fluent, customers should use the ServiceNow IDE or SDK, refer to the Fluent API reference, and explore example repositories for practical coding patterns. This approach is suited for teams seeking efficient, source-driven application development on the ServiceNow platform.
Define application metadata in source code using the ServiceNow Fluent domain-specific programming language.
Overview of ServiceNow Fluent
ServiceNow Fluent is a declarative, domain-specific language (DSL) based on TypeScript for defining the metadata files [sys_metadata] that make up applications and includes APIs for the different types of metadata, such as tables, roles, ACLs, business rules, and Automated Test Framework tests.
Developers define this metadata in a few lines of code instead of through a form or builder tool user interface. Applications created or converted with the ServiceNow IDE or ServiceNow SDK support development in ServiceNow Fluent.
ServiceNow Fluent supports two-way synchronization, which allows changes to metadata to be synced from other ServiceNow AI Platform user interfaces into source code and changes to source code to be synced back to metadata across the instance.
To get started using the ServiceNow IDE or ServiceNow SDK, see the ServiceNow IDE or ServiceNow SDK documentation.
ServiceNow Fluent APIs
ServiceNow Fluent includes APIs for many types of metadata. You can use the Record API to define application metadata that doesn't have a dedicated API. For the latest list of supported APIs and examples, see the ServiceNow Fluent API reference and ServiceNow SDK examples repository on GitHub.
ServiceNow Fluent usage
In files with the .now.ts extension, use objects in the ServiceNow Fluent APIs to define metadata in the application. You must also include the required imports for the APIs from @servicenow/sdk/core. For objects with server-side scripts, such as the BusinessRule object, you can import and use code from JavaScript modules.
import '@servicenow/sdk/global'
import { BusinessRule, ClientScript, DateColumn, StringColumn, Table } from '@servicenow/sdk/core'
import { showStateUpdate } from '../server/script.js'
//creates todo table, with three columns (deadline, status and task)
export const x_snc_example_to_do = Table({
name: 'x_snc_example_to_do',
schema: {
deadline: DateColumn({ label: 'Deadline' }),
state: StringColumn({
label: 'State',
choices: {
ready: { label: 'Ready' },
completed: { label: 'Completed' },
inProgress: { label: 'In Progress' },
},
}),
task: StringColumn({ label: 'Task', maxLength: 120 }),
},
})
//creates a client script that pops up 'Table loaded successfully!!' message everytime todo record is loaded
ClientScript({
$id: Now.ID['cs0'],
name: 'my_client_script',
table: 'x_snc_example_to_do',
active: true,
appliesExtended: false,
global: true,
uiType: 'all',
description: 'Custom client script generated by Now SDK',
isolateScript: false,
type: 'onLoad',
script: Now.include('../client/client-script.js'),
})
//creates a business rule that pops up state change message whenever a todo record is updated
BusinessRule({
$id: Now.ID['br0'],
action: ['update'],
table: 'x_snc_example_to_do',
script: showStateUpdate,
name: 'LogStateChange',
order: 100,
when: 'after',
active: true,
})function onLoad() {
g_form.addInfoMessage("Table loaded successfully!!")
}import { gs } from '@servicenow/glide'
export function showStateUpdate(current, previous) {
const currentState = current.getValue('state')
const previousState = previous.getValue('state')
gs.addInfoMessage(`state updated from "${previousState}" to "${currentState}"`)
}After building the application, this source code generates the following application metadata files on the instance.
@fluent-ignore: Suppresses ServiceNow Fluent diagnostic warnings and errors in the following line of code.@fluent-disable-sync: Turns off syncing changes to a ServiceNow Fluent object. Use before a call expression (for example,Record({ ... })) to turn off syncing for that object and its child objects. Only use this directive if you want to ignore changes made outside of the source code to the object and never update it when syncing.@fluent-disable-sync-for-file: Turns off syncing changes to a ServiceNow Fluent file (.now.ts). Use in the first line of the file to turn off syncing for all code in the file. Only use this directive if you want to ignore changes made outside of the source code to the file and never update it when syncing.