博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【activiti】模拟activiti流引擎的流程
阅读量:2057 次
发布时间:2019-04-28

本文共 2382 字,大约阅读时间需要 7 分钟。

流程图如下:

接下来我们通过代码方式来模拟一下基本流程

1.简历流程图bpmn:

assignee:代理人、指定人、处理人

2.创建流程引擎以及工作流数据表:

数据库及表可以自动创建,可以在配置数据库连接时,实现自动创建数据库和表

3.部署流程:

所影响的表

-- 部署表:id是由act_ge_property的 next_dbid决定SELECT * FROM act_re_deployment;  -- 流程定义表:该表的key属性是bpmn的id决定--  该表的name属性  是bpmn 的name 属性决定SELECT * FROM act_re_procdef;   -- 通用属性表SELECT * FROM act_ge_property; -- 开启流程: 执行对象,流程实例,流程对象SELECT * FROM act_ru_execution;-- 任务表SELECT * FROM act_ru_task;

首先获取默认activiti.cfg.xml文件:

private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
文件配置如下:

然后我们部署流程:

/** * 部署流程定义 */@Testpublic void deploy(){	//取得路程引擎对象	//获取仓库服务:管理流程定义	RepositoryService repositoryService = processEngine.getRepositoryService();	Deployment deployment = repositoryService.createDeployment()    //创建一个部署服务器			.addClasspathResource("diagrams/LevalBill.bpmn")		//从类路径中添加资源,一次只能添加一个资源			.addClasspathResource("diagrams/LevalBill.png")			.name("请假单流程")		//设置部署的名称			.category("办公类型")			.deploy();		System.out.println("部署的id:" + deployment.getId());	System.out.println("部署的名字:" + deployment.getName());	System.out.println("部署的类型:" + deployment.getCategory());}
这时我们可以发现以上那几张表上便有了数据:

创建了

4.执行流程:

接下来我们开始执行流程:一开始会到第一个流程上去

/** * 执行流程 */@Testpublic void startProcess(){	String processDefiKey="myProcess";	//取运行时服务	RuntimeService runtimeService = processEngine.getRuntimeService();	//取得流程实例	ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefiKey);	System.out.println("流程实例id:" + pi.getId());	System.out.println("流程定义id:" + pi.getProcessDefinitionId());	}
5.查询任务:

我们可以查询任务,看看任务的进度:

/** * 查询任务 */@Testpublic void queryTask(){	//任务代理人	String assignee = "王五";	//取得任务服务	TaskService taskService = processEngine.getTaskService();	//创建一个任务查询对象	TaskQuery taskQuery = taskService.createTaskQuery();	//办理人的任务列表	List
list = taskQuery.taskAssignee(assignee) //指定代理人 .list(); //遍历任务列表 for (Task task : list) { System.out.println("任务的id:" + task.getId()); System.out.println("任务的代理人:" + task.getAssignee()); System.out.println("任务的名字:" + task.getName()); }}

同时我们在数据库中查找任务表:

由于我之前执行过了,所以流程是走到了这里。

接下来我们允许任务通过:

6.完成任务:

/** * 完成任务 */@Testpublic void compileTask(){	String taskId = "302";	//task:任务的id	processEngine.getTaskService().complete(taskId);	System.out.println("任务" + taskId + "执行完毕");}
我们的流程通过了:

所以任务表的数据也没了

如果不是最后一个流程,那么它会继续往下一个流程走

你可能感兴趣的文章
linux中fork()函数详解
查看>>
C语言字符、字符串操作偏僻函数总结
查看>>
Git的Patch功能
查看>>
分析C语言的声明
查看>>
TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手
查看>>
C结构体、C++结构体、C++类的区别
查看>>
进程和线程的概念、区别和联系
查看>>
CMake 入门实战
查看>>
绑定CPU逻辑核心的利器——taskset
查看>>
Linux下perf性能测试火焰图只显示函数地址不显示函数名的问题
查看>>
c结构体、c++结构体和c++类的区别以及错误纠正
查看>>
Linux下查看根目录各文件内存占用情况
查看>>
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>
利用栈实现DFS
查看>>
逆序对的数量(递归+归并思想)
查看>>
数的范围(二分查找上下界)
查看>>
算法导论阅读顺序
查看>>
Windows程序设计:直线绘制
查看>>
linux之CentOS下文件解压方式
查看>>
Django字段的创建并连接MYSQL
查看>>