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

    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();
    // значение, которое будет передаваться на сторону клиента
    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