Внешние скрипты
Внешние скрипты используются для хранения функций и классов JavaScript, которые выполняются на сервере. Внешние скрипты обычно указывают либо класс объекта, либо функцию.
Требуемая роль: admin.
Создание внешнего скрипта
Внешний скрипт имеет имя, описание и сам скрипт. Также можно указать опции активные или вызываемые клиентом.
Чтобы создать новый скрипт, выполните следующие действия:
- Перейдите в Настройка системы → Внешние скрипты.
- Нажмите Создать и заполните поля.
- Нажмите Сохранить или Сохранить и выйти, чтобы применить изменения.
Поля формы Внешний скрипт
Поле | Обязательно | Описание |
---|---|---|
Наименование | Да | Укажите имя внешнего скрипта. Оно должно совпадать с именем класса, используемым в поле скрипта. Кроме того, имя внешнего скрипта должно быть уникальным и не может содержать пробелы. |
Описание | Нет | Добавьте краткое описание действия. |
Активно | Нет | Установите флажок, чтобы активировать скрипт. Когда флажок установлен, скрипт выполняется при вызове; при неактивном флажке скрипт не выполняется. |
Доступно для Client API | Нет | Установите флажок, чтобы сделать этот скрипт доступным для вызова скриптов на стороне клиента. |
Отключить проверку ACL | Нет | Установите этот флажок, чтобы этот скрипт не проходил проверку правилами контроля доступа (ACL) при выполнении в клиентских скриптах. |
Скрипт | Да | Укажите скрипт на стороне сервера, который будет запускаться при вызове из других скриптов. |
При вызове включения скрипта в другие скрипты на стороне сервера используйте метод ss.importIncludeScript класса SimpleSystem, как показано в примере ниже:
ss.importIncludeScript('EmailHelper');
const helper = new EmailHelper();
Иначе скрипт будет недоступен.
Примеры использования
Используйте внешние скрипты доступные для вызова на стороне клиента, если вам нужно использовать серверные методы. Ниже представлены два простых примера вызова внешних скриптов на стороне клиента и сервера.
Внешние скрипты на формах
Вариант использования – это расчет периода времени между двумя указанными значениями с использованием определенного графика.
Для этого создайте внешний скрипт со следующими параметрами:
Поле | Значение |
---|---|
Наименование | DurationCalculator |
Активно | true |
Доступно для Client API | true |
Скрипт | Введите код ниже в поле. |
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:
- Создайте экземпляр SimpleAjax.
- Передайте имя вызываемого метода, используя зарезервированный параметр sysparm_name.
- Передайте значения из формы с использованием параметров sysparm_start, sysparm_end, sysparm_schedule.
- Вызовите внешний скрипт, используя метод getXML(callback).
- Обработайте ответ с помощью функции callback, указанной ниже.
- Переменная ответа будет содержать значение, возвращаемое методом 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 API | 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();
}
});
При вызове значений, передаваемых со стороны клиента, используйте 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);
}