Рабочий процесс — это «автоматизация части или всего бизнес-процесса в среде компьютерных приложений», которая в основном решает проблему «передачи документов, информации или задач между несколькими участниками в соответствии с определенными заранее определенными правилами». или облегчить достижение какой-либо желаемой бизнес-цели».
Система управления рабочими процессами (WfMS) — это программная система, которая выполняет определение и управление рабочей нагрузкой, а также выполняет экземпляры рабочих процессов в соответствии с предопределенной логикой рабочего процесса в системе. Система управления рабочими процессами не является бизнес-системой предприятия, а обеспечивает среду программной поддержки для работы бизнес-системы предприятия.
Общие рамки рабочего процесса
Activity5.13, JBPM4.4, OSWorkFlow, Рабочий процесс
Нижний уровень структуры рабочего процесса должен поддерживаться базой данных.Activiti версии 5.13 имеет 23 таблицы. Фреймворк JBPM4.4 имеет поддержку базы данных внизу и 18 таблиц. Нижний уровень JBPM использует спящий режим для работы с базой данных. Операционная база данных mybatis, используемая в нижней части фреймворка Activiti.
3.3 Используйте файл конфигурации по умолчанию, предоставленный инфраструктурой Activiti.
Требуется, чтобы имя файла конфигурации было activiti-context.xml или activiti.cfg.xml. Идентификатор объекта конфигурации механизма процесса конфигурации должен бытьprocessEngineConfigurationИдентификатор созданного объекта механизма обработки должен бытьprocessEngine
activiti-context.xml
3. Разберитесь с двадцатью тремя таблицами в структуре Activiti.
Фон Activiti поддерживается базой данных, и все таблицы начинаются с ACT_. Вторая часть представляет собой двухбуквенное обозначение, указывающее на назначение таблицы. Использование также соответствует API сервиса.
ACT_RE_*: «RE» означает репозиторий. Эта таблица с префиксом содержит определения процессов и статические ресурсы процесса (изображения, правила и т. д.).
ACT_RU_*: «RU» означает время выполнения. Эти таблицы времени выполнения содержат экземпляры процессов, задачи, переменные, асинхронные задачи и другие текущие данные. Activiti сохраняет эти данные только во время выполнения экземпляра процесса и удаляет эти записи по завершении процесса. Это позволяет рабочей таблице оставаться небольшой и быстрой.
ACT_ID_*: «ID» означает личность. Эти таблицы содержат идентификационную информацию, такую как пользователи, группы и т. д.
ACT_HI_*: «HI» означает историю. Эти таблицы содержат исторические данные, такие как исторические экземпляры процессов, переменные, задачи и т. д.
ACT_GE_*: общие данные, используемые в различных сценариях.
В-четвертых, базовое использование фреймворка Activiti
1. Определение процесса развертывания
1.1 Используйте подключаемый модуль редактирования BPMN Eclipse или Idea, чтобы нарисовать блок-схему и экспортировать ее.流程图.bpmnи流程图.png. (Установку и использование плагинов осуществляет Baidu)
2.2 Использование кода Java для развертывания определения процесса процесса
Тест.java
Экземпляр процесса основан на определении процесса.Конкретный процесс выполнения является экземпляром процесса, а определение процесса соответствует нескольким экземплярам процесса (отношение «один ко многим»).
В приведенном выше коде много сервисов, далее будет объяснена разница между этими сервисами.
RepositoryService ---- Управление статическими ресурсами (определение процесса, bpmn, png)
RuntimeService ----- Экземпляр процесса операции (экземпляр процесса запуска, экземпляр процесса запроса, экземпляр конечного процесса)
TaskService ----- Операционные задачи (запрос задач, обработка задач)
HistoryService ---- Работа с историческими данными
В-седьмых, используйте конструктор процессов веб-версии, предоставляемый инфраструктурой Activiti.
1. Скопируйте файл activiti-explorer.war из пакета Activiti в каталог /webapps сервера tomcat.
2. Запустите Tomcat и посетитеhttp://lcoalhost:8080/activiti-explorer3. Войти. Учетная запись и пароль: kermit
Восемь, используя рабочий процесс API фреймворка Activiti.
1. Два способа развертывания определений процессов
8.2 Метод 2: запуск в соответствии с ключом, определенным процессом (автоматический выбор последней версии определения процесса для запуска экземпляра процесса)
14. Запросите последнюю версию списка определений процессов.
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
query.orderByProcessDefinitionVersion().asc();
List<ProcessDefinition> list = query.list();
Map<String, ProcessDefinition> map = new HashMap<>();
for (ProcessDefinition pd : list) {
map.put(pd.getKey(),pd);
}
System.out.println(map);
}
15. Модификация процесса
Модификация процесса: добавить новую версию процесса, если процесс уже выполняется, продолжить выполнение в соответствии с исходным процессом. Новый процесс соответствует последней версии.
16. Запрос исторических данных
16.1 Запрос списка исторических экземпляров процесса
Запрос списка исторических экземпляров процесса act_hi_procinst
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
HistoricProcessInstanceQuery query = processEngine.getHistoryService().createHistoricProcessInstanceQuery();
List<HistoricProcessInstance> list = query.list();
for (HistoricProcessInstance hi : list) {
System.out.println(hi.getId());
}
}
16.2 Запрос исторических данных об активности
Запрос исторических данных об активности act_hi_actinst, включая задачи и события
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery();
//按照流程实例排序
query.orderByProcessInstanceId().desc();
query.orderByHistoricActivityInstanceEndTime().asc();
List<HistoricActivityInstance> list = query.list();
for (HistoricActivityInstance hi : list) {
System.out.println(hi.getActivityId() + "——" + hi.getActivityName() + "——" + hi.getActivityType());
}
}
16.3 Запрос исторических данных задачи
Запрос исторических данных задачи act_hi_taskinst — это просто задача
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
HistoricTaskInstanceQuery query = processEngine.getHistoryService().createHistoricTaskInstanceQuery();
query.orderByProcessInstanceId().asc();
query.orderByHistoricTaskInstanceEndTime().asc();
List<HistoricTaskInstance> list = query.list();
for (HistoricTaskInstance hi:list){
System.out.println(hi.getAssignee()+"——"+hi.getName()+"——"+hi.getStartTime());
}
}
9. Переменные процесса
В процессе выполнения процесса или выполнения задачи он используется для установки и получения переменных, а также использует переменные процесса для передачи бизнес-параметров в процессе передачи процесса.
Соответствующая таблица:
act_ru_variable: исполняемая таблица переменных процесса
act_hi_varinst: Таблица истории переменных процесса Диаграмма переменных процесса
### 2. Типы, поддерживаемые переменными процесса
> Типы данных, предоставляемые в Jdk (String, Integer, List, Map...)
Пользовательский класс сущностей (требуется реализация интерфейса сериализации), в таблице переменных хранится только bytearray_id, а созданное содержимое хранится в таблице bytearray.
3. Получите переменные процесса
3.1 Используйте метод RuntimeService для получения
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String executionId = "1201";
Map<String, Object> variables = processEngine.getRuntimeService().getVariables(executionId);
System.out.println(variables);
Set<String> set = variables.keySet();//key2 key1 user
for (String key : set) {
Object val = variables.get(key);
System.out.println(key + "=" + val);
}
//根据一个key获得一个value
Object value = processEngine.getRuntimeService().getVariable(executionId, "user");
System.out.println(value);
Collection<String> variableNames = new ArrayList<>();
variableNames.add("key2");
variableNames.add("user");
Map<String, Object> map = processEngine.getRuntimeService().getVariables(executionId, variableNames);
System.out.println(map);
# 10. Виды задач
### 1. Личные задания
> Человек несет ответственность за обработку его, и он записывается через поле цессионаса в таблице задач.
2. Общие задачи (групповые задачи)
Текущая задача может выполняться одним из нескольких человек, и при разработке блок-схемы может быть назначено несколько обработчиков. Кандидаты в пользователи
### 3. Принять
> Задача получения не является обязанностью одного человека, так что поток выполняется с помощью метода сигнала! ?imageMogr2/автоориентация/полоса% 7CimageView2/2/w/1240)
`` `
/**
* Обработать полученное задание
*/
@Контрольная работа
публичный тест на недействительность () {
// Создание механизма обработки использует профиль по умолчанию
ProcessEngine processEngine = ProcessEngine.getDefaultProcessEngine ();
Строка excutionId = "2501";
сигнал processEngine.getRuntimeService() (excutionId).;
}
`` `
11. Слушатель
1. Выполнить прослушиватель
Слушайте события экземпляра процесса
Шаг 1: Напишите класс слушателя в соответствии с правилами фреймворка
Третий шаг: обработайте задачу, фреймворк вызывает класс слушателя через отражение
12. Шлюз
1. Эксклюзивный шлюз (ExclusiveGateway)
Используется для реализации решения в процессе. Когда выполнение процесса в эксклюзивный шлюз все данные будут снова выполнены, чтобы соответствовать условиям, позволит процесу продолжить работу. Обратите внимание, что: эксклюзивный шлюз выберет удовлетворенное условие выполнения.
Шаг 1. Создайте блок-схему и используйте эксклюзивный шлюз
Шаг 2: Выполнение процесса Фреймворк выбирает и выполняет одну из ветвей в соответствии с установленными переменными процесса и устанавливает параметры в строке ветви: Condition:#{bxje>200}
### 2. Параллельный шлюз (ParallelGateway)
> Это позволяет разделить процесс на несколько ветвей, а также объединить несколько ветвей в одну.
филиал: Все потоки, проходящие через параллельный шлюз, будут выполняться параллельно.
сходятся: процесс не будет проходить через параллельный шлюз, пока все потоки не достигнут параллельного шлюза.
Параллельный шлюз, без условного суждения. После того, как процесс проходит через шлюз, остается несколько ветвей, и одновременно будет выполняться несколько объектов исполнения. Следует отметить, что параллельные шлюзы должны появляться парами, с ветвями и агрегациями.
13. Spring интегрирует Activiti
Шаг 1. Предоставьте файл конфигурации spring, настройте источник данных, диспетчер транзакций, объект конфигурации механизма обработки, объект механизма обработки.appplicationContext.xml
Шаг 2. Прочтите файл конфигурации Spring в программе Java, создайте фабрику Spring и получите объект механизма процесса.
public class SpringActivitiTest {
@Test
public void test() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
ProcessEngine processEngine = (ProcessEngine) applicationContext.getBean("processEngine");
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
deploymentBuilder.addClasspathResource("spring/variable.bpmn");
Deployment deployment = deploymentBuilder.deploy();
}
}
Пока основные заметки по фреймворку Activiti отсортированы здесь.Эта заметка используется для ознакомления после изучения фреймворка Activiti.Она не подходит для вводного туториала по фреймворку Activiti.Не нравится-не ставьте распылить его.
При перепечатке просьба указывать источник и автора.