当前位置: 首页 > 工具软件 > jBPM > 使用案例 >

JBPM--三

陶璞
2023-12-01

进阶篇

 一、因为加入了不同的分支流向,所以当审批不通过要驳回时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接口,实现类中的方法会在执行到对应的任务之前被调用,以便顺利分配任务

       的参与者

 

 

 类似资料: