ServiceNow Fluent
Summarize
Summary of ServiceNow Fluent
ServiceNow Fluent is a domain-specific language (DSL) based on TypeScript, designed to define application metadata files within the ServiceNow platform. It allows developers to write metadata for tables, roles, ACLs, business rules, and tests in a concise code format rather than through traditional user interfaces. Fluent supports two-way synchronization, enabling changes in metadata to be reflected in both the source code and the ServiceNow instance.
Show less
Key Features
- APIs for Metadata: Fluent provides APIs for various metadata types, including Access Control Lists (ACLs), application menus, business rules, and more, allowing for comprehensive application definition.
- File Structure: Developers use the .now.ts extension to define metadata and must import necessary APIs from the @servicenow/sdk/core package.
- Code Reusability: The ability to reference content from other files enhances code organization and syntax highlighting, improving development efficiency.
- Directives: Comment directives like @fluent-ignore and @fluent-disable-sync allow developers to manage diagnostics and synchronization behavior for their code.
Key Outcomes
By utilizing ServiceNow Fluent, developers can efficiently create and manage application metadata, streamline the development process, and maintain synchronization between the source code and the ServiceNow instance. This enhances productivity and reduces errors, enabling quicker application deployment and updates.
Define application metadata in source code using the ServiceNow Fluent domain-specific programming language.
Overview of ServiceNow Fluent
ServiceNow Fluent is a 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 SDK support developing 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 SDK, see the ServiceNow SDK documentation.
APIs
ServiceNow Fluent includes APIs for the following types of metadata. You can use the Record API to define application metadata that doesn't have a dedicated API.
For details about the APIs and examples, see ServiceNow Fluent API reference and the ServiceNow SDK examples GitHub repository.
- Access control lists (ACLs)
- Application menus
- Automated Test Framework tests
- Business rules
- Client scripts
- Cross-scope privileges
- Lists
- Properties
- Records
- Roles
- Scripted REST APIs
- Tables
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.
Now.include('path/to/file'). Referring to content in a different file instead of including the content inline can
be helpful for records with fields that support JavaScript, HTML, CSS, and so on to make developing different file types easier with the appropriate syntax highlighting.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' },
in_progress: { 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,
applies_extended: false,
global: true,
ui_type: 'all',
description: 'Custom client script generated by Now SDK',
messages: '',
isolate_script: 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.