Условия выполнения действия по событию

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

Для каждого действия по событию может быть задано одно или несколько условий выполнения этого действия.

Момент проверки условия зависит от значения параметра "Выполнять проверку синхронно":

  • синхронные условия проверяются сразу после наступления инициирующего события (в той же транзакции);
  • асинхронные условия проверяются непосредственно перед выполнением действия по событию.

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

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

Место настройки в интерфейсе

Карточка действия по событию, блок "Условия выполнения действия"

Выполнение настройки

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

Параметры условия действия по событию:

  • Название — название скрипта, используемое в системе.
  • Выполнять проверку синхронно — определяет момент проверки условия:

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

Результат настройки

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

Если заданы только синхронные условия:

  • Для синхронных действий по событию:

    • Наступление инициирующего события, проверка условий и само действие выполняются в рамках одной транзакции.
    • Синхронные условия проверяются в произвольном порядке, до первого ошибочного.
    • Действие выполняется, если все условия выполнены.
  • Для асинхронных действий по событию:

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

Если заданы только асинхронные условия:

  • Для синхронных действий по событию:

    • Наступление инициирующего события, проверка условий и само действие выполняются в рамках одной транзакции.
    • Асинхронные условия в произвольном порядке, до первого ошибочного.
    • Действие выполняется, если все условия выполнены.
  • Для асинхронных действий по событию:

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

Если заданы синхронные и асинхронные условия, то:

  • Для синхронных действий по событию:

    • Наступление инициирующего события, проверка условий и само действие выполняются в рамках одной транзакции.
    • Сначала проверяются синхронные условия в произвольном порядке, затем — асинхронные условия в произвольном порядке. Условия проверяются до первого ошибочного.
    • Действие выполняется, если все условия выполнены.
  • Для асинхронных действий по событию:

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

Примеры условий отправки оповещения

Комментарий к объекту добавлен в рамках изменения статуса или не в рамках изменения статуса

//Категория: Условия выполнения действий по событию.
//Назначение: проверка условия - комментарий был добавлен при изменении статуса/ не в рамках изменения статуса.

//ПАРАМЕТРЫ----------------------------------------------------------
// логическая переменная, если значение true, то проверяем добавление в рамках смены статуса, 
//если false, то не в рамках смены статуса.
def IN_CHANGE_STATE = true

//ОСНОВНОЙ БЛОК------------------------------------------------------
if(IN_CHANGE_STATE == (comment != null))
{
return ""
}
return "условие не выполнилось"

Добавляемый комментарий не является приватным

//Категория: Условия выполнения действий по событию.
//Назначение: проверка условия - добавляемый комментарий не является приватным.

// Возвращаем список всех комментариев, комментарии расположены в хронологическом порядке
def comments = utils.comments(subject)
// Берется последний добавленный комментарий
def LastComment=comments[-1]
// проверяются условия приватности добавленного комментария
if (!LastComment.private)
{
return ''
}
else
{
return "Условие не выполнилось. Был добавлен приватный комментарий"
}

Запрос зарегистрирован клиентом

//Категория: Условия выполнения действий по событию
//Назначение: запрос зарегистрирован клиентом
        
//ОСНОВНОЙ БЛОК------------------------------------------------------
if (utils.equal(subject.author, subject.clientEmployee))
{
return ""
}
return "Заданное условие не выполнилось."

Объект находится /не находится в указанных статусах

//Категория: Условия выполнения действий по событию
//Назначение: 
//* Если переменнная CONTAINS=true, 
//то проверяется условие - нахождение объекта в одном из перечисленных статусов.
//* Если переменнная CONTAINS=false, 
//то проверяется условие - объект не находится ни в одном из перечисленных статусов.
        
//ПАРАМЕТРЫ----------------------------------------------------------
def STATES = [
'resolved',
'state2']   // Коды статусов
def CONTAINS = true             
// логическая переменная: содержит или не содержит
        
//ОСНОВНОЙ БЛОК------------------------------------------------------
return STATES.contains(subject.state) == CONTAINS ? "" : "Статус не соответствует."

Назначен ответственный за запрос

//Категория: Условия выполнения действий по событию
//Проверка условия: назначен ответственный за запрос.
      
//ОСНОВНОЙ БЛОК------------------------------------------------------
if (subject.responsible != null)
{
return ""
}
return "Заданное условие не выполнилось."

Ответственный за запрос совпадает с указанным в скрипте

//Категория: Условия выполнения действий по событию
//Назначение: ответственный за запрос (команда) = заданной в скрипте
       
//ПАРАМЕТРЫ----------------------------------------------------------
def RESPONSIBLE = 'team$1802' // Уникальный идентификатор команды
        
 //ОСНОВНОЙ БЛОК------------------------------------------------------
if (subject.responsible?.UUID == RESPONSIBLE)
{
return ""
}
return "Заданное условие не выполнилось."

Запрос выполняется в рамках определенного соглашения

//Категория: Условия выполнения действий по событию
//Назначение: запрос выполняется в рамках определенного соглашения

//ПАРАМЕТРЫ----------------------------------------------------------
def AGREEMENT = 'agreement$2001' // Уникальный идентификатор соглашения

//ОСНОВНОЙ БЛОК------------------------------------------------------
if (subject.agreement?.UUID == AGREEMENT)
{
return ""
}
return "Заданное условие не выполнилось."

Изменен атрибут объекта

//Категория: Условия выполнения действий по событию
//Назначение: был изменен конкретный атрибут объекта, например "Влияние" запроса
//ПАРАМЕТРЫ----------------------------------------------------------
def ATTRIBUTE = 'impact' // Код атрибута, который был изменен

//ОСНОВНОЙ БЛОК------------------------------------------------------
if (!utils.equal (subject[ATTRIBUTE], oldSubject[ATTRIBUTE]))
{
return ""
}
return "Заданное условие не выполнилось."

Комплекс условий

1. Запрос зарегистрирован клиентом и находится в заданном статусе

//Категория: Условия выполнения действий по событию
//Назначение: Скрипт - условие действия по событию: 
//запрос зарегистрирован клиентом и Находится в статусе заданном в скрипте.

//ПАРАМЕТРЫ----------------------------------------------------------
def STATE = 'registered' // Код статуса
        
//ОСНОВНОЙ БЛОК------------------------------------------------------
if (subject.state == STATE
&&  utils.equal(subject.author, subject.clientEmployee))
{
return ""
}
return "Заданные условия не выполнились."

2. Запрос находится в любом статусе кроме заданного и не находится в персональной ответственности

//Категория: Условия выполнения действий по событию
//Проверка условий:  Статус запроса отличается от заданного в скрипте значения и запрос не находится в персональной ответственности.

//ПАРАМЕТРЫ----------------------------------------------------------
def STATE  = 'registered'   // Код статуса

//ОСНОВНОЙ БЛОК------------------------------------------------------
if (subject.responsibleEmployee != null || subject.state == STATE)
{
return "Заданные условия не выполнились."
}

или

//ОСНОВНОЙ БЛОК------------------------------------------------------
 if (subject.responsibleEmployee == null
 && subject.state != STATE)
 {
 return ""
 }
 return "Заданные условия не выполнились."