Скрипты в рабочих процессах
Для расширения базовой функциональности, в блоках рабочих процессов можно использовать серверные скрипты. Помимо классов серверного API, в скриптах рабочих процессов доступны три глобальных объекта:
- current
- scratchpad
- activity
Объект current является экземпляром записи SimpleRecord, для которой был создан контекст рабочего процесса. Названия свойств объекта current совпадают с названиями колонок записи (атрибут Наименование колонки).
Объект scratchpad является ассоциативным массивом (JSON), в который можно поместить значения для дальнейшего использования в рамках контекста. Значение объекта хранится в поле Заметки таблицы Контекст рабочего процесса (wf_context).
Объект activity является экземпляром записи SimpleRecord текущего блока. Cвойства объекта activity совпадают с наименованиями колонок записи (атрибут Наименование колонки) в таблице Рабочие процессы: исполняемые активности (wf_executing_activity). Для форм записей Задача (task) и Согласование (sys_approval), указывается ссылка на связанную запись Рабочие процессы: исполняемые активности в поле Исполняемое действие.
Глобальные объекты в рабочем процессе
Ниже приведен пример рабочего процесса для Задач (task).
В начале процесса, блок Create Child Task создает дочернюю запись Задачи (task). Затем процесс приостанавливается на блоке Wait State, ожидая статуса In progress.
После изменения статуса на In progress, процесс переходит к блоку Update Child Task, в котором обновляется дочерняя запись Задачи:
Блок Record Generator используется для создания записи Задач в соответствии с его настройками. ID текущей записи указывается в его поле Родитель:
new_task.parent_id = current.sys_id;
Для обновления записи, необходимо знать ее ID. Однако блок Record Generator не возвращает ID создаваемой записи.
Для записи, которая создается через блок генератора, поле Исполняемое действие автоматически заполняется ссылкой на исполняемый блок, создавший запись Задачи.
Для поиска созданной записи, используйте выборку из Задач по полю Исполняемое действие.
Используйте объект scratchpad для записи ID текущего блока:
const curentExecActivityId = activity.sys_id;
scratchpad.recGeneratorActivityId = curentExecActivityId;
Блок Run Script с названием Update Child Task осуществляет поиск записи Задачи и обновляет ее:
const task = new SimpleRecord('task');
task.get('wf_executing_activity', scratchpad.recGeneratorActivityId);
if (task.sys_id) {
task.state = '3'; // In Progress
task.update();
}