Одобрение

Рабочий процесс: согласованиеProfessional Edition+

Введение

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

Плагин одобрения предоставляет специальный тип рабочего процесса (триггер) «Одобрение» и специальный узел «Согласование» для этого процесса. В сочетании с возможностями NocoBase по пользовательским коллекциям и пользовательским блокам это позволяет быстро и гибко создавать и управлять разными сценариями согласования.

Создание рабочего процесса

При создании рабочего процесса выберите тип «Одобрение», чтобы создать рабочий процесс одобрения:

Триггер одобрения — создание рабочего процесса одобрения

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

Настройка триггера

Настройка триггера одобрения

Привязка коллекции

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

Триггер одобрения — выбор коллекции

Способ запуска

При запуске процесса одобрения для бизнес-данных можно выбрать один из двух способов:

  • Перед сохранением данных

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

  • После сохранения данных

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

Где можно запускать процесс одобрения

Вы можете выбрать, где в системе будет доступен запуск процесса одобрения:

  • Только в блоках данных

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

  • В блоках данных и в Центре задач

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

Кто может запускать процесс одобрения

Вы можете настроить права и указать, каким пользователям разрешено запускать этот процесс одобрения:

  • Все пользователи

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

  • Только выбранные пользователи

    Запуск процесса одобрения разрешён только выбранным пользователям. Можно выбрать несколько пользователей.

    20251226114623

Настройка формы инициатора

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

Триггер одобрения — форма инициатора

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

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

Триггер одобрения — настройка полей формы инициатора

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

Триггер одобрения — настройка действий формы инициатора

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

Триггер согласования_Настройка триггера_Разрешить отзыв

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

Подсказка

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

Карточка «Мои заявки» 2.0+

Можно использовать для настройки карточки задачи «Мои заявки» в центре задач.

Настройка карточки «Мои заявки»

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

После применения настроенная карточка задачи будет отображаться в списке центра задач:

Карточка «Мои заявки» в центре задач

Режим отображения записи в потоке

  • Снимок

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

  • Актуальная версия

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

Узел «Согласование»

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

Примечание

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

Настройка запуска одобрения

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

Запуск одобрения — привязка рабочего процесса

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

Примечание

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

Центр задач

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

Центр задач

Мои отправки

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

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

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

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

Мои задачи

Список задач

Список задач

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

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

Интерфейс HTTP API

Инициатор

Запуск из коллекции

Чтобы запускать из блока данных, можно выполнить вызов такого вида (на примере кнопки создания коллекции posts):

curl -X POST -H 'Authorization: Bearer <your token>' -H 'X-Role: <roleName>' -d \
  '{
    "title": "Hello, world!",
    "content": "This is a test post."
  }'
  "http://localhost:3000/api/posts:create?triggerWorkflows=workflowKey"

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

Просмотр ключа рабочего процесса

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

Примечание

Поскольку внешние вызовы также должны выполняться от имени пользователя, при вызове через HTTP API, как и для запросов из обычного интерфейса, нужно передавать данные аутентификации: заголовок Authorization или параметр token (токен, полученный при входе), а также заголовок X-Role (текущее имя роли пользователя).

Если в этом действии нужно запустить событие для связанных данных «один-к-одному» (связь «один-ко-многим» пока не поддерживается), можно использовать ! в параметре, чтобы указать данные триггера для поля связи:

curl -X POST -H 'Authorization: Bearer <your token>' -H 'X-Role: <roleName>' -d \
  '{
    "title": "Hello, world!",
    "content": "This is a test post.",
    "category": {
      "title": "Test category"
    }
  }'
  "http://localhost:3000/api/posts:create?triggerWorkflows=workflowKey!category"

При успешном вызове будет запущено событие одобрения для соответствующей коллекции categories.

Примечание

При запуске «События после действия» через HTTP API также нужно учитывать, включён ли рабочий процесс и совпадает ли конфигурация коллекции; иначе вызов может завершиться неуспешно или с ошибкой.

Запуск из центра согласований

curl -X POST -H 'Authorization: Bearer <your token>' -H 'X-Role: <roleName>' -d \
  '{
    "collectionName": "<collection name>",
    "workflowId": <workflow id>,
    "data": { "<field>": "<value>" },
    "status": <initial approval status>,
  }'
  "http://localhost:3000/api/approvals:create"

Параметры

  • collectionName: имя целевой коллекции для запуска согласования. Обязательно.
  • workflowId: ID рабочего процесса, используемого для запуска согласования. Обязательно.
  • data: поля записи коллекции, создаваемой при запуске согласования. Обязательно.
  • status: статус записи, создаваемой при запуске согласования. Обязательно. Возможные значения:
    • 0: черновик — сохранение без отправки на согласование.
    • 1: отправка на согласование — инициатор отправляет запрос на согласование, входя в процесс согласования.

Сохранить и отправить

Когда инициированное (или отозванное) согласование находится в состоянии черновика, его можно снова сохранить или отправить через следующий API:

curl -X POST -H 'Authorization: Bearer <your token>' -H 'X-Role: <roleName>' -d \
  '{
    "data": { "<field>": "<value>" },
    "status": 2
  }'
  "http://localhost:3000/api/approvals:update/<approval id>"

Получить список отправленных согласований

curl -X GET -H 'Authorization: Bearer <your token>' -H 'X-Role: <roleName>' \
  "http://localhost:3000/api/approvals:listMine"

Отзыв

Инициатор может отозвать запись, которая сейчас находится в согласовании, через следующий API:

curl -X POST -H 'Authorization: Bearer <your token>' -H 'X-Role: <roleName>' -d \
  "http://localhost:3000/api/approvals:withdraw/<approval id>"

Параметры

  • <approval id>: ID записи согласования для отзыва. Обязательно.

Утверждающий

После входа рабочего процесса одобрения в узел «Согласование» для текущего утверждающего создаётся задача. Утверждающий может завершить задачу согласования через интерфейс или вызовом HTTP API.

Получить записи согласования

Задачи — это записи согласования. Все записи согласования текущего пользователя можно получить через следующий API:

curl -X GET -H 'Authorization: Bearer <your token>' \
  "http://localhost:3000/api/approvalRecords:listMine"

Здесь approvalRecords — ресурс коллекции, поэтому можно использовать стандартные условия запроса, например filter, sort, pageSize, page.

Получить одну запись согласования

curl -X GET -H 'Authorization: Bearer <your token>' \
  "http://localhost:3000/api/approvalRecords:get/<record id>"

Одобрить и отклонить

curl -X POST -H 'Authorization: Bearer <your token>' -d \
  '{
    "status": 2,
    "comment": "Looks good to me.",
    "data": { "<field to modify>": "<value>" }
  }'
  "http://localhost:3000/api/approvalRecords:submit/<record id>"

Параметры

  • <record id>: ID записи для согласования. Обязательно.
  • status: статус процесса согласования. 2 — одобрить, -1 — отклонить. Обязательно.
  • comment: комментарий к процессу согласования. Необязательно.
  • data: изменения записи коллекции в текущем узле «Согласование» после одобрения. Необязательно (действует только при одобрении).

Возврат v1.9.0+

До v1.9.0 возврат использовал тот же API, что и одобрение и отклонение, где "status": 1 означал возврат.

Начиная с v1.9.0 для возврата используется отдельный API:

curl -X POST -H 'Authorization: Bearer <your token>' -d \
  '{
    "returnToNodeKey": "<node key>",
  }'
  "http://localhost:3000/api/approvalRecords:return/<record id>"

Параметры

  • <record id>: ID записи для согласования. Обязательно.
  • returnToNodeKey: ключ целевого узла для возврата. Необязательно. Если в узле настроен диапазон узлов для возврата, этот параметр позволяет указать конкретный узел. Если диапазон не настроен, параметр можно не передавать, и по умолчанию возврат произойдёт к стартовой точке для повторной отправки инициатором.

Делегирование

curl -X POST -H 'Authorization: Bearer <your token>' -d \
  '{
    "assignee": <user id>,
  }'
  "http://localhost:3000/api/approvalRecords:delegate/<record id>"

Параметры

  • <record id>: ID записи для согласования. Обязательно.
  • assignee: ID пользователя, которому делегируется задача. Обязательно.

Добавить согласующего

curl -X POST -H 'Authorization: Bearer <your token>' -d \
  '{
    "assignees": [<user id>],
    "order": <order>,
  }'
  "http://localhost:3000/api/approvalRecords:add/<record id>"

Параметры

  • <record id>: ID записи для согласования. Обязательно.
  • assignees: список ID пользователей, которых нужно добавить как согласующих. Обязательно.
  • order: порядок добавления согласующего. -1 означает передо мной, 1 означает после меня.