Скрипт кастомизации сообщений о состоянии объекта

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

Скрипт кастомизации уточняет параметры отправки или текст сообщения оперативного информирования сотрудников об изменении текущего объекта.

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

При использовании в тексте сообщения комментариев или атрибутов типа "Текст RTF" необходимо применять метод преобразования текста для удаления всех тегов HTML.

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

  • Форма добавления действия по событию (для действия "Отслеживание изменений"), см. Отслеживание изменений.
  • Форма редактирования действия по событию (для действия "Отслеживание изменений").

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

Скрипт кастомизации выполняется после проверки условий, перед выполнением отправки webSocket сообщения.

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

Нет возвращаемого значения.

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

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

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

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

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

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

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

    Пример цепочки: пользователь изменяет статус объекта → инициируется событие "Смена статуса" → выполняется редактирование объекта (скрипт действия при входе в статус редактирует переменную subject через utils.edit) → инициируется событие "Изменение объекта" → отправляется оповещение (скрипт действия по событию "Изменение объекта"). Если в данной цепочке в переменную utils.edit не передать значение user, то в скрипте действия по событию user=null.

    Пример: Передача значения переменной user в следующий скрипт цепочки действий редактировании объекта.

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

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

  • subject — текущий объект, над которым производится действие.
  • oldSubject — объект до выполнения события. При использовании переменной значение атрибутов типа "Обратная ссылка" всегда будет равно null.
  • currentSubject — объект, над которым производится действие. В переменной currentSubject хранятся значения атрибутов объекта на момент обработки действия по событию. Переменная currentSubject недоступна для пользовательских действий по событию.
  • wsMessage — текущее веб-сокет сообщение, для которого выполняется настройка.

    Может использоваться внутри скрипта и внутри текста сообщения.

    • wsMessage.toEmployee — список сотрудников-получателей контекстных сообщений.

      wsMessage.toEmployee всегда будет пустым списком в момент начала выполнения скрипта. wsMessage.toEmployee необходимо заполнять в самом скрипте.

    • wsMessage.toRemoveEmployee — список сотрудников-для исключения из получателей сообщения.

      Исключение сотрудников выполняется в момент отправки сообщения после:

      • формирования списка получателей системной логикой (поле "Кому", флажок "Исключить автора действия из списка получателей");
      • добавления сотрудников из поля wsMessage.toEmployee.

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

      wsMessage.toEmployee << employee // добавляет сотрудника в получатели

      wsMessage.toRemoveEmployee << employee2 // удаляет сотрудника из получателей сообщения (перед его отправкой)

  • form — для события "Открытие формы редактирования" переменная содержит список атрибутов формы, доступных для редактирования пользователю.
  • changeAttributes — для события изменения объекта переменная changedAttributes содержит список всех изменившихся атрибутов.
  • lang — локаль текущего сообщения, для которого выполняется настройка.

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

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

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

1. Добавление одного сотрудника в список получателей:

wsMessage.toEmployee << empl

2. Удаление сотрудника из получателей уведомления:

wsMessage.toRemoveEmployee << empl

3. Скрипт для определения переменных, используемых в тексте сообщения:

В скрипте задается значение для каждой переменной, которую необходимо использовать в тексте сообщения

wsMessage.scriptParams['param'] = 123 //значение переменной может быть любым;

В тексте сообщения для получения значения переменной, вычисленной в скрипте, используется конструкция-шаблоном

${wsMessage.scriptParams['param']}

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

Copy
def mtcls = api.metainfo.getMetaClass(subject)
// получить названия для всех атрибутов из контекстной переменной changedAttributes
def changedAttrTitles = changedAttributes.collect{mtcls.getAttribute(it).title}
// в параметр 'attrs' сохранить список названий изменившихся атрибутов
wsMessage.scriptParams['attrs'] = changedAttrTitles.join(', ')

Текст сообщения:

${user? user.title : "Суперпользователь"} отредактировал(а) объект. Изменены: ${wsMessage.scriptParams['attrs']}

4. Преобразование значения последнего комментария в обычный текст для отображения в тексте сообщения. В поле "Текст уведомления" используется метод преобразования текста.

Текст сообщения:

Добавлен комментарий: ${api.string.htmlToText(utils.lastComment(subject).text)}