Activiti进阶(六)——连线(SequenceFlow)


转载地址:http://blog.csdn.net/zjx86320?viewmode=contents

这篇博文为大家简单的介绍一下Activiti中的连线,还是和平时一样,我们放在例子中吧。


一、流程图


图1 请假流程


在上面的流程图中,我们发现和之前不同的是,用户任务【部门经理】审批,下面有两个连线,我们之前的例子都是只有一条连线,那么如果是这种情况的话我们如何进行流程的选择呢?我们这里是用的是通过设置流程变量的方式来对连线的属性进行区分。


二、设置连线属性


假如我们对流程有规定,如果事件不重要,流程直接由部门经理审批结束;如果事件重要,部门经理审批之后,还有有总经理进行审批之后才可以结束。那么我们就可以这样这设置我们的连线,首先得选中我们要设置的连线:


1.为连线命名

2.为连线设置条件


注意:在这里,message表示流程变量的名称,‘不重要’表示流程变量的值,${}中间的内容要使用boolean类型的表达式,用来判断应该执行的连线。


三、部署和启动流程


[java] view plain copy
  1. /**部署流程定义+启动流程实例*/
  2. @Test
  3. publicvoiddeployementAndStartProcess(){
  4. //不加斜杠代表从当前类读取资源,加"/"代表从classpath路径下读取文件
  5. InputStreaminputStreamBpmn=this.getClass().getResourceAsStream("sequenceFlow.bpmn");
  6. InputStreaminputStreampng=this.getClass().getResourceAsStream("sequenceFlow.png");
  7. //部署流程定义
  8. Deploymentdeployment=processEngine.getRepositoryService()
  9. .createDeployment()//创建部署对象
  10. .addInputStream("sequenceFlow.bpmn",inputStreamBpmn)//部署加载资源文件
  11. .addInputStream("sequenceFlow.png",inputStreampng)//
  12. .deploy();
  13. System.out.println("部署ID:"+deployment.getId());
  14. //启动流程实例
  15. ProcessInstancepi=processEngine.getRuntimeService()//
  16. .startProcessInstanceByKey("sequenceFlow");//使用流程定义的key的最新版本启动流程
  17. System.out.println("流程实例ID:"+pi.getId());
  18. System.out.println("流程定义的ID:"+pi.getProcessDefinitionId());
  19. }


执行结果如下:


四、查看个人任务


根据流程定义,当我们启动流程实例的时候,正在执行的用户任务是【部门经理】审批,我们设置的这个任务的办理人是【赵六】,那么我们接下来查询一下【赵六】的个人任务;


[java] view plain copy
  1. /**查询我的个人任务*/
  2. @Test
  3. publicvoidfindPersonalTaskList(){
  4. //任务办理人
  5. Stringassignee="赵六";
  6. List<Task>list=processEngine.getTaskService()//
  7. .createTaskQuery()//
  8. .taskAssignee(assignee)//个人任务的查询
  9. .list();
  10. if(list!=null&&list.size()>0){
  11. for(Tasktask:list){
  12. System.out.println("任务ID:"+task.getId());
  13. System.out.println("任务的办理人:"+task.getAssignee());
  14. System.out.println("任务名称:"+task.getName());
  15. System.out.println("任务的创建时间:"+task.getCreateTime());
  16. System.out.println("流程实例ID:"+task.getProcessInstanceId());
  17. System.out.println("#######################################");
  18. }
  19. }
  20. }


执行结果如下:


五、完成任务


[java] view plain copy
  1. /**完成任务*/
  2. @Test
  3. publicvoidcompleteTask(){
  4. //任务ID
  5. StringtaskId="2048";
  6. //完成任务的同时,设置流程变量,让流程变量判断连线该如何执行
  7. Map<String,Object>variables=newHashMap<String,Object>();
  8. //其中message对应sequenceFlow.bpmn中的${message=='不重要'},不重要对应流程变量的值
  9. variables.put("message","不重要");
  10. processEngine.getTaskService()//
  11. .complete(taskId,variables);
  12. System.out.println("完成任务:"+taskId);
  13. }


在这里,我们在完成【赵六】的个人任务的同时,设置流程变量,来告诉我们的流程接下来流转到哪里。我们在这个例子中设置的message的值为'不重要',所以流程应该直接结束,不会流程【总经理】审批这一步。



优质内容筛选与推荐>>
1、VS2005中验证码生成页
2、数学界牛人
3、嵌入式Linux系统的构成 .
4、QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)
5、每日积累 8.6


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn