Действия рабочих процессов
Механизм рабочих процессов поддерживает набор действий различных типов для настройки процесса, подходящего вашим потребностям.
Подробнее о механизме читайте в статье Редактор рабочих процессов.
В настоящей статье рассматриваются коробочные действия, поставляемые по умолчанию. Чтобы узнать, как создавать новые действия, читайте статью Создание новых действий рабочих процессов.
Доступные действия:
- Действие Run Script
- Действие Join
- Действие Set Values
- Действие Record Generator
- Действие Create Event
- Действие Wait Condition
- Действие If
- Действие Switch
- Действие User-approval
- Действие Subflow
- Действие Timer
Чтобы определить переменные в действиях при помощи агентского интерфейса, выполните следующие действия:
- Перейдите в навигаторе на Рабочие процессы → Действия.
- Откройте запись действия, которую вам нужно изменить, или нажмите Создать, чтобы создать новое действие.
- Заполните поля.
- Нажмите Сохранить или Сохранить и выйти, чтобы применить изменения. Подробнее читайте в статье Создание рабочего процесса.
Статусы действий
Статус действия сообщает механизму рабочих процессов, что нужно делать с действием. Перечисленные ниже статусы стандартны для всех типов действий, реализованных в 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
- В левом боковом меню откройте вкладку Utilities и перетащите действие Join в рабочую область.
- Соедините необходимые выходы действий с действием Join.
- Создайте переходы от выходов действия Join (Complete и Incomplete) к следующим действиям.
Поля действия
Поле | Обязательно | Описание |
---|---|---|
Наименование | Нет | Введите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности. |
Описание | Нет | Введите краткое описание действия. |
Результат | Описание |
---|---|
Complete | Выход выбирается, если все соединенные действия закончили работу и перешли к данному действию. |
Incomplete | Выход выбирается, если все соединенные действия закончили работу, но как минимум одно из них не перешло к данному действию, то есть был выбран путь в обход действия Join. В примере ниже действие If обошло действие Join, поэтому был выбран выход Incomplete. |
Действие Set Values
Действие Set Values задает определенные значения текущей записи. Эти значения определяют поведение действия при остановке или завершении рабочего процесса.
Данный тип действий приводит к обновлению текущей целевой записи после выполнения. Логика действия определяется значением Незамедлительно в поле Когда запустить таблицы Типы действий (wf_activity_type).
Поля действия
Поле | Обязательно | Описание |
---|---|---|
Наименование | Нет | Введите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности. |
Описание | Нет | Введите краткое описание действия. |
Таблица | Да | Таблица, затрагиваемая данным действием. Поле заполняется автоматически. |
Присвоить значения | Нет | Выберите поле, значение которого вы хотите поменять при остановке или завершении процесса, и задайте новое значение. Нажмите на крайнее левое поле, чтобы открыть выпадающий список д оступных полей. Нажмите на крайнее правое поле, чтобы открыть выпадающий список или введите значение (в зависимости от типа выбранного поля). |
Действие Record Generator
Действие Record Generator создает записи в любой таблице, наследующей от таблицы Задачи.
Поля действия
Поле | Обязательно | Описание |
---|---|---|
Наименование | Нет | Введите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности. |
Описание | Нет | Введите краткое описание действия. |
Тип задачи | Да | Выберите тип задачи. Вы можете выбирать из соответствующей таблицы задач. |
Значения из | Нет | Укажите источник значений для создаваемой задачи. Доступные варианты:
|
Присвоить значения | Нет | Выберите поле и задайте нужное значение. Нажмите на крайнее левое поле, чтобы открыть выпадающий список доступных полей. Нажмите на крайнее правое поле, чтобы открыть выпадающий список или введите значение (в зависимости от типа выбранного поля). Поле отображается, когда в поле Значения из выбрано Значений. |
Шаблон задачи | Да | Укажите существующий шаблон, относящийся к выбранной таблице задач. Поле отображается, когда в поле Значения из выбрано Шаблона. |
Только при выполнении условия | Нет | Установите флажок, чтобы показать поле Условия завершения. Если флажок установлен, условия обязательны для завершения задачи. |
Условия завершения | Да | Укажите условия для создаваемой задачи. Процесс перейдет к следующему действию, когда все условия для задачи будут выполнены. Поле отображается, когда установлен флажок Толь ко при выполнении условия. |
Дополнительно | Нет | Установите флажок, чтобы указать скрипт, который должен быть выполнен. |
Скрипт | Нет | Укажите в этом скрипте значения для задачи. Используйте переменную new_task при установке дополнительных значений. Скрипт выполняется после того, как заданы значения задачи (определенные в полях Шаблон задачи или Присвоить значения). Поле отображается когда установлен флажок Дополнительно. |
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 | Нет | Укажите параметр события. Если этот параметр является значением типа строка, его необходимо заключить в кавычки. Заданные параметры могут использоваться в записях, относящихся к системному событию:
|
Описание | Нет | Введите краткое описание действия. |
Условные операторы
Входящие в эту категорию действия устанавливают условия для продолжения обработки и определения дальнейшего перехода рабочего процесса. Выбранный переход зависит от установленных условий и исхода действия.
Действие Wait Condition
Действие Wait Condition приостанавливает рабочий процесс до того момента, когда будут соблюдены определенные условия. Действие проверяет выполнение условий после каждого обновления записи.
Поля действия
Поле | Обязательно | Описание |
---|---|---|
Наименование | Нет | Введите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности. |
Описание | Нет | Введите краткое описание действия. |
Таблица | Нет | Таблица, затрагиваемая данным действием. Поле заполняется автоматически. |
Условие | Да | Определите условия, обязательные для перехода из выхода Yes. |
Дополнитель но | Нет | Установите флажок, чтобы указать скрипт, который должен быть выполнен. |
Скрипт | Нет | Если в поле указан скрипт, то выполнение рабочего процесса будет приостановлено, пока скрипт не возвратит значение true. Результат исполнения скрипта добавляется к результатам указанного Условия оператором И. Поле отображается, когда установлен флажок Дополнительно. |
const isUserManager =
ss.hasRole('process_manager'); // true or false
return isUserManager;
Если указаны и Условие, и Скрипт, то они оба должны выполниться успешно для перехода к следующему действию. Рабочий процесс будет приостановлен до момента, когда будет соблюдено Условие, и Скрипт возвратит значение true.
Действие If
Данное действие проверяет условие, чтобы определить, из какого выхода будет совершен переход, Yes или No.
Если указаны и Условие, и Скрипт, то они оба должны выполниться успешно, чтобы в этом действии был выбран переход Yes, иначе выбирается переход No.
Поля действия
Поле | Обязательно | Описание |
---|---|---|
Наименование | Нет | Введите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности. |
Описание | Нет | Введите краткое описание действия. |
Таблица | Да | Таблица, затрагиваемая данным действием. Поле заполняется автоматически. |
Условие | Да | Условие, которое должно выполниться для совершения перехода из выхода Yes. Пустое условие всегда возвращает значение true. |
Дополнительно | Нет | Установите флажок, чтобы указать скрипт, который должен быть выполнен. |
Скрипт | Нет | Если скрипт выполняется, результат его исполнения добавляется к результатам указанного Условия оператором И. Для перехода из выхода Yes скрипт должен возвратить значение true. Поле отображается, когда отмечен флажок Дополнительно. |
const uc = new SimpleUserCriteria();
const isUserLocal =
uc.userAcceptanceByCriteria(ss.getUserID(), '165470191717512124'); // true or false
return isUserLocal;
Если указаны и Условие, и Скрипт, то они оба должны выполниться успешно, чтобы в этом действии был выбран переход Yes, иначе выбирается переход No.
Действие Switch
Действие Switch управляет переходами, сравнивая значения полей с определенными значениями (одним или несколькими). Данное действие работает как оператор переключения.
Действие производит сравнение согласно условиям, указанным в поле Колонка или выходах, определенных вручную, и выбирает следующий переход на основании результата.
Поля действия
Поле | Обязательно | Описание |
---|---|---|
Таблица | Нет | Таблица, затрагиваемая данным действием. Поле заполняется автоматически. |
Наименование | Нет | Введите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности. |
Тип | Да | Выберите источних опций выходов для этого действия. Рабочий процесс выполняет проверку значений по этим условиям. Доступные варианты:
|
Колонка | Да | Укажите колонку, содержащую варианты для условия. Эти условия станут выходами действия. Вы можете изменить условия выходов или добавить новые условия, отредактировав их. Поле отображается, когда в поле Тип выбран вариант Field. |
В следующем примере, действие Switch получает варианты из поля Тип.
Чтобы создать дополнительные выходы, выполните следующие действия:
- Нажмите правой кнопкой мыши на действие Switch и выберите Добавить выход.
- Двойным щелчком нажмите на выход, чтобы открыть поля формы выхода.
- Заполните поля.
- Нажмите Сохранить.
- При необходимости повторите процесс, чтобы добавить еще поля.
Поля выхода из действия
Поле | Обязательно | Описание |
---|---|---|
Наименование | Нет | Наименование варианта. Если в поле Тип выбран вариант Field, наименование берется из Колонки. Если в поле Тип выбран вариант Custom, введите наименование по своему усмотрению. |
Таблица | Нет | Таблица, затрагиваемая данным действием. Поле заполняется автоматически. |
Действие | Да | Действие, к которому относится этот выход. Поле заполняется автоматически. |
Описание | Нет | Введите краткое описание выхода из действия. |
Условие | Да | Определите условия, обязательные для выполнения указанного перехода. |
Дополнительно | Нет | Установите флажок, чтобы указать скрипт, который должен быть выполнен. |
Скрипт | Да | Если поле заполнено, то выполнение рабочего процесса будет приостановлено на данном действии, пока скрипт не возвратит значение true. Поле отображается, когда установлен флажок Дополнительно. |
- Если указаны и Условие, и Скрипт, то они оба должны выполниться успешно для перехода к следующему действию. Рабочий процесс останется приостановленным до момента, когда будет соблюдено Условие, и Скрипт возвратит значение true.
- В случае действия Switch, для каждого выхода можно настроить отдельный скрипт. Поэтому флажок Дополнительно появляется, только если у действия есть несколько выходов. Флажок появляется только на формах выходов.
Согласования
Действие User-approval настраивает обработку согласований: оно создает согласования, устанавливает правила и условия согласований.
Действие User-approval
Действие оценивает результат в зависимости от следующих факторов:
- решение, принятое согласующими.
- условия, указанные в поле Согласовано при условии или в полях Условия согласования и Условия отклонения.
- (опционально) условия, указанные в скриптах.
Действие может быть завершено с одним из двух результатов: Согласовано или Отклонено.
Поля действия
- Общее
- Обязательные участники
- Необязательные участники
Поле | Обязательно | Описание |
---|---|---|
Наименование | Нет | Введите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности. |
Описание | Нет | Введите краткое описание действия. Если указано, оно отображается на блоке действия на холсте. |
Таблица | Да | Таблица, затрагиваемая данным действием. Поле заполняется автоматически. |
Условия запуска | Нет | Укажите условия, которые должны быть выполнены для создания согласований. Если условия не выполняются, рабочий процесс пропускает действие. В этом случае выбирается выход Approved. |
Тип согласования | Нет | Укажите тип согласования для определения условий выходов из действия. Доступные варианты:
|
Необязательные участники | Нет | Установите флажок, чтобы добавить участников, голоса которых необязательны. Когда флажок поставлен, появляется вкладка Необязательные участники. |
Поле | Обязательно | Описание |
---|---|---|
Сотрудники | Нет | Выберите ответственных пользователей. Они получат запросы на согласование и примут решение. |
Группы | Нет | Выберите ответственную группу. Пользователи, входящие в эту группу, получат запросы на согласование и примут решение. |
Роли | Нет | Выберите роли, владельцы которых получат запросы на согласование и примут решение. |
Дополнительно | Нет | Установите флажок, чтобы указать скрипт для исполнения. |
Скрипт обязательных участников | Нет | Указанный в данном поле скрипт будет вызван, чтобы определить необходимость создания дополнительных запросов на согласование. Скрипт предназначен для присвоения переменной answer значения разделенного запятой списка идентификаторов пользователей для добавления в число согласующих. Поле отображается, когда установлен флажок Дополнительно. |
Согласовано при условии | Нет | В этом поле вы можете определить логику согласования. Доступные варианты выбора:
|
Скрипт cогласования | Нет | Введите скрипт, определяющий условие согласования. Скрипт в примере ниже вызывается для проверки того, что хотя бы один участник каждой из групп, участвующих в согласовании, принял положительное решение. В таком случае результат согласования считается положительным (Согласовано). Поле отображается, когда в поле Согласовано при условии выбран вариант Ввести скрипт условия. |
Условия согласования | Да | Укажите условия, котор ые должны выполниться для выбора выхода Approved. При наличии нескольких условий, они проверяются последовательно. Поле отображается, когда в поле Тип согласования выбран вариант Вручную. |
Условия отклонения | Да | Укажите условия, которые должны выполниться для выбора выхода Rejected. При наличии нескольких условий, они проверяются последовательно. Поле отображается, когда в поле Тип согласования выбран вариант Вручную. |
Скрипт обязательных участников
Приведенный ниже пример кода реализует следующую логику:
- Проверяет группы текущего заявителя (caller).
- Проверяет значение атрибута Ответственный этих групп.
- Если было найдено ответственное лицо группы, его идентификатор пользователя добавляется в массив 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'
Скрипт 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';
}
}
)()
Вкладка появляется, когда поставлен флажок Необязательные участники.
Поле | Обязательно | Описание |
---|---|---|
Сотрудники | Нет | Выберите ответственных пользователей из списка Сотрудник. Они получат запросы на согласование и примут решение. Однако их согласование необязательно. |
Группы | Нет | Выберите ответственные группы. Пользователи, входящие в эти группы, получат запросы на согласование и примут решение. Однако их согласование необязательно. |
Роли | Нет | Выберите роли, владельцы которых получат запросы на согласование и примут решение. Однако их согласование необяз ательно. |
Расширенные настройки | Нет | Установите флажок, чтобы указать скрипт для исполнения. |
Скрипт необязательных участников | Нет | Укажите скрипт, определяющий необходимость дополнительных согласований. Скрипт предназначен для присвоения переменной answer значения разделенного запятой списка идентификаторов пользователей для добавления в число согласующих. Пример и пояснения приведены выше. Поле отображается, когда установлен флажок Расширенные настройки. |
Учитывать необязательных участников | Нет | Установите флажок, чтобы предоставить необязательным участникам возможность голосовать по заявкам на согласование. |
Подпроцессы
Действие Subflow выполняет другой рабочий процесс. Это действие необходимо для создания сложных рабочих процессов, которые включают другие процессы.
Действие Subflow
Действие Subflow выполняет существующий рабочий процесс в рамках текущего рабочего процесса.
Поля действия
Поле | Обязательно | Описание |
---|---|---|
Наименование | Нет | Введите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности. |
Рабочий процесс | Да | Укажите опубликованный рабочий процесс, который должен быть выполнен действием. |
Описание | Нет | Введите краткое описание действия. |
При запуске блока рабочего процесса Subflow, для текущей записи создается контекст рабочего процесса. До тех пор, пока контекст рабочего процесса не будет завершен, запустить еще один блок Subflow с тем же рабочим процессом будет невозможно, потому что в один момент времени для текущей записи может существовать только один контекст рабочего процесса.
Например, в основном рабочем процессе определен блок Subflow со ссылкой на рабочий процесс "Request 2nd phase". После запуска основного рабочего процесса запускается подпроцесс "Request 2nd phase". Контекст выполнения подпроцесса приостанавливается. Если в рамках основного процесса произойдет попытка еще одного запуска подпроцесса "Request 2nd phase", подпроцесс будет создан в отмененном состоянии.
Таймеры
Используйте действие Timer, чтобы приостановить рабочий процесс на определенное время.
Timer activity
Действие Timer определяет период времени, в течение которого текущий процесс не выполняется. Оно следует приведенной ниже логике:
- Если контекст рабочего процесса не завершен и блок, следующий за блоком Timer, находится в статусе Завершен – обработка блока запускается повторно.
- Если контекст рабочего процесса не завершен, но блок, следующий за блоком Timer, находится в статусе ((В ожидании)) – повторная обработка блока не запускается.
- Если контекст рабочего процесса на момент выполнения блока Timer завершен – обработка следующего за ним блока не запускается.
Поля действия
- Общее
- Календарь
Поле | Обязательно | Описание |
---|---|---|
Наименование | Нет | Введите наименование действия. Хорошей практикой является давать действиям информативные названия для ясности. |
Описание | Нет | Введите краткое описание действия. |
Задать длительность | Да | Способ расчета длительности таймера. Доступные варианты:
|
Длительность | Да | Укажите время ожидания до перехода к следующему действию в днях, часах, минутах и секундах. Поле отображается, когда в поле Задать длительность выбран вариант Указать. |
Скрипт | Да | Укажите скрипт, реализующий логику расчета длительности. Вы можете использовать методы API SimpleOne. Поле отображается, когда в поле Задать длительность выбран вариант Скрипт. |
Поле | Обязательно | Описание |
---|---|---|
Задать часовой пояс | Нет | Укажите источник часового пояса для данного действия. Доступные варианты:
|
Часовой пояс | Да | Выберите часовой пояс из списка. Поле отображается, когда в поле Задать часовой пояс выбран вариант Выбрать. |
Задать календарь | Нет | Укажите источник календаря для данного действия. Доступные варианты:
|
Календарь | Да | Выберите календарь из списка. Поле отображается, когда в поле Задать часовой пояс выбран вариант Выбрать. |