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

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

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

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

При использовании в тексте сообщения комментариев или атрибутов типа "Текст 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']}

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

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)}