JBPM案例详解(三)

进阶篇

 一、因为加入了不同的分支流向,所以当审批不通过要驳回时JBPM应该能够得到当初提交任务的参与者,
   而这个工作通过直接用actor-id=#{}来实现并不合适,因为如果有很多这样的指定的话,
   可能会乱套,JBPM提供了一个专门能解决该问题的机制。
  
   解决方法:使用泳道,它是定义流程中的多个任务由相同参与者完成的一种机制,这使的泳道正好能够完成任务。
       在第一个任务实例为指定泳道创建后,参与者将被流程记住,以被在同一泳道中的后续任务所使用。
       泳道有一个分配,因此所有引用泳道的任务不需要再指定分配。
      
    **注意:可以在<start-state>开始节点添加一个任务<task>,用swimlane机制来记录流程的启动者
    
    **实现:这里实现了泳道机制
    
    用法:一般放到流程定义文件顶部的位置定义<swimlane>


    <swimlane name="swimlane名字供task应用">
     <assignment class="处理类名字"/>
    </swimlane>
    或
    <swimlane name="swimlane名字供task应用">
     <!--当然这里也可以写死,即actor-id="username"-->
     <assignment actor-id="#{变量}"/>
    </swimlane>
    
    //应用后就不用再为当前的task分配参与者了,分配任务交给swimlane完成
    <task name="任务名字" swimlane="上面定义的swimlane名字"></task>
    
    
    **项目中为了使用swimlane而做的更改有两处:
      1.processdefinition.xml文件中加入了swimlane元素,用它来完成分配任务的参与者
      2.在startProcessInstance.jsp文件中,为参与者变量赋值的那句代码发生了改变,
        改为为swimlane中指定的任务参与者赋值:
         processInstance.getContextInstance().setVariable("starter",userId);
    
 二、项目复杂度增加,流程定义文件加入两个节点,一个是"通知申请人审批",另一个是"人力资源部审批",
     其中"通知申请人审批"仍然由表单提交者,即申请人来完成任务。为此我们正好利用了泳道swimlane的好处。
      <!-- 这样写的意思是当总经理审批通过之后,申请人还要到人力资源那里咨询一下,
        当然咨询的任务由申请人去做,这就是使用swimlane的好处,当流程中有多个任务是同一个参与者参与的时候,
        使用swimlane只需指定swimlane分配的任务参与者的引用即可 -->
        
        对于"人力资源部审批",我们又加入了一个人力资源经理,也就是登陆界面加入了一个下拉框选项,这样增加一个参与者。
       
 三、对流程定义中的分配任务参与者机制再次修改:将部门经理审批中通过actor-id写死的值,改成通过class类来动态指定actor-id的值,

       即指定一个类名,然后该类要实现AssignmentHandler接口,实现类中的方法会在执行到对应的任务之前被调用,以便顺利分配任务

       的参与者

 

项目源码从下载频道我的空间可以找到。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上树的蜗牛儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值