Механизм рабочих процессов поддерживает набор действий различных типов для настройки процесса, подходящего вашим потребностям.

Подробнее о механизме читайте в статье Редактор рабочих процессов.

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

Доступные действия:

Чтобы определить переменные в действиях при помощи агентского интерфейса, выполните следующие действия:

  1. Перейдите в навигаторе на Рабочие процессы → Действия.
  2. Откройте запись действия, которую вам нужно изменить, или нажмите Создать, чтобы создать новое действие.
  3. Заполните поля.
  4. Нажмите Сохранить или Сохранить и выйти, чтобы применить изменения.

Подробнее читайте в статье Создание рабочего процесса.

Статусы действий

Статус действия сообщает механизму рабочих процессов, что нужно делать с действием. Перечисленные ниже статусы стандартны для всех типов действий, реализованных в SimpleOne.

В навигаторе перейдите в Рабочие процессы → Выполняемые действия, чтобы увидеть статусы действий в опубликованных рабочих процессах.

Статусы действий

СтатусОписание
В обработкеМеханизм рабочего процесса начал выполнение действия.
В ожиданииМеханизм рабочего процесса игнорирует действие до наступления определенного события. Затем он продолжает его обработку.
ЗавершенаДействие завершило работу. Вы можете увидеть результат действия.
ОтмененаДействие (или содержащий его рабочий процесс) отменено.
ОшибкаПроизошла ошибка JavaScript. Просмотрите Журнал работы скриптов (sys_log_script) для получения подробной информации.

Базовые действия

Действие Begin

Данное действие является изначальным и появляется в создаваемых рабочих процессах. Оно является логическим началом любого рабочего процесса.

Действие End

Данное действие, так же как и действие Begin, является изначальным и появляется в создаваемых рабочих процессах. Оно является логическим завершением любого рабочего процесса.

Утилиты

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

Действие Run Script


Действие Run Script выполняет определенный скрипт.

Поля действия

ПолеОбязательноОписание
НаименованиеНетВведите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности.
Запуск скриптаНетУкажите выполняемый скрипт.
ОписаниеНетВведите краткое описание действия.


Данный тип действий приводит к обновлению текущей целевой записи после выполнения. Логика действия определяется значением Незамедлительно в поле Когда запустить таблицы Типы действий (wf_activity_type).

Кроме того, вариант Незамедлительно и связанное поведение действия позволяют избежать использования current.update() внутри скриптов действий типа Run Script для обновления записей.

Действие Join


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

В примере ниже, действие Join ожидает результатов обработки действий If, Subflow и Wait. Если все три перехода из этих действий ведут к действию Join, выбирается выход Complete (с переходом к действию с названием Insert). Если одно из действий обходит действие Join (в данном случае это выход No из действия If), выбирается выход Incomplete.

Не соединяйте два выхода из одного действия с действием Join. В противном случае действие Join срабатывает некорректно и не выбирает выход Complete.

В примере ниже, к действию Join ведут оба выхода из действия If. Несмотря на то, что условие действия If выполнено, действие Join выбирает выход Incomplete, так как выход No из действия If неактивен.  

 

Как использовать действие Join

  1. В левом боковом меню откройте вкладку Utilities и перетащите действие Join в рабочую область.
  2. Соедините необходимые выходы действий с действием Join.
  3. Создайте переходы от выходов действия Join (Complete и Incomplete) к следующим действиям.

Поля действия

ПолеОбязательноОписание
НаименованиеНетВведите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности.
ОписаниеНетВведите краткое описание действия.

Выходы действия

РезультатОписание
Complete

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

Incomplete

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

В примере ниже действие If обошло действие Join, поэтому был выбран выход Incomplete.

Действие Set Values


Действие Set Values задает определенные значения текущей записи. Эти значения определяют поведение действия при остановке или завершении рабочего процесса.

Данный тип действий приводит к обновлению текущей целевой записи после выполнения. Логика действия определяется значением Незамедлительно в поле Когда запустить таблицы Типы действий (wf_activity_type).

Поля действия

ПолеОбязательноОписание
НаименованиеНетВведите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности.
ОписаниеНетВведите краткое описание действия.
ТаблицаДа

Таблица, затрагиваемая данным действием. Поле заполняется автоматически.

Присвоить значенияНет

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

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

Действие Record Generator


Действие Record Generator создает записи в любой таблице, наследующей от таблицы Задачи.

Поля действия

ПолеОбязательноОписание
НаименованиеНетВведите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности.
ОписаниеНетВведите краткое описание действия.
Тип задачиДа

Выберите тип задачи. Вы можете выбирать из соответствующей таблицы задач.

Значения из

Нет

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

  • Значений – значения, которые вы указывате в соответствующем списке выбора.
  • Шаблона – существующий шаблон, связанный с выбранной таблицей задач.
Присвоить значенияНет

Выберите поле и задайте нужное значение.

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

Поле отображается, когда в поле Значения из выбрано Значений.

Шаблон задачиДа

Укажите существующий шаблон, относящийся к выбранной таблице задач.

Поле отображается, когда в поле Значения из выбрано Шаблона.

Только при выполнении условияНет

Установите флажок чтобы показать поле Условия завершения. Если флажок установлен, условия обязательны для завершения задачи.

Условия завершенияДа

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

Поле отображается, когда установлен флажок Только при выполнении условия.

ДополнительноНетУстановите флажок, чтобы указать скрипт, который должен быть выполнен.
СкриптНет

Укажите в этом скрипте значения для задачи. Используйте переменную 'new_task' при установке дополнительных значений.

Скрипт выполняется после того, как заданы значения задачи (определенные в полях Шаблон задачи или Присвоить значения).

Например:

Script
new_task.parent_id = current.sys_id;
new_task.caller = current.getValue('caller');

Поле отображается когда установлен флажок Дополнительно.

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

Действие Create Event


Действие Create Event ставит событие из таблицы Реестр событий (sys_event_register) в очередь. Позднее это событие может выполнить определенные скрипты или отправить уведомления. При запуске действия Create Event, в таблице Событие (sys_event) создается новая запись события.

Подробнее читайте в статье Системные события.

Поля действия

ПолеОбязательноОписание
НаименованиеНетВведите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности.
Реестр событийДа

Выберите экземпляр события, на основе которого действие будет создавать события. Все экземпляры событий (или реестры событий) перечислены в таблице Реестр событий (sys_event_register).

Параметр 1 ... Параметр 5Нет

Укажите параметр события. Если этот параметр является значением типа строка, его необходимо заключить в кавычки.

Заданные параметры могут использоваться в записях, относящихся к системному событию:

  • записи в таблице Правила уведомлений (sys_notification_rule).
  • записи, относящиеся к таблице Правила уведомлений (sys_notification_rule): Скрипт уведомления (sys_notification_script) и Шаблон уведомления (sys_notification_template).
  • записи таблицы Скрипты действий для событий (sys_event_script_action).
ОписаниеНетВведите краткое описание действия.

Условные операторы

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

Действие Wait Condition


Действие Wait Condition приостанавливает рабочий процесс до того момента, когда будут соблюдены определенные условия. Действие проверяет выполнение условий после каждого обновления записи.

Поля действия

ПолеОбязательноОписание
НаименованиеНетВведите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности.
ОписаниеНетВведите краткое описание действия.
ТаблицаНетТаблица, затрагиваемая данным действием. Поле заполняется автоматически.
УсловиеДаОпределите условия, обязательные для перехода из выхода Yes.
ДополнительноНетУстановите флажок, чтобы указать скрипт, который должен быть выполнен.
СкриптНет

Если в поле указан скрипт, то выполнение рабочего процесса будет приостановлено, пока скрипт не возвратит значение true. Результат исполнения скрипта добавляется к результатам указанного Условия оператором И.

Example
const isUserManager =
  ss.hasRole('process_manager'); // true or false
return isUserManager;

Поле отображается, когда установлен флажок Дополнительно.

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

Действие If


Данное действие проверяет условие, чтобы определить, из какого выхода будет совершен переход, Yes или No.

Поля действия

ПолеОбязательноОписание
НаименованиеНетВведите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности.
ОписаниеНетВведите краткое описание действия.
ТаблицаДаТаблица, затрагиваемая данным действием. Поле заполняется автоматически.
УсловиеДа

Условие, которое должно выполниться для совершения перехода из выхода Yes

Пустое условие всегда возвращает значение true.

ДополнительноНетУстановите флажок, чтобы указать скрипт, который должен быть выполнен.
СкриптНет

Если скрипт выполняется, результат его исполнения добавляется к результатам указанного Условия оператором И. Для перехода из выхода Yes скрипт должен возвратить значение true.

Example
const uc = new SimpleUserCriteria();
const isUserLocal =
  uc.userAcceptanceByCriteria(ss.getUserID(), '165470191717512124'); // true or false
return isUserLocal; 

Поле отображается, когда отмечен флажок Дополнительно.

Если указаны и Условие, и Скрипт, то они оба должны выполниться успешно, чтобы в этом действии был выбран переход Yes, иначе выбирается переход No.

Действие Switch


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

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

Поля действия

ПолеОбязательноОписание
ТаблицаНетТаблица, затрагиваемая данным действием. Поле заполняется автоматически.
НаименованиеНетВведите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности.

Тип

Да

Выберите источних опций выходов для этого действия. Рабочий процесс выполняет проверку значений по этим условиям. Доступные варианты:

  • Field – выходы равны вариантам поля, указанного в поле Колонка.
  • Custom – создайте набор выходов с нужными вам условиями.
КолонкаДа

Укажите колонку, содержащую варианты для условия. Эти условия станут выходами действия.

В следующем примере, действие Switch получает варианты из поля Тип.

Вы можете изменить условия выходов или добавить новые условия, отредактировав их.

Поле отображается, когда в поле Тип выбран вариант Field.

Чтобы создать дополнительные выходы, выполните следующие действия:

  1. Нажмите правой кнопкой мыши на действие Switch и выберите Добавить выход.
  2. Двойным щелчком нажмите на выход, чтобы открыть поля формы выхода.
  3. Заполните поля.
  4. Нажмите Сохранить.
  5. При необходимости повторите процесс, чтобы добавить еще поля.

Поля выхода из действия

ПолеОбязательноОписание
НаименованиеН

Наименование варианта. Если в поле Тип выбран вариант Field, наименование берется из Колонки. Если в поле Тип выбран вариант Custom, введите наименование по своему усмотрению.

ТаблицаНТаблица, затрагиваемая данным действием. Поле заполняется автоматически.
ДействиеДДействие, к которому относится этот выход. Поле заполняется автоматически.
ОписаниеНВведите краткое описание выхода из действия.
УсловиеДОпределите условия, обязательные для выполнения указанного перехода.
ДополнительноН

Установите флажок, чтобы указать скрипт, который должен быть выполнен.

СкриптД

Если поле заполнено, то выполнение рабочего процесса будет приостановлено на данном действии, пока скрипт не возвратит значение true.

Поле отображается, когда установлен флажок Дополнительно.

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

Согласования

Действие User Approval настраивает обработку согласований: оно создает согласования, устанавливает правила и условия согласований.

Действие User-approval


Действие оценивает результат в зависимости от следующих факторов:

  • решение, принятое согласующими.
  • условия, указанные в поле Согласовано при условии или в полях Условия согласования и Условия отклонения.
  • (опционально) условия, указанные в скриптах.

Действие может быть завершено с одним из двух результатов: Согласовано или Отклонено.

Поля действия

ПолеОбязательноОписание
НаименованиеНетВведите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности.
ОписаниеНетВведите краткое описание действия. Если указано, оно отображается на блоке действия на холсте.
ТаблицаДаТаблица, затрагиваемая данным действием. Поле заполняется автоматически.
Условия запускаНет

Укажите условия, которые должны быть выполнены для создания согласований. Если условия не выполняются, рабочий процесс пропускает действие. В этом случае выбирается выход Approved.

Тип согласованияНет

Укажите тип согласования для определения условий выходов из действия. Доступные варианты:

  • Автоматически – выберите условия действия, заполнив поле Согласовано при условии из заранее определенного набора условий.
  • Вручную – настройте нужные вам условия завершения действия в полях Условия согласования и Условия отклонения.
Необязательные участникиНет

Установите флажок чтобы добавить участников, голоса которых необязательны. Когда флажок поставлен, появляется вкладка Необязательные участники.

Вкладка Обязательные участники
СотрудникиНет

Выберите ответственных пользователей. Они получат запросы на согласование и примут решение.

ГруппыНет

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

РолиНет

Выберите роли, владельцы которых получат запросы на согласование и примут решение.

ДополнительноНетУстановите флажок, чтобы указать скрипт для исполнения.

Скрипт обязательных участников

Нет

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

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

Поле отображается, когда установлен флажок Дополнительно.

Приведенный ниже пример кода реализует следующую логику:

  1. Проверяет группы текущего абонента (caller).
  2. Проверяет значение атрибута Ответственный этих групп.
  3. Если было найдено ответственное лицо группы, его идентификатор пользователя добавляется в массив answer.
Пример скрипта
const caller = current.getValue('caller');
const callerGroup = new SimpleRecord('sys_user_group');
callerGroup.addQuery('user_id', сaller);
callerGroup.selectAttributes('group_id');
callerGroup.query();
while (callerGroup.next()) {
  if (callerGroups.group_id.getValue('responsible')) {
    answer = callerGroups.group_id.getValue('responsible');
  }
}

Вы можете передавать значения в переменную answer в виде строки или в виде массива, например:

answer = ['100000000000000001', '160017550418345219', '159974538715046822']

answer='100000000000000001,160017550418345219,159974538715046822'

Согласовано при условииНет

В этом поле вы можете определить логику согласования. Доступные варианты выбора:

  • Одобрен хотя бы одним – выход Approved будет выбран, если как минимум один ответственный пользователь согласовывает обращение.
  • Одобрено всеми – выход Approved будет выбран, только если все ответственные пользователи согласовали заявку; в противном случае, рабочий процесс выберет выход Rejected.
  • При первом ответе от кого-либо – выбранный выход зависит от первого полученного решения: результат определят первый пользователь, принявший решение.
  • При большинстве ответов – результат действия зависит от числа согласований и отклонений: если согласований больше, выбирается выход Approved, и наоборот.
  • Ввести скрипт условия – результат действия зависит от скрипта, который рассчитывает результат каждый раз, когда он получает согласование или отклонение.

Поле отображается, когда в поле Тип согласования выбран вариант Автоматически.

Скрипт cогласованияНет

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

Пример скрипта
(() => {
  let isFirstGroupApprove = false;
  let isSecondGroupApprove = false;

  const docID = ss.getDocIdByIds(current.sys_db_table_id, current.sys_id);

  const rejectedApp = new SimpleRecord('sys_approval');
  rejectedApp.addQuery('item', docID);
  rejectedApp.addQuery('state', 'rejected');
  rejectedApp.setLimit(1);
  rejectedApp.selectAttributes(['sys_id']);
  rejectedApp.query();
  if (rejectedApp.next()) {  // Одна из заявок отклонена
    answer = 'rejected';
  }

  const approvedApp = new SimpleRecord('sys_approval');
  approvedApp.addQuery('item', docID);
  approvedApp.addQuery('state', 'approved');
  approvedApp.selectAttributes(['approver_id']);
  approvedApp.query();

  const uc = new SimpleUserCriteria();
  while (approvedApp.next()) {
    let approver = approvedApp.getValue('approver_id');

    if (!isFirstGroupApprove) {
      isFirstGroupApprove = uc.userAcceptanceByCriteria(approver, '167416106197358457'); // Участник первой группы
    }
    if (!isSecondGroupApprove) {
      isSecondGroupApprove = uc.userAcceptanceByCriteria(approver, '167416108994075219'); // Участник второй группы
    }
  }

  if (isFirstGroupApprove && isSecondGroupApprove) {
    return 'approved';
  } else {
    return 'waiting';
  }
}
)()

Поле отображается, когда в поле Согласовано при условии выбран вариант Ввести скрипт условия.

Условия согласованияДа

Укажите условия, которые должны выполниться для выбора выхода Approved. При наличии нескольких условий, они проверяются последовательно.

Поле отображается, когда в поле Тип согласования выбран вариант Вручную.

Условия отклоненияДа

Укажите условия, которые должны выполниться для выбора выхода Rejected. При наличии нескольких условий, они проверяются последовательно.

Поле отображается, когда в поле Тип согласования выбран вариант Вручную.

Вкладка Необязательные участники

Вкладка появляется, когда поставлен флажок Необязательные участники.
СотрудникиНет

Выберите ответственных пользователей. из списка Сотрудник. Они получат запросы на согласование и примут решение. Однако их согласование необязательно.

Группы

Нет

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

Роли

Нет

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

Расширенные настройки

НетУстановите флажок, чтобы указать скрипт для исполнения.
Скрипт необязательных участниковНет

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

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

Пример и пояснения приведены выше.

Поле отображается, когда установлен флажок Расширенные настройки.

Учитывать необязательных участников

Нет

Установите флажок, чтобы предоставить необязательным участникам возможность голосовать по заявкам на согласование.

Подпроцессы

Действие Subflow выполняет другой рабочий процесс. Это действие необходимо для создания сложных рабочих процессов, которые включают другие процессы.

Действие Subflow


Действие Subflow выполняет существующий рабочий процесс в рамках текущего рабочего процесса.

Поля действия

ПолеОбязательноОписание
НаименованиеНВведите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности.
Рабочий процессД

Укажите опубликованный рабочий процесс, который должен быть выполнен действием.

ОписаниеНВведите краткое описание действия.

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

Например, в основном рабочем процессе определен блок Subflow со ссылкой на рабочий процесс "Request 2nd phase". После запуска основного рабочего процесса запускается подпроцесс "Request 2nd phase". Контекст выполнения подпроцесса приостанавливается. Если в рамках основного процесса произойдет попытка еще одного запуска подпроцесса "Request 2nd phase", подпроцесс будет создан в отмененном состоянии.

Таймеры

Используйте действие Timer, чтобы приостановить рабочий процесс на определенное время.

Действие Timer


Действие Timer определяет период времени, в течение которого текущий процесс не выполняется. Оно следует приведенной ниже логике:

  • Если контекст рабочего процесса не завершен и блок, следующий за блоком Timer, находится в статусе Завершена – обработка блока запускается повторно.
  • Если контекст рабочего процесса не завершен, но блок, следующий за блоком Timer, находится в статусе В ожидании – повторная обработка блока не запускается.
  • Если контекст рабочего процесса на момент выполнения блока Timer завершен – обработка следующего за ним блока не запускается.

Поля действия

ПолеОбязательноОписание
НаименованиеНетВведите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности.
ОписаниеНетВведите краткое описание действия.
Задать длительностьДа

Способ рассчета длительности таймера. Доступные варианты:

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

Укажите время ожидания до перехода к следующему действию в днях, часах, минутах и секундах.

Поле отображается, когда в поле Задать длительность выбран вариант Указать.

СкриптДа

Укажите скрипт, реализующий логику расчета длительности. Вы можете использовать методы API SimpleOne.

Поле отображается, когда в поле Задать длительность выбран вариант Скрипт.

Вкладка Календарь
Задать часовой поясНет

Укажите источник часового пояса для данного действия. Доступные варианты:

  • (Не учитывать)
  • Выбрать
Часовой поясДа

Выберите часовой пояс из списка.

Поле отображается, когда в поле Задать часовой пояс выбран вариант Выбрать.

Задать календарьНет

Укажите источник календаря для данного действия. Доступные варианты:

  • (Не учитывать)
  • Выбранный календарь
КалендарьДа

Выберите календарь из списка.

Поле отображается, когда в поле Задать часовой пояс выбран вариант Выбрать.



  • No labels