Одобрение
Рабочий процесс: согласованиеProfessional Edition+Введение
Одобрение — это тип процесса, специально предназначенный для задач, которые инициируются и обрабатываются людьми, чтобы определять статус соответствующих данных. Обычно используется для офисной автоматизации и других ручных процессов принятия решений, например для создания и управления рабочими процессами в сценариях вроде «заявки на отпуск», «согласование возмещения расходов» и «согласование закупки сырья».
Плагин одобрения предоставляет специальный тип рабочего процесса (триггер) «Одобрение» и специальный узел «Согласование» для этого процесса. В сочетании с возможностями NocoBase по пользовательским коллекциям и пользовательским блокам это позволяет быстро и гибко создавать и управлять разными сценариями согласования.
Создание рабочего процесса
При создании рабочего процесса выберите тип «Одобрение», чтобы создать рабочий процесс одобрения:

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

Привязка коллекции
Плагин одобрения в NocoBase спроектирован гибко и может использоваться с любой пользовательской коллекцией. Это означает, что для настройки согласования не нужно заново настраивать модель данных — можно напрямую переиспользовать существующую коллекцию. Поэтому после входа в настройку триггера сначала нужно выбрать коллекцию, чтобы определить, создание или обновление данных какой коллекции будет запускать этот рабочий процесс:

Способ запуска
При запуске процесса одобрения для бизнес-данных можно выбрать один из двух способов:
- Перед сохранением данных
Процесс одобрения запускается до сохранения отправленных данных. Этот вариант подходит для сценариев, где данные должны сохраняться только после одобрения. В этом режиме данные на момент запуска считаются временными и будут сохранены в соответствующую коллекцию только после одобрения.
- После сохранения данных
Процесс одобрения запускается после сохранения отправленных данных. Этот вариант подходит для сценариев, где данные можно сначала сохранить, а затем одобрить. В этом режиме данные уже сохранены в коллекции на момент запуска процесса одобрения, а все изменения, внесённые в процессе одобрения, также будут сохранены.
Где можно запускать процесс одобрения
Вы можете выбрать, где в системе будет доступен запуск процесса одобрения:
- Только в блоках данных
Вы можете привязать действие любого блока формы этой коллекции к данному рабочему процессу, чтобы запускать процесс одобрения, а затем обрабатывать и отслеживать его в блоке одобрения отдельной записи. Обычно этот вариант подходит для бизнес-данных.
- В блоках данных и в Центре задач
Помимо блоков данных, процессы одобрения также можно запускать и обрабатывать в глобальном Центре задач. Обычно этот вариант подходит для административных данных.
Кто может запускать процесс одобрения
Вы можете настроить права и указать, каким пользователям разрешено запускать этот процесс одобрения:
-
Все пользователи
Любой пользователь системы может запускать этот процесс одобрения.
-
Только выбранные пользователи
Запуск процесса одобрения разрешён только выбранным пользователям. Можно выбрать несколько пользователей.

Настройка формы инициатора
В конце нужно настроить интерфейс формы инициатора. Этот интерфейс используется для отправки при запуске из блока центра согласований и при повторном запуске после отзыва. Нажмите кнопку «Настроить», чтобы открыть диалог:

В интерфейс инициатора можно добавить форму на основе привязанной коллекции или добавить описательный текст (Markdown) для подсказок и инструкций. Форма обязательна; иначе инициатор не сможет выполнить никаких действий после входа в этот интерфейс.
После добавления блока формы, как и в обычном интерфейсе настройки формы, можно добавить компоненты полей соответствующей коллекции и расположить их по необходимости, чтобы структурировать содержимое для заполнения:

Помимо прямой кнопки «Отправить» можно добавить кнопку действия «Сохранить как черновик», чтобы поддержать промежуточное сохранение:

Если в процессе согласования инициатору разрешено отзывать заявки, необходимо включить кнопку «Отозвать» в настройках интерфейса инициатора:

После этого инициатор сможет отозвать заявку, созданную в рамках данного процесса согласования, до того, как её рассмотрит любой из согласующих. Как только заявку обработает хотя бы один согласующий на любом этапе согласования, возможность отзыва станет недоступна.
После включения или удаления кнопки отзыва вам необходимо нажать «Сохранить» в диалоговом окне настройки триггера, чтобы изменения вступили в силу.
Карточка «Мои заявки» 2.0+
Можно использовать для настройки карточки задачи «Мои заявки» в центре задач.

Любые поля бизнес-коллекции (кроме полей связей) или информация о согласовании могут быть свободно настроены для отображения в карточке.
После применения настроенная карточка задачи будет отображаться в списке центра задач:

Режим отображения записи в потоке
-
Снимок
Инициатор и утверждающие видят запись в том состоянии, в котором она была при входе, а после отправки видят только изменения, сделанные ими самими, но не более поздние изменения от других.
-
Актуальная версия
Инициатор и утверждающие всегда видят последнюю версию записи в потоке, независимо от состояния до их действия. После завершения потока они видят финальную версию записи.
Узел «Согласование»
В рабочем процессе одобрения нужно использовать специальный узел «Согласование» для настройки логики обработки инициированного согласования утверждающими (одобрить, отклонить, вернуть). Узел «Согласование» можно использовать только в рабочих процессах одобрения. П одробности см. в узле «Согласование».
Если в рабочем процессе одобрения нет ни одного узла «Согласование», рабочий процесс будет одобрен автоматически.
Настройка запуска одобрения
После настройки и включения рабочего процесса одобрения его можно привязать к кнопке «Отправить» формы соответствующей коллекции, чтобы пользователи могли инициировать согласование при отправке:

После этого при отправке формы пользователем будет запускаться соответствующий рабочий процесс одобрения. Отправленные данные не только сохраняются в соответствующей коллекции, но и сохраняются как снимок в потоке согласования для просмотра и использования последующими утверждающими.
Сейчас кнопка запуска согласования поддерживает только кнопку «Отправить» (или «Сохранить») в форме создания или обновления. Кнопка «Запустить рабочий процесс» не поддерживается (её можно привязать только к «Пользовательскому событию»).
Центр задач
Центр задач предоставляет единый вход для просмотра и обработки задач пользователями. Согласования, инициированные текущим пользователем, и его ожидающие задачи доступны через центр задач на верхней панели, а разные типы задач можно смотреть через навигацию слева.

Мои отправки
Просмотр отправленных согласований

Прямой запуск н ового согласования

Мои задачи
Список задач

Детали задачи

Интерфейс HTTP API
Инициатор
Запуск из коллекции
Чтобы запускать из блока данных, можно выполнить вызов такого вида (на примере кнопки создания коллекции posts):
Здесь параметр URL triggerWorkflows — это ключ рабочего процесса; несколько ключей разделяются запятыми. Этот ключ можно получить, наведя курсор на имя рабочего процесса в верхней части холста:

При успешном вызове будет запущен рабочий процесс одобрения для соответствующей коллекции posts.
Поскольку внешние вызовы также должны выполняться от имени пользователя, при вызове через HTTP API, как и для запросов из обычного интерфейса, нужно передавать данные аутентификации: заголовок Authorization или параметр token (токен, полученный при входе), а также заголовок X-Role (т екущее имя роли пользователя).
Если в этом действии нужно запустить событие для связанных данных «один-к-одному» (связь «один-ко-многим» пока не поддерживается), можно использовать ! в параметре, чтобы указать данные триггера для поля связи:
При успешном вызове будет запущено событие одобрения для соответствующей коллекции categories.
При запуске «События после действия» через HTTP API также нужно учитывать, включён ли рабочий процесс и совпадает ли конфигурация коллекции; иначе вызов может завершиться неуспешно или с ошибкой.
Запуск из центра согласований
Параметры
collectionName: имя целевой коллекции для запуска согласования. Обязательно.workflowId: ID рабочего процесса, используемого для запуска согласования. Обязательно.data: поля записи коллекции, создаваемой при запуске согласования. Обязательно.status: статус записи, создаваемой при запуске согласования. Обязательно. Возможные значения:0: черновик — сохранение без отправки на согласование.1: отправка на согласование — инициатор отправляет запрос на согласование, входя в процесс согласования.
Сохранить и отправить
Когда инициированное (или отозванное) согласование находится в состоянии черновика, его можно снова сохранить или отправить через следующий API:
Получить список отправленных согласований
Отзыв
Инициатор может отозвать запись, которая сейчас находится в согласовании, через следующий API:
Параметры
<approval id>: ID записи согласования для отзыва. Обязательно.
Утверждающий
После входа рабочего процесса одобрения в узел «Согласование» для текущего утверждающего создаётся задача. Утверждающий может завершить задачу согласования через интерфейс или вызовом HTTP API.
Получить записи согласования
Задачи — это записи согласования. Все записи согласования текущего пользователя можно получить через следующий API:
Здесь approvalRecords — ресурс коллекции, поэтому можно использовать стандартные условия запроса, например filter, sort, pageSize, page.
Получить одну запись согласования
Одобрить и отклонить
Параметры
<record id>: ID записи д ля согласования. Обязательно.status: статус процесса согласования.2— одобрить,-1— отклонить. Обязательно.comment: комментарий к процессу согласования. Необязательно.data: изменения записи коллекции в текущем узле «Согласование» после одобрения. Необязательно (действует только при одобрении).
Возврат v1.9.0+
До v1.9.0 возврат использовал тот же API, что и одобрение и отклонение, где "status": 1 означал возврат.
Начиная с v1.9.0 для возврата используется отдельный API:
Параметры
<record id>: ID записи для согласования. Обязательно.returnToNodeKey: ключ целевого узла для возврата. Необязательно. Если в узле настроен диапазон узлов для возврата, этот параметр позволяет указать конкретный узел. Если диапазон не настроен, параметр можно не передавать, и по умолчанию возврат произойдёт к стартовой точке для повторной отправки инициатором.
Делегирование
Параметры
<record id>: ID записи для согласования. Обязательно.assignee: ID пользователя, которому делегируется задача. Обязательно.
Добавить согласующего
Параметры
<record id>: ID записи для согласования. Обязательно.assignees: список ID пользователей, которых нужно добавить как согласующих. Обязательно.order: порядок добавления согласующего.-1означает передо мной,1означает после меня.

