Скрипт кастомизации уведомления

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

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

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

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

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

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

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

Некоторые значения можно вложить в ассоциативный массив для последующего использования в теле уведомления. Пример: push.scriptParams['param'] = 123.

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

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

  • 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 недоступна для пользовательских действий по событию.
  • comment — текст комментария, заполненный на форме смены статуса или форме смены ответственного.
  • isCommentPrivate — признак приватности комментария, заполненного на форме смены статуса или форме смены ответственного:

    • true — комментарий, заполненный при смене ответственного или при смене статуса, приватный;
    • false — комментарий не приватный.
  • push — текущее уведомление, для которого выполняется настройка.
    • scriptParams['param'] — задает значения для каждой переменной, которая будет использоваться в тексте уведомления.
    • push.toEmployee — список сотрудников-получателей уведомления. Используется для добавления сотрудника в список получателей уведомления.

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

    • push.toRemoveEmployee — используется для исключения сотрудника из списка получателей уведомления.
    • push.browserNoticeLink — ссылка на карточку объекта в уведомлении. Используется для размещения ссылки, по которой можно перейти на карточку объекта при нажатии на уведомление.
  • params — значения параметров действия по событию, заполняемых в интерфейсе на форме выполнения пользовательского действия по событию, см. Настройка параметров пользовательского действия.

    До версии 4.7 переменная "params" могла использоваться в скриптах для любых целей. С версии 4.7 и старше скрипты с переменной "params" работают по указанной системной логике (обращение к параметрами на форме), другая логика переменной игнорируется.

    Чтобы использовать другую логику переменной params, необходимо заменить в существующих скриптах название своей переменной "params" на какое-то другое.

  • mention — параметры упоминания объекта (атрибута, в котором использовались упоминания). Переменная доступна для действия по событию "Упоминание в рамках выбранных объектов".
    • mention.changedAttribute — измененный атрибут типа "Текст в формате RTF". Если упоминание добавлено в рамках комментария, то содержит 'text';
    • mention.newMentions — список идентификаторов новых упоминаний;
    • mention.untouchedMentions — список идентификаторов неизмененных упоминаний;
    • mention.removedMentions — список идентификаторов удаленных упоминаний.
  • mentions — список атрибутов, в которых использовались упоминания, в формате:

    mentions == [код_атрибута_1: mention, код_атрибута_2:mention...]

    Переменная доступна для действий по событию "Добавление комментария", "Редактирование комментария", "Добавление объекта", "Редактирование объекта", "Смена статуса", "Смена ответственного".

  • lang — локаль текущего уведомления, для которого выполняется настройка.

  • sourceObject, в данном скрипте sourceObject = null.

    Для событий "Добавление комментария" и "Редактирование комментария" в качестве sourceObject передается объект источник комментария.

    Для события "Добавление объекта" в качестве sourceObject передается ссылка на созданный объект.

  • changedAttributes — список кодов атрибутов, значения которых изменились при редактировании объекта.

    Вычислимые атрибуты не попадают в контекстную переменную changedAttributes, так как значения вычислимых атрибутов (в том числе атрибута типа "Атрибут связанного объекта") вычисляются при отображении, не хранятся в базе данных и не редактируются в интерфейсе оператора.

    При редактировании атрибута типа "Обратная ссылка" на форме редактирования объекта, атрибут попадает в список измененных атрибутов. При изменении атрибута типа "Обратная ссылка" также изменяется объект, на который ведет прямая ссылка.

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

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

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

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

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

push.toEmployee << empl

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

push.toRemoveEmployee << empl

3. Размещение ссылки на карточку объекта в уведомлении.

push.browserNoticeLink << api.web.open(subject, 'login')