这篇博文为大家简单的介绍一下Activiti中的连线,还是和平时一样,我们放在例子中吧。
一、流程图
![](https://img-blog.csdn.net/20151220143611453)
图1 请假流程
在上面的流程图中,我们发现和之前不同的是,用户任务【部门经理】审批,下面有两个连线,我们之前的例子都是只有一条连线,那么如果是这种情况的话我们如何进行流程的选择呢?我们这里是用的是通过设置流程变量的方式来对连线的属性进行区分。
二、设置连线属性
假如我们对流程有规定,如果事件不重要,流程直接由部门经理审批结束;如果事件重要,部门经理审批之后,还有有总经理进行审批之后才可以结束。那么我们就可以这样这设置我们的连线,首先得选中我们要设置的连线:
1.为连线命名
![](https://img-blog.csdn.net/20151220144719222)
2.为连线设置条件
![](https://img-blog.csdn.net/20151220144820539)
注意:在这里,message表示流程变量的名称,‘不重要’表示流程变量的值,${}中间的内容要使用boolean类型的表达式,用来判断应该执行的连线。
三、部署和启动流程
-
- @Test
- public void deployementAndStartProcess(){
-
- InputStream inputStreamBpmn = this.getClass().getResourceAsStream("sequenceFlow.bpmn");
- InputStream inputStreampng = this.getClass().getResourceAsStream("sequenceFlow.png");
-
- Deployment deployment = processEngine.getRepositoryService()
- .createDeployment()
- .addInputStream("sequenceFlow.bpmn", inputStreamBpmn)
- .addInputStream("sequenceFlow.png", inputStreampng)
- .deploy();
- System.out.println("部署ID:"+deployment.getId());
-
- ProcessInstance pi = processEngine.getRuntimeService()
- .startProcessInstanceByKey("sequenceFlow");
- System.out.println("流程实例ID:"+pi.getId());
- System.out.println("流程定义的ID:"+pi.getProcessDefinitionId());
- }
执行结果如下:
![](https://img-blog.csdn.net/20151220144015699)
四、查看个人任务
根据流程定义,当我们启动流程实例的时候,正在执行的用户任务是【部门经理】审批,我们设置的这个任务的办理人是【赵六】,那么我们接下来查询一下【赵六】的个人任务;
-
- @Test
- public void findPersonalTaskList(){
-
- String assignee = "赵六";
- List<Task> list = processEngine.getTaskService()
- .createTaskQuery()
- .taskAssignee(assignee)
- .list();
- if(list!=null && list.size()>0){
- for(Task task:list){
- System.out.println("任务ID:"+task.getId());
- System.out.println("任务的办理人:"+task.getAssignee());
- System.out.println("任务名称:"+task.getName());
- System.out.println("任务的创建时间:"+task.getCreateTime());
- System.out.println("流程实例ID:"+task.getProcessInstanceId());
- System.out.println("#######################################");
- }
- }
- }
执行结果如下:
![](https://img-blog.csdn.net/20151220144321768)
五、完成任务
-
- @Test
- public void completeTask(){
-
- String taskId = "2048";
-
- Map<String, Object> variables = new HashMap<String, Object>();
-
- variables.put("message", "不重要");
- processEngine.getTaskService()
- .complete(taskId,variables);
- System.out.println("完成任务:"+taskId);
- }
在这里,我们在完成【赵六】的个人任务的同时,设置流程变量,来告诉我们的流程接下来流转到哪里。我们在这个例子中设置的message的值为'不重要',所以流程应该直接结束,不会流程【总经理】审批这一步。