本文共 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(); //办理人的任务列表 Listlist = 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 + "执行完毕");}我们的流程通过了:
所以任务表的数据也没了
如果不是最后一个流程,那么它会继续往下一个流程走