Перейти к основному содержимому
Версия: 1.21.3

Внешние скрипты

Внешние скрипты используются для хранения функций и классов JavaScript, которые выполняются на сервере. Внешние скрипты обычно указывают либо класс объекта, либо функцию.

подсказка

Требуемая роль: admin.

Создание внешнего скрипта

Внешний скрипт имеет имя, описание и сам скрипт. Также можно указать опции активные или вызываемые клиентом.

Чтобы создать новый скрипт, выполните следующие действия:

  1. Перейдите в Настройка системыВнешние скрипты.
  2. Нажмите Создать и заполните поля.
  3. Нажмите Сохранить или Сохранить и выйти, чтобы применить изменения.

Поля формы Внешний скрипт

ПолеОбязательноОписание
НаименованиеДаУкажите имя внешнего скрипта. Оно должно совпадать с именем класса, используемым в поле скрипта. Кроме того, имя внешнего скрипта должно быть уникальным и не может содержать пробелы.
ОписаниеНетДобавьте краткое описание действия.
АктивноНетУстановите флажок, чтобы активировать скрипт. Когда флажок установлен, скрипт выполняется при вызове; при неактивном флажке скрипт не выполняется.
Доступно для Client APIНетУстановите флажок, чтобы сделать этот скрипт доступным для вызова скриптов на стороне клиента.
Отключить проверку ACLНетУстановите этот флажок, чтобы этот скрипт не проходил проверку правилами контроля доступа (ACL) при выполнении в клиентских скриптах.
СкриптДа

Укажите скрипт на стороне сервера, который будет запускаться при вызове из других скриптов.

внимание

При вызове включения скрипта в другие скрипты на стороне сервера используйте метод ss.importIncludeScript класса SimpleSystem, как показано в примере ниже:

Пример скрипта
ss.importIncludeScript('EmailHelper');
const helper = new EmailHelper();

Иначе скрипт будет недоступен.

Примеры использования

Используйте внешние скрипты доступные для вызова на стороне клиента, если вам нужно использовать серверные методы. Ниже представлены два простых примера вызова внешних скриптов на стороне клиента и сервера.

Внешние скрипты на формах


Вариант использования – это расчет периода времени между двумя указанными значениями с использованием определенного графика.

Для этого создайте внешний скрипт со следующими параметрами:

ПолеЗначение
НаименованиеDurationCalculator
Активноtrue
Доступно для Client APItrue
СкриптВведите код ниже в поле.
Внешний скрипт, вызываемый клиентом
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;
}
});
внимание

При вызове значений, передаваемых со стороны клиента, используйте this.getParameter, как показано в примере кода выше, чтобы получить значение параметра sysparm_.

На стороне клиента используйте SimpleAjax:

  1. Создайте экземпляр SimpleAjax.
  2. Передайте имя вызываемого метода, используя зарезервированный параметр sysparm_name.
  3. Передайте значения из формы с использованием параметров sysparm_start, sysparm_end, sysparm_schedule.
  4. Вызовите внешний скрипт, используя метод getXML(callback).
  5. Обработайте ответ с помощью функции callback, указанной ниже.
  6. Переменная ответа будет содержать значение, возвращаемое методом getDuration().
Внешний скрипта на стороне клиента
if (s_form.getValue('start') && s_form.getValue('end') && s_form.getValue('schedule_id')) {

const calculate = new SimpleAjax('DurationCalculator'); // вызов внешнего скрипта
calculate.addParam('sysparm_name', 'getDuration'); // вызов метода
calculate.addParam('sysparm_start', s_form.getValue('start')); // переданный параметр
calculate.addParam('sysparm_end', s_form.getValue('end')); // переданный параметр calculate.addParam('sysparm_schedule', s_form.getValue('schedule_id')); // переданный параметр calculate.getXML(callback);
calculate.getXML(callback);

function callback(response) {
| // значение, получаемое со стороны сервера
const answer = response.responseXML.documentElement.getAttribute('answer');
s_form.setValue('duration', answer);
}
}

Внешние скрипты на списках


Другой пример – расчет элементов списка после фильтрации.

Для этого создайте внешний скрипт со следующими параметрами:

ПолеЗначение
НаименованиеgetListItemsCount
Активноtrue
Доступно для Client APItrue
СкриптВведите следующий код в поле.
Вызываемый клиентом внешний скрипт
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();
}
});
внимание

При вызове значений, передаваемых со стороны клиента, используйте this.getParameter, как показано в примере кода выше, чтобы получить значение параметра sysparm_.

Внешний скрипт на стороне клиента
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);

const sAjax = new SimpleAjax('getListItemsCount'); // инициализация внешнего скрипта
sAjax.addParam('sysparm_name', 'getCount'); // вызов метода
sAjax.addParam('sysparm_table_name', s_list.getTablesName()[0]); // переданный параметр sAjax.addParam('sysparm_condition_query', urlParams.get('condition') || '()'); // переданный параметр sAjax.getXML(callback);

function callback(response) {
// значение, получаемое со стороны сервера
const answer = response.responseXML.documentElement.getAttribute('answer');
s_list.clearMessages();
s_list.addInfoMessage(`List items count: ${answer}`, 2000);
}