Скрипт вычисления значения параметра

Категория скрипта "Вычисление значений параметров событий".

Значения параметра, кроме значений произвольного справочника

Скрипт предназначен для вычисления значений параметров пользовательских действий по событию.

Место настройки скрипта

Форма добавления параметра пользовательского действия по событию, см. Добавление пользовательской кнопки.

Когда выполняется скрипт

Первый раз скрипт выполняется при сохранении параметра (значение переменной form = null).

При работе в интерфейсе оператора скрипт выполняется:

  • при открытии пользовательских форм с данным параметром;
  • при изменении значений параметров, от которых зависит значение текущего параметра, т.е. коды которых указаны в коллекции PARAMS_FOR_UPDATE_ON_FORMS;
  • при открытии формы добавления или редактирования контента со встроенным приложением, для которого запрашиваются дополнительные параметры.

Результат выполнения скрипта

При первом вычислении скрипт возвращает либо null, либо пустую коллекцию, либо коллекцию параметров объекта, от которых зависит вычисление значения скрипта.

В интерфейсе оператора скрипт возвращает вычисленное значение параметра на форме. Значение параметра зависит от типа параметра.

В случае ошибки при определении или заполнении вычислимого параметра, параметр заполняется значением по умолчанию, если оно задано в скрипте. В противном случае, параметр остается пуст.

Переменные и их значения

Глобальные переменные:

  • user — пользователь, инициализировавший событие (объект класса "Сотрудник" (employee)).

    user=null, если событие инициализировал суперпользователь.

  • ip — ip-адрес рабочего места пользователя user. Переменная не определяется, если действие выполняется автоматически системой (а не пользователем);
  • appVersion — версия приложения;
  • api — используется для обращения к методам api, например api.utils, api.ldap, api.timing, см. Методы API;
  • modules — используется для обращения к скриптовому модулю и конкретному методу, определенному в нем, с помощью конструкции: modules.{код модуля}.{имя метода}({параметры метода}...), см. Скрипт текста модуля;
  • logger — используется для отладки скриптов и позволяет вывести в лог на указанный уровень переданную строку, см. Отладочные сообщения.
  • utils — синоним api.utils.

Переменные контекста:

  • attrCode — код параметра, для которого вычисляется значение.
  • form — значения полей формы, на которой присутствует параметр с признаком "Вычисление значения", в том числе текущее значение данного параметра (представление объекта на клиенте).
  • cardObject — объект, из карточки которого было инициировано событие. Переменная доступна, если событие вызвано из карточки объекта.
  • list — коллекция объектов списка (не более 1000), если событие инициировано из списка объектов.

    Метод limitExceeded() возвращает:

    • true, если лимит превышен и часть объектов списка не попали в данную коллекцию.
    • false, если в коллекции 1000 и меньше объектов.
  • source — способ вызова события: OBJECT_LIST из списка объектов и OBJECT_CARD из карточки.
  • subjects — объекты, выбранные в списке объектов (если событие вызвано из списка объектов), или текущий объект (если событие вызвано из карточки объекта). Переменная содержит только те объекты, относительно которых у текущего пользователя есть право на выполняемое действие. Если прав нет, то subjects = null.
  • subject — содержит в себе произвольный объект из коллекции subjects (если событие вызвано из списка объектов), или текущий объект (если событие вызвано из карточки объекта). Если у текущего пользователя нет права на выполняемое действие, то subject = null.

Контекстные переменные: list, subject, subjects, cardObject, source недоступны при выполнении скрипта в интерфейсе администратора (при открытии формы добавления или редактирования контента со встроенным приложением, для которого запрашиваются дополнительные параметры).

Особенности скрипта

  • Может быть задан для редактируемых и нередактируемых параметров.
  • В качестве вычисляющих параметров могут быть указаны любые параметры действия по событию, в том числе вычислимые. Вычислимые параметры действия по событию могут образовывать между собой сложные зависимости, порядок вычисления значений которых определяется системой. Циклические зависимости между вычислимыми параметрами не допустимы.
  • В PARAMS_FOR_UPDATE_ON_FORMS указывается существующий код параметра, иначе при сохранении скрипта возникнет ошибка.
  • При первом вычислении скрипт должен вернут либо null, либо пустую коллекцию, либо коллекцию параметров объекта, от которых зависит вычисление значения скрипта. Другие значения возвращать нельзя, поэтому в скрипте обязательно должна присутствовать обработка случая с form==null.

Для агрегирующих параметров возвращаемое значение задается в следующих форматах:

  • отдел;
  • команда;
  • команда: сотрудник;
  • отдел: сотрудник.

Также значение агрегирующего параметра можно вернуть в виде subject[%параметр%] или form[%параметр%], где %параметр% — код агрегирующего параметра. В этом случае система вернет сохраненное значение данного агрегирующего параметра или его значение на форме соответственно.

Структура скрипта

1. Установка списка кодов вычисляющих параметров (обозначены 'paramCode1', 'paramCode2', ...)

def PARAMS_FOR_UPDATE_ON_FORMS = ['param1', 'param2', ...]
if (form == null)
{
return PARAMS_FOR_UPDATE_ON_FORMS
}

2. Возврат значения параметра, устанавливаемого на форме, в зависимости от значений вычисляющих параметров на форме, текущего значения параметра на форме, текущего состояния объекта (зависимость обозначена функцией 'f')

return f(form.paramCode1, form.paramCode2, form[paramCodeCode], subject.attr3, ...)

Пример скрипта

1. Скрипт возвращает значение параметра, устанавливаемого на форме, в зависимости от значения другого параметра.

def PARAMS_FOR_UPDATE_ON_FORMS = ['param1']
if (form == null)
{
return PARAMS_FOR_UPDATE_ON_FORMS
}
return form.param1.title

Вычисление значений произвольного справочника

Скрипт используется для вычисления значения при редактировании для произвольного справочника.

Скрипт учитывает скрипты фильтрации и скрипты вычисления элементов произвольного справочника. Если вычисленное значение не содержится в выпадающем списке, то оно должно сбросится.

Когда выполняется скрипт

  • При открытии формы заполнения параметров действия по событию, на которой расположен редактируемый параметр.
  • При открытии формы добавления или редактирования контента со встроенным приложением, для которого запрашиваются дополнительные параметры.

Результат выполнения скрипта

Скрипт возвращает ассоциативный список "ключ–значение" (ключ и значение имеют тип "строка"). Если ассоциативный список содержит несколько пар "ключ-значение", то в качестве значения будет выбрана первая указанная пара.

В случае ошибки при определении или заполнении вычислимого параметра, параметр заполняется значением по умолчанию, если оно задано в скрипте. В противном случае, параметр остается пуст.

Переменные и их значения

Переменные контекста:

  • form — значения полей формы, на которой присутствует параметр типа "Элемент произвольного справочника" с признаком "Вычисление значения" (представление объекта на клиенте).
  • attrCode — код параметра, для которого вычисляется значение.
  • subject — ссылка на объект, к которому применяется действие.
  • subjects — набор ссылок на объекты, к которым применяется действие по событию. Переменная доступна, если действие выполняется как массовая операция в списке;
  • cardObject — объект, из карточки которого было инициировано событие. Переменная доступна, если событие вызвано из карточки объекта.
  • list — содержит ассоциативный список, который возвращает скрипт вычисления элементов произвольного справочника этого параметра.
  • source — строка, способ вызова события: OBJECT_LIST из списка объектов и OBJECT_CARD из карточки объекта.

Контекстные переменные: list, subject, subjects, cardObject, source недоступны при выполнении скрипта в интерфейсе администратора (при открытии формы добавления или редактирования контента со встроенным приложением, для которого запрашиваются дополнительные параметры).

Пример скрипта

1. Скрипт возвращает значение параметра, устанавливаемого на форме, в зависимости от значения другого параметра.

//ПАРАМЕТРЫ
def PARAMS_FOR_UPDATE_ON_FORMS = ['param1']
if (form == null) {
return PARAMS_FOR_UPDATE_ON_FORMS
}
dictionary = ['1':'один']
return dictionary