Script Includes are used to store JavaScript functions and classes that will execute on the server. Script Includes generally specify either an object class or a function.
Creating a script include
A script include has a name, a description, and a script itself. Also, it is possible to specify options active or client-callable.
To create a new script include, please complete the following steps:
- Navigate to SystemDefinition → ScriptIncludes.
- Click New and fill in the fields.
- Click Save or Save and Exit to apply changes.
Script Include form fields
Field | Mandatory | Description |
---|
Name | Y | Script include name. Should match with the class name declared in the script field. Also, script include name should be unique and can not contain spaces. |
Description | N | Short action description. |
Active |
| Select this checkbox to activate this script. When selected, the script will execute when called; otherwise, it will not execute. |
Client Callable |
| Select this checkbox to make this script available to call on the client-side scripts. |
Disable ACL Check |
| Select this checkbox to let this script include do go through an ACL check when executed within Client Scripts. |
Script | Y | Define the server-side script to run when called from other scripts. Note |
---|
When invoking script includes in other server-side scripts, please use the ss.importIncludeScript method of the SimpleSystem class like shown on the example below: Code Block |
---|
language | js |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
| ss.importIncludeScript('EmailHelper');
const helper = new EmailHelper(); |
Otherwise, the script would be unavailable. |
|
Practical case
You can call a script include in case you need to use server-side methods on the client-side. To perform this, the Client Callable attribute. For more clarity, let us consider two simple examples of calling a script include from:
- a client-side
- a server-side.
Script includes on client-side
A practical case is a calculation of the time period between two specified values using a specific schedule.
For this, let us create script include with parameters like shown below:
Name | DurationCalculator |
---|
Active | true |
---|
ClientCallableClient Callable | true |
---|
Script | Enter a script from the code example below: Code Block |
---|
language | js |
---|
theme | Eclipse |
---|
title |
---|
|
|
---|
Server-side Client callable script include |
|
|
on the client-side | ss.importIncludeScript('AbstractAjaxProcessor');
var DurationCalculator = Class.create();
DurationCalculator.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getDuration() {
const start = new SimpleDateTime(this.getParameter('sysparm_start'));
const end = new SimpleDateTime(this.getParameter('sysparm_end'));
const scheduleID = this.getParameter('sysparm_schedule');
const schedule = new SimpleSchedule(scheduleID);
// value that would be passed to client-side
return schedule.duration(start, end).getDurationSeconds() * 1000;
}
}); |
Note |
---|
When you call values passing from the client-side, use this.getParameter like shown in a code example above to get the sysparm_ parameter value. |
|
In another example listed below, we use SimpleAjax on a client-side, and that is what we do:
- Create a SimpleAjax instance.
- Transfer the called method name using the reserved parameter sysparm_name.
- Transfer values from a form using the sysparm_start, sysparm_end, sysparm_schedule parameters.
- Call an include script using the getXML(callback) method.
- Process its response in the callback-function listed below.
- The answer variable will contain value return by the getDuration() method.
Code Block |
---|
language | js |
---|
theme | Eclipse |
---|
title | Script include on the client-side |
---|
linenumbers | true |
---|
|
if (s_form.getValue('start') && s_form.getValue('end') && s_form.getValue('schedule_id')) {
const calculate = new SimpleAjax('DurationCalculator'); // call script include
calculate.addParam('sysparm_name', 'getDuration'); // call method
calculate.addParam('sysparm_start', s_form.getValue('start')); // pass param
calculate.addParam('sysparm_end', s_form.getValue('end')); // pass param
calculate.addParam('sysparm_schedule', s_form.getValue('schedule_id')); // pass param
calculate.getXML(callback);
function callback(response) {
// value received from server-side
const answer = response.responseXML.documentElement.getAttribute('answer');
s_form.setValue('duration', answer);
}
} |
Script includes on server-side
Another example is the calculation of list items after filtering.
For this, let us create script include with parameters like shown below:
Name | getListItemsCount |
---|
Active | true |
---|
ClientCallableClient Callable | true |
---|
Script | Enter a script from the code example below: Code Block |
---|
language | js |
---|
theme | Eclipse |
---|
title | Script include on the server-side |
---|
linenumbers | true |
---|
| ss.importIncludeScript('AbstractAjaxProcessor');
var getListItemsCount = Class.create();
getListItemsCount.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getCount() {
const table_name = this.getParameter('sysparm_table_name');
const condition = this.getParameter('sysparm_condition_query');
const list = new SimpleRecord(table_name);
list.addEncodedQuery(condition);
list.selectAttributes('sys_id');
list.query();
// value that would be passed to client-side
return list.getRowCount();
}
}); |
Note |
---|
When you call values passing from the client-side, use this.getParameter like shown in a code example above to get the sysparm_ parameter value. |
|
---|
The client-side code will be the following:
Code Block |
---|
language | js |
---|
theme | Eclipse |
---|
title | Script include on the client-side |
---|
linenumbers | true |
---|
|
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
const sAjax = new SimpleAjax('getListItemsCount'); // initialize script include
sAjax.addParam('sysparm_name', 'getCount'); // call method
sAjax.addParam('sysparm_table_name', s_list.getTablesName()[0]); // pass param
sAjax.addParam('sysparm_condition_query', urlParams.get('condition') || '()'); // pass param
sAjax.getXML(callback);
function callback(response) {
// value received from server-side
const answer = response.responseXML.documentElement.getAttribute('answer');
s_list.clearMessages();
s_list.addInfoMessage(`List items count: ${answer}`, 2000);
} |