...

Настройка циклов

Тема в разделе "Примеры сценариев", создана пользователем ELMA365, 1 дек 2021.

  1. ELMA365

    ELMA365 Moderator

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

    Самый простой пример цикла — согласование документа. Допустим, сотрудник отправляет отчёт на согласование руководителю. Руководитель может согласовать документ или отправить его на доработку. Если сотрудник получит несогласованный отчёт, он должен внести правки и снова отправить документ на согласование.

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

    В бизнес-процессе можно настроить ручной или автоматический цикл. Рассмотрим работу с каждым из них подробнее.

    1. В зоне ответственности Сотрудник отдела кадров создадим задачу Подбор кандидата.

    2. Разместим блок Создание элемента, связанный с приложением Кандидаты. Назовем блок Новый кандидат.

    3. Добавим блок Запуск процесса, который будет вызывать подпроцесс Рассмотрение кандидата.
    [​IMG]

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

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

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

    Рассмотрим работу автоматического цикла на примере того же процесса Поиск кандидатов на вакансию.

    Изменим схему процесса.

    [​IMG]

    Сотрудник отдела кадров будет добавлять карточки соискателей в задаче Подбор кандидата. Затем при помощи исключающего шлюза и добавленного сценария по каждому кандидату из списка будет автоматически запускаться подпроцесс Рассмотрение кандидата.

    Для этого:

    1. В контекст бизнес-процесса добавим свойство с типом Приложение, выберем опцию Несколько, и привяжем приложение Кандидаты.
    [​IMG]

    2. В блоке запуска процесса Рассмотрение кандидата на вкладке Основное включим опцию Асинхронный запуск. Это необходимо, чтобы основной процесс не прерывался при выполнении подпроцесса.

    3. В блоке запуска процесса Рассмотрение кандидата на вкладке Входные и выходные атрибуты выберем свойство подпроцесса Новый кандидат и сопоставим его с добавленным ранее свойством Кандидаты родительского процесса.
    [​IMG]

    4. Разместим блок Исключающий шлюз и настроем его. На вкладке Переходы выберем ветку Подбор кандидата в качестве перехода по умолчанию.

    На вкладке Служебная переменная включим эту опцию. В поле Тип укажем Выбор «да/нет», в поле Сценарий введем функцию isLastRequest.

    [​IMG]

    5. Нажав на кнопку Открыть, добавим сценарий, который проверяет наличие элементов в списке.
    Код:
    
    async function isLastRequest(): Promise<boolean> {
    if (
    Context.data.candidates && Context.data.candidates.length 0) {
    Context.data.newCandidate Context.data.candidate.pop()
    return 
    false
    }
    return 
    true
    }
    6. Зададим условие перехода из шлюза в подпроцесс Рассмотрение кандидата. В качестве Операнда 1 выберем Служебную переменную шлюза, в поле Операнд 2 выберем значение Нет, в поле Операция поставим знак =.
    [​IMG]
    Если карточек кандидатов несколько, то данные последней записываются в переменную Новый кандидат. При этом прописанный сценарий удаляет запись этой карточки из списка и возвращает значение false в качестве служебной переменной шлюза. Далее сценарий повторяет действия с остальными карточками. Для каждого элемента будет запускаться отдельный подпроцесс Рассмотрение кандидата.

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

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

    elma Участник

    Спасибо!
    Правка для тех, кто будет использовать.
    В строке " Context.data.newCandidate = Context.data.candidate.pop() " опечатка.
    Верно так "Context.data.newCandidate = Context.data.candidates.pop()".

    Плюс таким же сценарием можно решить задачу, если нужно запустить подпроцесс с задачами на нескольких исполнителей, то есть вместо тип "Приложение" идет тип "Пользователей" массивом.