入门案例步骤:流程定义、部署流程定义、启动一个流程实例、任务查询、任务处理
一、流程定义
1、新建流程
这样就进入了流程设计页面
2、绘制流程图、
3、指定流程定义的key、
4、指定任务负责人
5、流程保存为图片
先将holiday.bpmn改为holiday.xml、如下图
如果有乱码、就修改idea工具、然后重启idea、
最后一行追加一条命令: -Dfile.encoding=UTF-8
然后就保存为图片到diagram文件里、然后再将holiday.xml改回之前的holiday.bpmn
这样流程图就画好了。会有二个文件:holiday.bpmn 和holiday.png
二、部署流程定义
部署流程定义就是要将上边绘制的图形即流程定义(.bpmn)部署在工作流程引擎activiti中
使用processEngine创建RepositoryService、方法如下:
//2、部署流程定义
@Test
public void createActivitiDefined() {
//获取repositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
//部署对象
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("diagram/holiday.bpmn")
.addClasspathResource("diagram/holiday.png")
.name("请假申请流程")
.deploy();
System.out.println("流程部署id= " + deployment.getId());
System.out.println("流程部署名称 = " + deployment.getName());
}
/**
* 流程定义的部署
* activiti表有哪些?
* act_re_deployment 部署信息
act_re_procdef 流程定义的一些信息
act_ge_bytearray 流程定义的bpmn文件及png文件
*/
执行此操作后activiti会将上边代码中指定的bpm文件和图片文件保存在activiti数据库。
三、启动一个实例
流程定义部署在activiti后就可以通过工作流管理业务流程了,也就是说上边部署的请假申请流程可以使用了。一个流程可以有很多实例、对于请假申请流程,张三发起一个请假申请单需要启动一个流程实例
//3、启动一个流程实例(一个流程可以有多个实例)
@Test
public void startProcessInstance(){
//获取RunTimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//根据流程定义的key启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday");
System.out.println("流程定义的id:"+processInstance.getProcessDefinitionId());
System.out.println("流程实例id:" +processInstance.getId() );
System.out.println("当前活动的id:"+processInstance.getActivityId());
}
/**
* 启动流程实例:
* 前提是先已经完成流程定义的部署工作
*
* 背后影响的表:
* act_hi_actinst 已完成的活动信息
act_hi_identitylink 参与者信息
act_hi_procinst 流程实例
act_hi_taskinst 任务实例
act_ru_execution 执行表
act_ru_identitylink 参与者信息
act_ru_task 任务
*/
四、任务查询
流程启动后,各各任务的负责人就可以查询自己当前需要处理的任务,查询出来的任务都是该用户的待办任务。
//4、任务查询
@Test
public void findPersonalTaskList(){
//任务负责人
String assignee = "zhangsan";
//创建TaskService
TaskService taskService = processEngine.getTaskService();
List<Task> list = taskService.createTaskQuery().processDefinitionKey("holiday").taskAssignee(assignee).list();
for (Task task : list) {
System.out.println("流程实例id: " + task.getProcessInstanceId());
System.out.println("任务id: " + task.getId());
System.out.println("任务负责人id: " + task.getAssignee());
System.out.println("任务名称id: " + task.getName());
}
}
五、任务处理
任务负责人查询待办任务,选择任务进行处理,完成任务
//5、任务处理
@Test
public void completeTask(){
//任务id
String taskId = "7505";
//创建TaskService
TaskService taskService = processEngine.getTaskService();
//完成任务
taskService.complete(taskId);
}
/**
* 流程定义的部署
* activiti表有哪些?
* act_re_deployment 部署信息
act_re_procdef 流程定义的一些信息
act_ge_bytearray 流程定义的bpmn文件及png文件
*/