Скрипт условия при входе в статус и выходе из статуса

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

С помощью скрипта можно задать ряд условий, которые будут проверяться при попытке перевода объекта в другой статус. Смена статуса объекта будет произведена при выполнении всех условий.

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

Форма "Добавление условия", вызванная из карточки статуса жизненного цикла, см. Условия смены статуса.

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

При попытке смены статуса объекта вручную или автоматически. В первую очередь выполняется проверка условий выхода из текущего статуса, затем проверяются условия входа в новый статус. Если на вход в статус и выход из статуса настроено несколько условий, они проверяются одновременно.

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

Скрипт возвращает значение "null" (пустую строку) или выводит сообщение об ошибке, которое задается в скрипте, см. Вывод пользовательских сообщений об ошибке.

Если все скрипты-условия вернули "null" (пустую строку), то происходит смена статуса.

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

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

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

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

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

    Если событие инициализировано скриптом (скриптовое действие по событию, скрипт на вход в статус), то переменная user берется из контекста инициировавшего его скрипта.

    Пример: пользователь выполнил изменение атрибута → произошло изменение статуса объекта (действие по событию) → произошло изменение ответственного (действие на вход в статус) → произошло оповещение (действие по событию) .Во всех скриптах этой цепочки переменная user должна содержать сотрудника, выполнившего первоначальное изменение атрибута.

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

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

  • subject — текущий объект, статус которого изменяется;
  • initialValues — значения атрибутов на форме добавления объекта и на форме смены статуса.

    В скрипте условия на вход в статус, для корректной работы скрипта, рекомендуется использовать переменную контекста initialValues вместо переменной subject. Переменная subject не содержит атрибутов вычисленных по умолчанию и в этой переменной они имеют значение null.

    При проверке значения initialValues на null следует использовать конструкции if(!initialValues) или if(initialValues.isEmpty()).

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

    initialValues.getProperty('service'); initialValues.getProperty('client');

    У определенного атрибута можно получить его свойства:

    // UUID
    def uuid = client.UUID;
    //Название атрибута
    def title = client.title;

    Значение атрибута "Ответственный" (responsible):

    initialValues.getProperty('responsible');
    // ответственная команда
    def team = resp.team;
    // ответственный сотрудник
    def employee = resp.employee;
    
  • comment — текст комментария, заполненный на форме смены статуса или форме смены ответственного,

    текст комментария, добавленный с помощью метода utils.edit(subject, '@comment': 'txt'), но не через utils.create('comment', 'source': subject, 'text': 'txt')

  • isCommentPrivate — признак приватности комментария, заполненного на форме смены статуса или форме смены ответственного:

    • true — комментарий, заполненный при смене ответственного или при смене статуса, приватный;
    • false — комментарий не приватный.
  • cardObject — объект, из карточки которого было инициировано действие.

    Если действие инициировано НЕ из карточки объекта, то cardObject = null.

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

  • Скрипты на вход в статус и выход из статуса выполняются в той же транзакции, что и бизнес-операция смены статуса.
  • Проверяются все условия, даже если одно или несколько из них завершились с ошибкой.
  • Причиной ошибки выполнения скрипта могут являться ограничения, связанные с редактированием подчиненных запросов. Редактирование некоторых атрибутов подчиненного запроса запрещено.
    Проверка, является ли запрос подчиненным: if (subject.masterMassProblem != null) { // запрос является подчиненным }

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

1. Скрипт проверяет, что значение атрибута отличается от значения по умолчанию.

//ПАРАМЕТРЫ------------------------------------------------------------
// Код атрибута, значение которого надо проверить
def ATTR_CODE = '' 
//ОСНОВНОЙ БЛОК--------------------------------------------------------
if(utils.equalsDefaultValue(subject, ATTR_CODE))
{
return "Значение атрибута '" + ATTR_CODE +"' совпадает со значением по умолчанию"
}
return null

2. Скрипт запрещает менять статус при добавлении приватного комментария.

Copy
if (isCommentPrivate)
{
    return 'Был добавлен приватный комментарий'
}
return ''