Активити в действии

Java

Заметки "Активити бой"

1. Обзор

1.1 Структурная схема

Activiti结构图

1.2 Service

RepositoryService Определение процесса управления
RuntimeService Управление выполнением, включая такие операции, как запуск, продвижение и удаление экземпляров процесса.
TaskService управление задачами
HistoryService Управление историей (управление выполненными данными)
IdentityService Организационное управление
FormService Дополнительный сервис, управление формами задач
ManagerService

1.3 Таблицы базы данных

префикс таблицы тип значение
ACT_RE_* repository Содержит определения процессов и статические ресурсы процесса (изображения, правила и т. д.).
ACT_RU_* runtime Таблица времени выполнения содержит текущие данные, такие как экземпляры процессов, задачи, переменные и асинхронные задачи. Она сохраняет данные только во время выполнения экземпляра процесса и удаляет записи в конце процесса, поэтому таблица времени выполнения всегда может быть небольшой. и быстро.
ACT_ID_* identity Содержит идентификационную информацию, такую ​​как пользователи, группы и т. д.
ACT_HI_* history Содержит исторические данные, такие как исторические экземпляры процессов, переменные, задачи и т. д.
ACT_GE_* general Используется в различных сценариях, например, для хранения файлов ресурсов.

1.4 Список спецификаций Activiti

классификация таблиц Имя таблицы объяснять
Общие данные ACT_GE_BYTEARRAY Общие определения процессов и ресурсы процессов
Общие данные ACT_GE_PROPERTY Системные свойства
История процесса ACT_HI_ACTINST Исторические экземпляры процесса
История процесса ACT_HI_ATTACHMENT Исторические вложения процесса
История процесса ACT_HI_COMMENT историческая описательная информация
История процесса ACT_HI_DETAIL Детали исторических запусков процессов
История процесса ACT_HI_IDENTITYLINK Взаимоотношения пользователей во время выполнения исторического процесса
История процесса ACT_HI_PROCINST Исторические экземпляры процесса
История процесса ACT_HI_TASKINST Исторические экземпляры задач
История процесса ACT_HI_VARINST Переменная информация в исторических запусках процесса
таблица групп пользователей ACT_ID_GROUP Идентификационная информация — информация о группе
таблица групп пользователей ACT_ID_INFO Идентификационная информация — информация о группе
таблица групп пользователей ACT_ID_MEMBERSHIP Идентификационная информация - промежуточная таблица для отношений пользователей и групп
таблица групп пользователей ACT_ID_USER Идентификационная информация — информация о пользователе
Таблица определения процесса ACT_RE_DEPLOYMENT Информация о единице развертывания
Таблица определения процесса ACT_RE_MODEL Информация о модели
Таблица определения процесса ACT_RE_PROCDEF Развернутое определение процесса
запустить таблицу экземпляров ACT_RU_EVENT_SUBSCR события времени выполнения
запустить таблицу экземпляров ACT_RU_EXECUTION Экземпляр выполнения процесса во время выполнения
запустить таблицу экземпляров ACT_RU_IDENTITYLINK Информация о взаимоотношениях пользователей во время выполнения
запустить таблицу экземпляров ACT_RU_JOB работа во время выполнения
запустить таблицу экземпляров ACT_RU_TASK задачи выполнения
запустить таблицу экземпляров ACT_RU_VARIABLE таблица переменных времени выполнения

1.5 Основной API

1.5.1 ProcessInstance

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

1.5.2 Execution

Объект выполнения Выполнение, процесс следует правилам, определенным процессомвыполнить один разпроцесс;

  1. Процесс параллельного выполнения, основная строка представляет собой ProcessInstance, а каждое действие в строке ответвления представляет Execution.
  2. В процессе - процесс одновременного выполнения объектов, основная строка представляет ProcessInstance, а каждое действие в ответвляемой строке представляет Execution.
  3. Их может быть несколько, но может быть только один экземпляр процесса ProcessInstance.

2. Метод и таблица

2.1 DeploymentBuilder.deploy()

Deployment deployment = processEngine.getRepositoryService()//
    .createDeployment()
    .addClasspathResource("diagrams/LeaveBill.bpmn")
    .addClasspathResource("diagrams/LeaveBill.png")
    .deploy();

Этот шаг будет работать с тремя таблицами в базе данных:

  1. act_re_deployment (таблица объектов развертывания)
    Сохраните отображаемое имя и время развертывания определения процесса и добавьте запись для каждого развертывания.
  2. act_re_procdef (таблица определения процесса)
    Информация об атрибутах определения процесса сохраняется, и запись добавляется в эту таблицу для каждого нового развернутого определения процесса.

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

  3. act_ge_bytearray (таблица файлов ресурсов)
    Хранит информацию о развертывании, связанную с определениями процессов. То есть там, где хранится документ определения процесса. Каждое развертывание добавляет две записи: одну для файла правил bpmn и одну для изображения (если во время развертывания указан только один файл bpmn, activiti проанализирует содержимое файла bpmn и автоматически сгенерирует блок-схему во время развертывания). Оба файла не очень большие и хранятся в базе данных в бинарном виде.
  • ACT_RE_PROCDEF
    Обработать таблицу синтаксического анализа, синтаксический анализ выполнен успешно, сохранить запись в этой таблице. Лист данных определения бизнес-процессаACT_RE_PROCDEF(act_re_procdef)

    NAME имя поля описание поля
    ID_ Идентификатор процесса {processDefinitionKey}:{processDefinitionVersion}:{generated-id}
    REV_ номер версии
    CATEGORY_ Пространство имен процесса Пространство имен, определенное процессом, является категорией
    NAME_ Имя процесса Число является значением атрибута имени элемента процесса файла процесса.
    KEY_ Идентификатор определения процесса Число является значением атрибута id элемента процесса файла процесса.
    VERSION_ Номер версии процесса Управляемое программой новое добавление равно 1, и оно завершается добавлением 1 по очереди после модификации.
    DEPLOYMENT_ID_ Номер развертывания Идентификатор таблицы развертывания
    RESOURCE_NAME_ Обработать имя файла bpmn
    DGRM_RESOURCE_NAME_ имя изображения процесса png
    DESCRIPTION_ Описание описывать
    HAS_START_FORM_KEY_ Имеет ли начальный узел formKey 0 нет 1 да
    SUSPENSION_STATE_ повесить ли 1 активен 2 приостановлен

    эта таблица иACT_RE_DEPLOYMENT — отношение «многие к одному»., то есть развернутый пакет bar может содержать несколько файлов определения процесса, и каждый файл определения процесса будет иметь запись в таблице ACT_RE_PROCDEF.Данные, определенные каждым процессом, будут соответствовать файлу ресурсов и файлу изображения PNG в таблице ACT_GE_BYTEARRAY.. Связь с ACT_GE_BYTEARRAY выполняется программно с помощью ACT_GE_BYTEARRAY.NAME и ACT_RE_PROCDEF.NAME_ в структуре таблицы базы данных.нетотражать

  • ACT_RE_DEPLOYMENT
    Используется для хранения информации, которая должна сохраняться во время развертывания.

    первичный ключ имя поля описание поля
    ID_ Номер развертывания, самоувеличивающийся
    NAME_ Имя пакета развертывания
    CATEGORY_ тип VARCHAR(255)
    DEPLOY_TIME_ Время развертывания TIMESTAMP
  • ACT_GE_BYTEARRAY
    сохранить все бинарные данные И LeaveBill.bpmn, и LeaveBill.png являются ResourceEntity и добавляются в таблицу.
    ACT_GE_BYTEARRAY(act_ge_bytearray)

    Name имя поля описание поля
    ID_ Я БЫ_ Идентификатор первичного ключа, номер файла ресурсов, автоинкремент
    REV_ номер версии INT(11)
    NAME_ Имя развернутого файла,
    DEPLOYMENT_ID_ Первичный ключ из родительской таблицы ACT_RE_DEPLOYMENT
    BYTES_ Большой текстовый тип, который хранит поток текстовых байтов LONGBLOB
    GENERATED_ Это двигатель генерируется 0 генерируется пользователем, 1 генерируется Activiti

2.2 RuntimeService().startProcessInstanceByKey()

Когда процесс достигает узла, в таблице ACT_RU_EXECUTION будет сгенерирован 1 элемент данных, если текущий узел является узлом пользовательской задачи, запись будет добавлена ​​в таблицу ACT_RU_TASK

  1. ACT_RU_TASK (таблица данных выполнения задачи)
    (Выполняется задача в реальном времени) Форма запроса задачи агента
    ACT_RU_TASK(act_ru_task)

    первичный ключ имя поля описание поля
    ID_
    REV_ номер версии INT(11)
    EXECUTION_ID_ идентификатор экземпляра (внешний ключ EXECUTION_ID_) Идентификатор экземпляра выполнения
    ** PROC_INST_ID_** Идентификатор экземпляра процесса (внешний ключ PROC_INST_ID_) VARCHAR(64)
    PROC_DEF_ID_ Идентификатор определения процесса VARCHAR(64)
    NAME_ название миссии Имя определения узла
    PARENT_TASK_ID_ Идентификатор задачи родительского раздела ID экземпляра родительского узла
    DESCRIPTION_ детали миссии Описание определения узла
    TASK_DEF_KEY_ ключ определения задачи ID определения задачи
    OWNER_ Владелец (старая версия) Владелец (обычно пустой, имеет значение только при делегировании)
    ASSIGNEE_ Агент (правопреемник) подписант или грузоотправитель
    DELEGATION_ агентство Тип делегирования DelegationState делится на два типа: PENDING, RESOLVED. Пустой VARCHAR(64), если нет делегата
    PRIORITY_ приоритет INT(11)
    CREATE_TIME_ время создания TIMESTAMP
    DUE_DATE_ время исполнения кропотливый
    SUSPENSION_STATE_ приостановленное состояние 1 для активного 2 для приостановленного
  2. ACT_RU_EXECUTION (экземпляр выполнения исполняемого процесса)
    Core, Моя форма запроса на выполнение
    ACT_RU_EXECUTION(act_ru_execution)

    первичный ключ имя поля описание поля
    ID_ ID_
    REV_ номер версии INT(11)
    PROC_INST_ID_ Номер экземпляра процесса VARCHAR(64)
    BUSINESS_KEY_ Идентификатор первичного ключа компании VARCHAR(255)
    PARENT_ID_ родительский процесс выполнения ID экземпляра родительского узла
    PROC_DEF_ID_ Идентификатор определения процесса VARCHAR(64)
    SUPER_EXEC_ VARCHAR(64) 64
    ACT_ID_ идентификатор экземпляра Идентификатор экземпляра узла — это идентификатор в ACT_HI_ACTINST.
    IS_ACTIVE_ активное состояние Это живо
    IS_CONCURRENT_ Параллельное состояние Параллельно (верно/неверно)
    IS_SCOPE_ TINYINT(4)
    IS_EVENT_SCOPE_ TINYINT(4)
    SUSPENSION_STATE_ Пауза_ Приостановленное состояние 1 Активно 2 Приостановлено
    CACHED_ENT_STATE_ Конечное состояние кэша_ INT(11)
  3. ACT_RU_IDENTITYLINK (Контактное лицо)
    В основном он хранит информацию об участниках текущего узла и таблицу данных участников задачи.
    ACT_RU_IDENTITYLINK(act_ru_identitylink)

    первичный ключ имя поля описание поля
    ID_ ID_
    REV_ номер версии INT(11)
    GROUP_ID_ Идентификатор группы пользователей VARCHAR(255)
    TYPE_ Тип группы пользователей В основном делятся на следующие категории: правопреемник, кандидат, владелец, стартер, участник. то есть: правопреемник, кандидат, владелец, инициатор, участник
    USER_ID_ Идентификатор пользователя VARCHAR(255)
    TASK_ID_ идентификатор задачи VARCHAR(64)
    PROC_INST_ID_ Идентификатор экземпляра процесса VARCHAR(64)
    PROC_DEF_ID_ Идентификатор определения процесса VARCHAR(64)
  4. ACT_HI_ACTINST (историческая таблица узлов)
    Историческая информация о деятельности. Здесь записываются все узлы, через которые прошел процесс.В отличие от HI_TASKINST, taskinst записывает только содержимое usertask.

    ACT_HI_ACTINST(act_hi_actinst)

    первичный ключ имя поля описание поля
    ID_ ID_
    PROC_DEF_ID_ Идентификатор определения процесса VARCHAR(64)
    PROC_INST_ID_ Идентификатор экземпляра процесса VARCHAR(64)
    EXECUTION_ID_ Идентификатор выполнения процесса VARCHAR(64)
    ACT_ID_ Идентификатор события Идентификатор определения узла
    TASK_ID_ идентификатор задачи Идентификатор экземпляра задачи Идентификатор экземпляра другого типа узла здесь пуст.
    CALL_PROC_INST_ID_ Идентификатор экземпляра процесса запроса Идентификатор экземпляра процесса вызова внешнего процесса
    ACT_NAME_ Название события Имя определения узла
    ACT_TYPE_ тип активности Такие как startEvent, userTask
    ASSIGNEE_ агент выход узла
    START_TIME_ Время начала DATETIME
    END_TIME_ Время окончания DATETIME
    DURATION_ время, время миллисекундное значение

3. Учебник

3.1 Разница между setVariable и setVariableLocal

  • setVariable
    При установке переменной процесса, когда имя переменной процесса совпадает, следующее значение заменяет предыдущее значение, а поле TASK_ID не сохраняет значение идентификатора задачи.
  • setVariableLocal
    При установке переменной процесса установите переменную процесса для текущего активного узла.Если в процессе 2 активных узла (ветви), установите переменную процесса для каждого активного узла, даже если имя переменной процесса одинаково, более поздняя версия Значение не заменит значение предыдущей версии, оно будет использовать другой идентификатор задачи в качестве идентификатора для хранения 2 значений переменных процесса, и вы можете видеть, что поле TASK_ID будет хранить значение идентификатора задачи

3.2 Эксклюзивный шлюз

Будет возвращен только один результат. Когда процесс выполняется на эксклюзивном шлюзе, механизм процесса автоматически извлекает выход шлюза, и если первый результат решения оказывается истинным или условие не задано (по умолчанию истинно), выход будет получен сверху вниз. Нижний.
Используйте переменные процесса, задайте условия соединения и выполните рабочий процесс в соответствии с условиями соединения. Если нет условий, соответствующих условиям, он оставит соединение по умолчанию. Вам необходимо установить переменную процесса. Если он не установлен, будет выброшено исключение, и он не пойдет.шлюз по умолчанию

3.3 Параллельный шлюз

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

3.4 Получение активности

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

3.5 Личные задания

Настроить диспетчер задач

3.5.1 Использование переменных процесса

使用流程变量设置个人任务

3.5.2 Использование классов

使用类设置个人任务1
使用类设置个人任务2
使用类设置个人任务代码
пройти черезprocessEngine.getTaskService().setAssignee(taskId, userId);Назначение личных задач от одного человека другому переопределяет делегата, установленного слушателем.

3.6 Групповые задания

  1. Непосредственно назначить менеджера
    直接指定办理人
    Список участников задачи группы запросов
List<IdentityLink> list = processEngine.getTaskService().getIdentityLinksForTask(taskId)

act_ru_identitylink: человек, который хранит задачу, включая индивидуальные задачи и групповые задачи, с указанием выполняемых задач.
act_hi_identitylink: Сохраняет менеджер задачи, включая индивидуальные задачи и групповые задачи, с указанием исторических задач
Разница в том, что:
Если это личное задание, то в типе ТИП указывается участник (участник)
Если это групповое задание, то в типе ТИП указывается кандидат (кандидат) и участник (участник)

  1. Используйте переменные процесса

    使用流程变量-组任务

  2. своего рода

    使用类-组任务1
    使用类-组任务2
    使用类-组任务code
    пройти черезprocessEngine.getTaskService().claim (taskId, userId);Назначьте групповую задачу индивидуальной задаче, также называемой претензионной задачей, то есть назначьте кого-то для выполнения этой задачи.В это время он не будет проверять, есть ли userId в кандидате, если нет, добавить userId в кандидата список, соответствующий таблице IdentityLink
    При получении задания он может быть участником группового задания или не участником группового задания, в этом случае лицо, выполняющее задание, может быть обозначено Типом как участник.

3.7 Ролевые группы

act_id_group: Таблица групп ролей
act_id_user:пользовательская таблица
act_id_membership: Таблица ролей пользователей
В середине развертывания определения процесса и запуска экземпляра процесса установите диспетчер групповой задачи и сохраните информацию о группе и пользователе в таблице Activiti.

角色组code

В-четвертых, Activiti Combat

4.1 Задачи

4.1.1 Задачи пользователя

мониторинг задач
Create создает задачи, назначение назначает задачи и завершает задачи
Expression,delegateExpression,Alfresco script
activity:initiator=”xxx”: Оператор, запустивший экземпляр процесса, может быть сохранен в базе данных с именем переменной «xxx», что требует сотрудничества.identityService.setAuthenticatedUserId(authenticatedUserId)использовать

4.1.2 Задачи сценария

可以运行脚本语言

4.1.3 Сервисная задача

Service 任务

4.1.4 Задачи бизнес-правил

Может быть интегрирован с drools

业务规则任务

4.1.5 Почтовая задача

На основе serviceTask он расширен от activiti и может отправлять электронные письма.

4.1.6 Camel

Расширен от activiti на основе serviceTask и представляет собой фреймворк для решения маршрутизации сообщений.

4.1.7 Manual task

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

4.1.8 Receive task

После того, как задача создана, она начинает ждать прихода сообщения, и задача не будет завершена, пока она не будет запущена.Вы можете отправить сигнал на запуск принимающей задачи через метод signal() интерфейса RuntimeService.

4.1.9 Несколько экземпляров

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

4.2 Шлюз шлюза

4.2.1 Эксклюзивный шлюз

Если результат вычисления нескольких строк верен, будет выполнен первый шлюз, значение которого истинно, если ни одна из строк не верна, будет выдано исключение

4.2.2 Параллельный шлюз

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

4.2.3 Инклюзивный шлюз

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

4.2.4 Шлюз событий

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

4.3 Подпроцессы и вызывающие действия

4.3.1 Подпроцесс

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

  • ограничение
  1. Может содержать только одно и только одно пустое стартовое событие
  2. Хотя бы одно конечное событие
  3. В подпроцессе поток последовательности не может напрямую установить выходной поток для действий вне подпроцесса, его можно заменить граничным событием.

4.3.2 активность вызова активность вызова

Функция такая же, как у подпроцесса, но выражение другое.Вы можете использовать вызывающую активность для замены активности, встроенной в подпроцесс.Создав модель вызывающей активности и указав метод id внешнего процесс, его можно использовать как подвид деятельности основного процесса.

调用活动

4.3.3 Подпроцесс события

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

4.3.4 Подпроцесс транзакции

Подпроцесс имеет транзакционный, ACID, откат

4.4 Границы и промежуточные события

Граничное событие — это «захваченное» событие, связанное с действием. После срабатывания граничного события текущее действие будет прервано и выполнено в соответствии с выходным потоком после граничного события.
Действие может быть привязано только к одному граничному событию
Значение атрибута cancelActivity может быть установлено в некоторых граничных событиях, чтобы контролировать, следует ли отменить выполнение действия, указанного выходным потоком.

4.4.1 Граничные события таймера

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

4.4.2 Аномальные граничные события

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

<sequenceFlow id="flow-treasurerAudit" name="财务不同意" sourceRef="exclusivegateway-treasurerAudit" targetRef="errorendevent2">

Вы также можете вызвать исключение напрямую

异常边界事件

4.4.3 События границы сигнала

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

4.4.4 Отмена граничных событий

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

  1. Основной процесс транзакции может присоединять только одно граничное событие отмены.
  2. Если подпроцессы вложены в подпроцессы транзакции, будут ли инициированы только завершенные компенсационные события подпроцесса?
  3. Для подпроцесса транзакции с несколькими экземплярами, если один экземпляр инициирует событие отмены, все экземпляры будут инициированы граничным событием отмены.

4.4.5 Компенсация граничных событий

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

4.4.6 Промежуточные события захвата

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

  1. Событие среднего захвата таймера
    定时器中间捕获事件
  2. Захват событий в середине сигнала Используется для захвата события брошенного сигнала, идентификатор сигнала может быть захвачен, если идентификатор сигнала непротиворечив.
    транслировать
  3. событие захвата среднего сообщения
    Направленное распространение один к одному, только одно сообщение может быть отправлено указанному экземпляру процесса за раз

4.4.7 Промежуточные броски

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

  1. Бросание событий в пустоту Без выполнения функции процесса ее можно сделать более значимой с помощью расширенных функций activiti, добавленных к большинству действий/событий, и можно использовать в качестве процессора для промежуточных состояний/результатов.
  2. Событие выброшено в середине сигнала Может быть синхронным или асинхронным
    Когда сигнал отправляется во время синхронизации, дождитесь захвата и обработки сигнала, прежде чем продолжить выполнение процесса.Если в середине будет ошибка, будет выполнен откат. Выполнять следующий процесс сразу после отправки сигнала асинхронно, без отката

4.5 Слушатели

4.5.1 Слушатель выполнения

Разрешить выполнение кода Java во время выполнения
Тип прослушивания: начало, конец, дубль
События, которые можно зафиксировать:

  1. Экземпляр процесса начинается и заканчивается
  2. захват выходного потока
  3. начало деятельности, окончание
  4. начало маршрута, конец
  5. промежуточные события начинаются и заканчиваются
  6. триггерное начальное событие, триггерное конечное событие

3 типа исполнения прослушивателя

  1. Класс: реализует интерфейс
  2. Выражение: выражение, похожее на EL
  3. DelegateExpression: класс интерфейса, который может быть реализован в виде параметров.

4.5.2 Слушатель задач

Может применяться только к пользовательским задачам
тип монитора

  1. Назначение: срабатывает после того, как задача назначена руководителю, перед созданием
  2. Создать: Атрибуты менеджеров, кандидатов и групп кандидатов, которым необходимо обрабатывать задачи одну за другой.
  3. завершено: задача завершена, прежде чем данные среды выполнения будут удалены Порядок: задание->создать->выполнить

4.6 Форма задания

свойства формы

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

Пять, работа на время

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

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

6. Начальное событие сообщения

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

消息启动事件
в вызывающем кодеprocessInstance = runtimeService.startProcessInstanceByMessage("启动XXX流程");Процесс найдет EVENT_NAME в таблице act_ru_event_subscr, соответствующее имени сообщения, и запустится, когда оно будет найдено.

7. Заключительное событие

Завершить конечное событие: завершить весь процесс
Пустое конечное событие: завершить выполнение только одного выходного потока
В экземпляре исторической задачи HistoricalActivityInstance имеетсяHistoricActivityInstance.getDeleteReason(), соответствующий полю DELETE_REASON_ таблицы act_hi_taskinst
Если задача завершилась нормально (методом complete), значение DELETE_REASON_ завершается, а если задача была удалена, то причина удаления удаляется
Например, если пустое конечное событие не завершено, но основной процесс завершен, запись о подпроцессе удаляется.

8. Граничные события сообщения

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

消息边界事件
消息边界事件配置

runtimeService.messageEventReceived(messageName, executionId);	//触发消息边界事件

Точно так же инициируйте сигнальное событиеruntimeService.signalEventReceived(signalName, executionId);
Если к задаче прикреплено граничное событие сообщения, когда выполнение задачи завершается, а граничное событие не запускается, зарегистрированное событие будет удалено после завершения задачи.

9. Задания

9.1 Руководитель задач и диспетчер задач

Принципал: владелец_
Менеджер: assignee_

//参与人:
taskService.addUserIdentityLink(taskId, userId, identityLinkType);
taskService.getIdentityLinksForTask(taskId);
//签收
processEngine.getTaskService().claim(task.getId(), " user "); // 数据库字段owner_为user
//委派
processEngine.getTaskService().delegateTask(task.getId(), "henryyan"); // //数据库字段assignee _为henryyan
//被委派人完成任务
taskService.resolveTask(task.getId());

Окончательный правопреемник: user1,owen:user1
Владелец - это владелец задачи, может быть только один, уполномоченный - это определенный получатель задачи, и он может быть только один, а кандидат - это человек, который может получить задачу, поэтому их будет много, поэтому кандидат помещается в таблицу идентификаторов только для связи с задачей, и первые два могут быть отмечены непосредственно в таблице задач.
при звонкеtaskService.getIdentityLinksForTask("task102");При следует учитывать эти три случая (две таблицы).

任务委派原理

9.2 Подписание и обратное подписание

Знак для:taskService.claim(taskId, userId);
Обратная квитанция:taskService.claim(taskId, null); // 把已签收的任务办理人置空

9.3 Кандидаты и группы кандидатов

taskService.addUserIdentityLink(taskId, userId, identityLinkType)
identityLinkType имеет несколько категорий людей

角色分类

Какая польза от установки аутентифицированного пользователя?

9.4 Подзадачи

Задача может быть разделена на несколько задач, которые будут выполняться разными людьми.
При выполнении основной задачи подзадача также будет выполнена по умолчанию, удалить из таблицы ru и войти в таблицу hi

    Task task2 = taskService.newTask();
    task2.setParentTaskId(task.getId());
    task2.setAssignee("sub task");
    taskService.saveTask(task2); //记录到数据库中

Разное

  1. Просмотр дочернего процесса через родительский процесс
List<Execution> processInstances = processEngine.getRuntimeService().createExecutionQuery().processInstanceId("13201").list();