ServiceNow Fluent
Summarize
Summary of ServiceNow Fluent
ServiceNow Fluent is a declarative, domain-specific language (DSL) built on TypeScript that enables ServiceNow developers to define application metadata through code instead of traditional form or UI-based tools. It supports creating and managing metadata files (sysmetadata) that constitute applications, including tables, roles, ACLs, business rules, and Automated Test Framework tests. This approach streamlines application development by allowing developers to write concise code for metadata definition.
Show less
ServiceNow Fluent integrates with the ServiceNow IDE and ServiceNow SDK, supporting two-way synchronization that keeps metadata and source code aligned across the instance and user interfaces. This synchronization ensures that changes made in either the code or the platform UI are reflected consistently.
Key Features
- APIs for Metadata Types: Fluent provides APIs for many metadata types, with a general Record API for those without dedicated APIs.
- Code-Based Metadata Definition: Metadata is defined in
.now.tsfiles using ServiceNow Fluent API objects and TypeScript syntax. - Integration with JavaScript Modules: Server-side scripted objects like Business Rules can import and use JavaScript modules, allowing modular and reusable code.
- Two-Way Synchronization: Changes in metadata or source code automatically sync in both directions between the platform and source files.
- Support for Common Metadata Types: Fluent currently excludes certain metadata like Metadata Snapshots and UX Assets, which remain managed as XML files.
- Code Comment Directives: Special directives can suppress warnings or disable synchronization selectively on lines, objects, or entire Fluent files.
Practical Usage
To use ServiceNow Fluent, developers write TypeScript code importing APIs from @servicenow/sdk/core to define application components such as tables, client scripts, and business rules. Example workflows include:
- Defining a table with columns and choice fields.
- Creating client scripts that execute on record events using external script files.
- Implementing business rules that run server-side logic by importing functions from JavaScript modules.
These source files generate the corresponding application metadata on the ServiceNow instance when built, enabling version-controlled, code-centric application development.
Benefits for ServiceNow Customers
- Improved Developer Productivity: Writing metadata as code reduces manual configuration and accelerates development cycles.
- Version Control Friendly: Metadata in source code facilitates better versioning, collaboration, and code review practices.
- Consistency and Synchronization: Two-way syncing keeps metadata consistent across UI and code, reducing errors and drift.
- Modularity and Reusability: Leveraging TypeScript and JavaScript modules encourages cleaner, maintainable codebases.
- Flexibility: Fluent enables defining complex applications declaratively with familiar programming constructs.
Getting Started
ServiceNow customers can begin leveraging ServiceNow Fluent by using the ServiceNow IDE or ServiceNow SDK, referencing the Fluent API documentation and code examples to define and manage application metadata effectively within their development workflows.
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.