Внешние скрипты используются для хранения функций и классов 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); // значение, которое будет передаваться на сторону клиента 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); 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(); // значение, которое будет передаваться на сторону клиента 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); }
- No labels