1. Поймите рабочий процесс
Рабочий процесс — это «автоматизация части или всего бизнес-процесса в среде компьютерных приложений», которая в основном решает проблему «передачи документов, информации или задач между несколькими участниками в соответствии с определенными заранее определенными правилами». или облегчить достижение какой-либо желаемой бизнес-цели». Система управления рабочими процессами (WfMS) — это программная система, которая выполняет определение и управление рабочей нагрузкой, а также выполняет экземпляры рабочих процессов в соответствии с предопределенной логикой рабочего процесса в системе. Система управления рабочими процессами не является бизнес-системой предприятия, а обеспечивает среду программной поддержки для работы бизнес-системы предприятия.
Общие рамки рабочего процесса Activity5.13, JBPM4.4, OSWorkFlow, Рабочий процесс Нижний уровень структуры рабочего процесса должен поддерживаться базой данных.Activiti версии 5.13 имеет 23 таблицы. Фреймворк JBPM4.4 имеет поддержку базы данных внизу и 18 таблиц. Нижний уровень JBPM использует спящий режим для работы с базой данных. Операционная база данных mybatis, используемая в нижней части фреймворка Activiti.
Во-вторых, структура таблицы инициализации
1. Используйте оператор построения таблицы, предоставленный платформой Activiti.
Каталог /activiti-x.xx/database/ceate/ в загруженном пакете инфраструктуры Activiti содержит операторы построения таблиц для различных баз данных.
2. Используйте платформу Activiti для автоматического построения таблиц
2.1 Без конфигурационных файлов
@Test
public void test1() {
// 创建一个流程引擎配置对象
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
// 设置数据源信息
configuration.setJdbcDriver("com.mysql.jdbc.Driver");
configuration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti");
configuration.setJdbcUsername("root");
configuration.setJdbcPassword("");
// 设置自动建表
configuration.setDatabaseSchemaUpdate("true");
// 创建一个流程引擎对象,在创建流程引擎对象中会自动建表
ProcessEngine processEngine = configuration.buildProcessEngine();
}
2.2 Использование пользовательского файла конфигурации
actitviti-context.xml (необязательное имя)
<!-- 配置流程引擎配置对象 -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql:///activiti" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
Test.java
@Test
/**
* 使用框架提供的自动建表(提供配置文件)
*/
public void test2() {
String resource = "actitviti-context.xml";//配置文件名称
String beanName = "processEngineConfiguration";//配置id值
//加载配置文件
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource, beanName);
//创建流程引擎对象
ProcessEngine processEngine = configuration.buildProcessEngine();
}
3.3 Используйте файл конфигурации по умолчанию, предоставленный инфраструктурой Activiti.
Требуется, чтобы имя файла конфигурации было activiti-context.xml или activiti.cfg.xml.
Идентификатор объекта конфигурации механизма процесса конфигурации должен бытьprocessEngineConfiguration
Идентификатор созданного объекта механизма обработки должен бытьprocessEngine
activiti-context.xml
<!-- 配置流程引擎配置对象 -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql:///activiti" />
<!--<property name="jdbcUrl" value="jdbc:mysql:///activiti_web" />-->
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
<!-- 配置一个流程引擎工厂bean,用于创建流程引擎对象 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<!-- 通过set方法注入流程引擎配置对象 -->
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
Test.java
@Test
/**
* 使用框架提供的自动建表(使用默认配置文件)
*/
public void test() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
}
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
@Test
/**
* 部署流程定义
* 操作的数据表:
* act_re_deloyment(部署表) 部署一次 插入一条记录
* act_re_procdef 可以认为是部署表的扩展表 流程定义表
* act_ge_bytearray:流程定义文件被序列化存在数据表中
*/
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获得一个部署构建器对象,用于加载流程定义文件(test.bpmn test.png)完成流程定义的部署
DeploymentBuilder builder = processEngine.getRepositoryService().createDeployment();
// 加载流程定义文件
builder.addClasspathResource("/process/test.bpmn");
builder.addClasspathResource("/process/test.png");
// 部署流程定义
Deployment deployment = builder.deploy();
}
2. Запросите список определений процессов
/**
* 查询流程定义列表
*/
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 流程定义查询对象,用于查询act_re_procdef
ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
//添加过滤条件
query.processDefinitionKey("myProcess_1");
// 添加排序条件
query.orderByProcessDefinitionVersion().desc();
//添加分页查询
query.listPage(0, 10);
List<ProcessDefinition> list = query.list();
for (ProcessDefinition pd : list) {
System.out.println(pd.getId());
}
}
3. Запустите экземпляр процесса
Экземпляр процесса основан на определении процесса.Конкретный процесс выполнения является экземпляром процесса, а определение процесса соответствует нескольким экземплярам процесса (отношение «один ко многим»).
/**
* 根据流程定义 启动一个流程实例
* 根据流程定义的一次具体执行过程,就是一个流程实例
*/
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String processDefinitionId = "myProcess_1:7:1004";//流程定义id可在act_re_procdef表中查询到
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId);
System.out.println(processInstance.getId());
}
4. Запросить личный список задач
/**
* 查询个人任务列表
*/
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//创建任务查询
TaskQuery taskQuery = processEngine.getTaskService().createTaskQuery();
//添加查询条件 办理人为王五
String assignee = "王五";
taskQuery.taskAssignee(assignee);
List<Task> list = taskQuery.list();//查询所有
for (Task task : list) {
System.out.println(task.getId() + "——" + task.getName());
}
}
5. Решайте задачи
/**
* 办理业务
*/
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String taskId = "602";//任务id可在act_ru_task表中查询到
processEngine.getTaskService().complete(taskId);//传入任务id办理业务
System.out.println("办理成功");
}
В-пятых, объект службы, предоставляемый Activiti.
В приведенном выше коде много сервисов, далее будет объяснена разница между этими сервисами.
RepositoryService ---- Управление статическими ресурсами (определение процесса, bpmn, png) RuntimeService ----- Экземпляр процесса операции (экземпляр процесса запуска, экземпляр процесса запроса, экземпляр конечного процесса) TaskService ----- Операционные задачи (запрос задач, обработка задач) HistoryService ---- Работа с историческими данными
6. Объекты, предоставляемые платформой Activiti (соответствующие таблицам)
Deployment-----act_re_deployment ProcessDefinition----act_re_procdef ProcessInstance-----act_ru_execution Task-----act_ru_task
В-седьмых, используйте конструктор процессов веб-версии, предоставляемый инфраструктурой Activiti.
1. Скопируйте файл activiti-explorer.war из пакета Activiti в каталог /webapps сервера tomcat. 2. Запустите Tomcat и посетитеhttp://lcoalhost:8080/activiti-explorer3. Войти. Учетная запись и пароль: kermit
Восемь, используя рабочий процесс API фреймворка Activiti.
1. Два способа развертывания определений процессов
1.1 Чтение одного файла определения процесса
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//创建流程部署对象
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
//读取单个的流程定义文件
deploymentBuilder.addClasspathResource("/process/test.bpmn");
deploymentBuilder.addClasspathResource("/process/test.png");
Deployment deployment = deploymentBuilder.deploy();//部署流程
1.2 Чтение ZIP-архивов Поместите test.bpmn и test.png в один zip-архив.
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//创建流程部署对象
DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
//读取ZIP压缩文件
//读取资源文件
ZipInputStream zipInputStream = new ZipInputStream(this.getClass().getClassLoader().getResourceAsStream("/process/process.zip"));
deploymentBuilder.addZipInputStream(zipInputStream);
deploymentBuilder.name("请假流程部署");//设置流程定义名称
Deployment deployment1 = deploymentBuilder.deploy();//部署流程
}
2. Запросите список развертывания процессов (таблица act_re_deployment)
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//部署查询对象,查询act_re_deployment 部署表
DeploymentQuery deploymentQuery = processEngine.getRepositoryService().createDeploymentQuery();
List<Deployment> list = deploymentQuery.list();
for (Deployment deployment : list) {
String id = deployment.getId();
System.out.println(id);
}
}
3. Удалить информацию о развертывании
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String deloymentId = "7504"; //流程部署id 在act_re_deployment表中
//deleteDeployment有两个参数 第一个删除 部署的内容的id,第二个是否级联删除,默认为false
processEngine.getRepositoryService().deleteDeployment(deloymentId, true);
}
4. Удалите определение процесса (цель удаления определения процесса достигается путем удаления информации о развертывании).
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String deloymentId = "1001";
//deleteDeployment有两个参数 第一个删除 部署的内容的id,第二个是否级联删除,默认为false
processEngine.getRepositoryService().deleteDeployment(deloymentId, true);
}
5. Запросите список определений процессов
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//流程定义查询对象,查询表act_re_procdef
ProcessDefinitionQuery processDefinitionQuery = processEngine.getRepositoryService().createProcessDefinitionQuery();
List<ProcessDefinition> list = processDefinitionQuery.list();
for (ProcessDefinition pd : list) {
System.out.println(pd.getName() + "———" + pd.getId());
}
}
6. Запросите файл определения процесса, соответствующий развертыванию, и соответствующий входной поток (bpmn, png)
@Test
public void test() throws IOException {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String deploymentId = "901";
List<String> list = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
for (String name : list) {
System.out.println(name);
InputStream inputStream = processEngine.getRepositoryService().getResourceAsStream(deploymentId, name);
//将文件保存到本地磁盘
org.apache.commons.io.FileUtils.copyInputStreamToFile(inputStream, new File("d:\\" + name));
inputStream.close();
}
}
7. Получите входной поток файла png
@Test
public void test() throws IOException {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String processDefinitionId = "myProcess_1:6:904";
InputStream PngInputStream = processEngine.getRepositoryService().getProcessDiagram(processDefinitionId);
FileUtils.copyInputStreamToFile(PngInputStream, new File("d:\\my.png"));
}
8. Два способа запуска экземпляра процесса
8.1 Метод 1: Запуск в соответствии с идентификатором, определенным процессом
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//方式一:根据流程定义的id启动
String processDefinitionId = "myProcess_1:6:904";
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId);
System.out.println(processInstance.getId());
}
8.2 Метод 2: запуск в соответствии с ключом, определенным процессом (автоматический выбор последней версии определения процесса для запуска экземпляра процесса)
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//方式二:根据流程定义的key启动(自动选择最新版本的流程定义启动流程实例)
String processDefinitionKey = "myProcess_1";
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance.getId());
}
9. Запросить список экземпляров процесса и запросить таблицу act_ru_execution
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//流程实例查询对象,查询act_ru_execution表
ProcessInstanceQuery query = processEngine.getRuntimeService().createProcessInstanceQuery();
query.processDefinitionKey("myProcess_1");
query.orderByProcessDefinitionId().desc();
query.listPage(0, 3);
List<ProcessInstance> list = query.list();
for (ProcessInstance pi : list) {
System.out.println(pi.getId() + "--" + pi.getActivityId());
}
}
10. Завершите экземпляр процесса
Таблица действий: act_re_excution, act_ru_task
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String processInstanceId = "1601";
processEngine.getRuntimeService().deleteProcessInstance(processInstanceId, "不想要了");
}
11. Запросите список задач
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//任务查询对象,查询任务表 act_ru_task表
TaskQuery query = processEngine.getTaskService().createTaskQuery();
//按照办理人进行过滤
String assignee = "李四";
query.taskAssignee(assignee);
query.orderByTaskCreateTime().desc();
List<Task> list = query.list();
for (Task task : list) {
System.out.println(task.getId());
}
}
12. Обработка задач
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String taskId = "1404";
processEngine.getTaskService().complete(taskId);
}
13. Сделайте процесс прямо на один шаг ниже
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String executionId = "1401"; //流程实例id
processEngine.getRuntimeService().signal(executionId);
}
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: Таблица истории переменных процесса
Диаграмма переменных процесса
1. Установите переменные процесса
1.1 Установить при запуске экземпляра процесса
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String processDefinitionKey = "variable";
Map<String, Object> variables = new HashMap<>();
variables.put("key1", "value1");
variables.put("key2", 200);
ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey, variables);
System.out.println(processInstance.getId());
}
1.2 Установка переменных процесса при обработке задач
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String taskId = "1206";
Map<String, Object> variables = new HashMap<>();
variables.put("user", new User(1, "小王"));
processEngine.getTaskService().complete(taskId, variables);
}
1.3 Настройки метода с помощью RuntimeService
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String excutionId = "601";//流程实例Id
String variableName = "key3";
String value = "value3";
processEngine.getRuntimeService().setVariable(excutionId, variableName, value);
}
1.4 Настройки метода с помощью TaskService
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String taskId = "704";
Map<String, Object> variables = new HashMap<>();
variables.put("key4", 400);
variables.put("k5", "v5");
processEngine.getTaskService().setVariables(taskId, variables);
}
### 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);
3.2 Начало работы с TaskService
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String taskId = "1305";
Map<String, Object> variables = processEngine.getTaskService().getVariables(taskId);
}
# 10. Виды задач ### 1. Личные задания > Человек несет ответственность за обработку его, и он записывается через поле цессионаса в таблице задач.
2. Общие задачи (групповые задачи)
Текущая задача может выполняться одним из нескольких человек, и при разработке блок-схемы может быть назначено несколько обработчиков. Кандидаты в пользователи
2.1 Запрос общедоступного списка задач
@Test
public void test() {
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskQuery query = processEngine.getTaskService().createTaskQuery();
// 根据候选人过滤
String candidateUser = "李四";
query.taskCandidateUser(candidateUser);
List<Task> list = query.list();
for (Task task:list){
System.out.println(task.getName());
}
}
2.2 Сбор публичных задач (превращение публичных задач в личные)
@Test
public void test(){
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String taskId="1602";
String userId="王五";
processEngine.getTaskService().claim(taskId,userId);
}
2.3 Возврат задачи (возврат личной задачи в общую)
@Test
public void test(){
//使用默认配置文件创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String taskId="1602";
processEngine.getTaskService().setAssignee(taskId,null);
}
### 3. Принять > Задача получения не является обязанностью одного человека, так что поток выполняется с помощью метода сигнала! ?imageMogr2/автоориентация/полоса% 7CimageView2/2/w/1240) `` ` /** * Обработать полученное задание */ @Контрольная работа публичный тест на недействительность () { // Создание механизма обработки использует профиль по умолчанию ProcessEngine processEngine = ProcessEngine.getDefaultProcessEngine (); Строка excutionId = "2501"; сигнал processEngine.getRuntimeService() (excutionId).; } `` `
11. Слушатель
1. Выполнить прослушиватель
Слушайте события экземпляра процесса
Шаг 1: Напишите класс слушателя в соответствии с правилами фреймворка
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
/**
* @author Hiseico
* @create 2018-06-07 16:41
* @desc 自定义执行监听器
**/
public class MyExcutionListener implements ExecutionListener {
//当监听事件发生时执行此方法
@Override
public void notify(DelegateExecution delegateExecution) throws Exception {
System.out.println("自定义的监听器执行。。。2");
}
}
Шаг 2: Создайте блок-схему и зарегистрируйте класс слушателя
Шаг 3: Запустите экземпляр процесса, платформа Activiti вызывает класс слушателя посредством отражения.
2. Слушатель задач
Прослушивание событий задачи
Шаг 1. Напишите класс прослушивателя задач в соответствии с правилами Activiti Framework.
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import java.util.Set;
/**
* @author Hiseico
* @create 2018-06-07 17:10
* @desc 自定义任务监听器
**/
public class MyTaskListener implements TaskListener {
/**
* 监听任务事件
*
* @param delegateTask
*/
@Override
public void notify(DelegateTask delegateTask) {
//任务办理人
String assignee = delegateTask.getAssignee();
//任务名称
String eventName = delegateTask.getEventName();
//事件名称
String name = delegateTask.getName();
//流程实例Id
String processInstanceId = delegateTask.getProcessInstanceId();
//获取当前流程实例范围内的所有流程变量的名字
Set<String> variableNames = delegateTask.getVariableNames();
for (String key : variableNames) {
Object value = delegateTask.getVariable(key);
System.out.println(key + " = " + value);
}
System.out.println("一个["+name+"]任务被创建了,由["+assignee+"]负责办理");
}
}
Шаг 2: Зарегистрируйте класс слушателя
Третий шаг: обработайте задачу, фреймворк вызывает класс слушателя через отражение
12. Шлюз
1. Эксклюзивный шлюз (ExclusiveGateway)
Используется для реализации решения в процессе. Когда выполнение процесса в эксклюзивный шлюз все данные будут снова выполнены, чтобы соответствовать условиям, позволит процесу продолжить работу. Обратите внимание, что: эксклюзивный шлюз выберет удовлетворенное условие выполнения.
Шаг 1. Создайте блок-схему и используйте эксклюзивный шлюз
Шаг 2: Выполнение процесса Фреймворк выбирает и выполняет одну из ветвей в соответствии с установленными переменными процесса и устанавливает параметры в строке ветви: Condition:#{bxje>200}
Шаг 3: Занимайтесь бизнесом
/**
* 办理任务,设置流程变量
*/
@Test
public void test() {
String taskId = "802";
Map<String, Object> variables = new HashMap<>();
variables.put("bxje",600);//排他网关会自动判断 bxje 变量的值,选择执行分支
processEngine.getTaskService().complete(taskId,variables);
}
### 2. Параллельный шлюз (ParallelGateway) > Это позволяет разделить процесс на несколько ветвей, а также объединить несколько ветвей в одну.
филиал: Все потоки, проходящие через параллельный шлюз, будут выполняться параллельно.
сходятся: процесс не будет проходить через параллельный шлюз, пока все потоки не достигнут параллельного шлюза.
Параллельный шлюз, без условного суждения. После того, как процесс проходит через шлюз, остается несколько ветвей, и одновременно будет выполняться несколько объектов исполнения. Следует отметить, что параллельные шлюзы должны появляться парами, с ветвями и агрегациями.
13. Spring интегрирует Activiti
Шаг 1. Предоставьте файл конфигурации spring, настройте источник данных, диспетчер транзакций, объект конфигурации механизма обработки, объект механизма обработки.appplicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!--配置数据源-->
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///activiti"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
<!--事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="ds"/>
</bean>
<!--配置一个Spring提供的对象,用于创建一个流程引擎配置对象-->
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="transactionManager" ref="transactionManager"/>
<property name="dataSource" ref="ds"/>
<!--自动建表的配置-->
<property name="databaseSchemaUpdate" value="true"/>
</bean>
<!--创建流程引擎对象-->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration"/>
</bean>
</beans>
Шаг 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.Не нравится-не ставьте распылить его.
При перепечатке просьба указывать источник и автора.
Create By Hiseico