另一种JBPM实现互斥撤回任务的例子

一个JBPM实现互斥撤回任务的例子   
关键字:   一节点多任务实例    
        有一个需求是这个样子的:员工请假,填写好请假单后,提交申请.上级主管会有一个审核请假的任务,同时申请人有一个撤回的任务.这这两个任务互斥,也就是说两个任务有一个先执行.另一个任务取消.
       曾经看过网上一篇文章使用分支节点创建两个任务节点.当一个任务节点执行后写一个action类负责结束另一个任务节点.达到互斥撤回的效果.本人试验过确实可以完成.
       不过这不符合我们常规的流程定义方式(需要增加一对分支,联合节点).并且不符合jbpm关于节点描述.
       jbpm认为一个节点代表流程中的一个等待状态.显然领导审核和员工撤销请假处于同一个等待状态,也应该处于一个节点中.使用一对分支,联合节点的方式虽然形式上处于一个等待状态.但这样的流程设计是不合适的.
       可以这样设计这个互斥回撤节点

< task - node name = " 审核 "  signal = " first "  end - tasks = " true " >
           
< task name = " 审核员工请假 "  swimlane = " boss "  template = " apply_2.ftl " >
        
< controller >
           
< variable name = " reason "  access = " read "  mapped - name = " reason " />
          
< variable name = " day "  access = " read,write "  mapped - name = " day " />
          
< variable name = " applyman "  access = " read "  mapped - name = " applyman " />
          
< variable name = " decision "  access = " read,write "  mapped - name = " decision " />
        
</ controller >  
    
</ task >
        
< task name = " 撤回请假单 "  swimlane = " applyman "  template = " apply_3_new.ftl " >
        
< controller >
           
< variable name = " reason "  access = " read "  mapped - name = " reason " />
          
< variable name = " day "  access = " read "  mapped - name = " day " />
          
< variable name = " applyman "  access = " read "  mapped - name = " applyman " />
          
< variable name = " decision "  access = " read,write "  mapped - name = " decision " />
        
</ controller >
    
</ task >
   
      
< transition name = " 结束 "  to = " 归档 " ></ transition >
      
< transition name = " 撤销 "  to = " 请假结束 " ></ transition >
      
< transition name = " 修改 "  to = " 修改 " ></ transition >
   
</ task - node >


这个节点包含了我们刚才说的两个任务.我们知道当流传到这个节点的时候.这两个任务会同时创建并分配给各自的人员.有一个人完成任务后 节点向指定的节点转向.同时结束另一个任务.     signal="first" 有一个任务结束节点就流转.  end-tasks="true" 结束该节点的时候自动结束其他没有完成的任务.

       这是个小例子没什么特别.可能早有高人知晓.在这我只是感觉到jbpm对节点是流程的一个等待状态这个含义,对我们设计流程有重要的意义.欢迎大家指正批评

   完整的xml流程定义.如果你要部署这个流程.这里需要说明的是
com.jbpmexample.jbpm.Assignment类是我自己的授权类.你自己写一个代替就好了, template="apply_1.ftl"  这样的属性是我自己加的 为了实现显示页面的定制.需要去掉.否则部署的时候会报错


<? xml version = " 1.0 "  encoding = " UTF-8 " ?>

< process - definition
  xmlns
= " urn:jbpm.org:jpdl-3.1 "   name = " 新请假流程 " >
  
< swimlane name = " applyman "   />
  
  
< swimlane name = " boss " >
    
< assignment  class = " workflow.test.Assignment " >
         
< swimlaneName > boss </ swimlaneName >
      
</ assignment >
  
</ swimlane >
  
   
< start - state name = " 请假开始 " >
    
< task name = " 填写请假单 "  swimlane = " applyman "  template = " apply_1.ftl " >
        
< controller >
          
< variable name = " reason "  access = " read,write "  mapped - name = " reason " />
          
< variable name = " day "  access = " read,write "  mapped - name = " day " />
          
< variable name = " applyman "  access = " read,write "  mapped - name = " applyman " />
        
</ controller >  
    
</ task >
      
< transition name = " 结束 "  to = " 审核 " ></ transition >
   
</ start - state >
   
< task - node name = " 审核 "  signal = " first "  end - tasks = " true " >
           
< task name = " 审核员工请假 "  swimlane = " boss "  template = " apply_2.ftl " >
        
< controller >
           
< variable name = " reason "  access = " read "  mapped - name = " reason " />
          
< variable name = " day "  access = " read,write "  mapped - name = " day " />
          
< variable name = " applyman "  access = " read "  mapped - name = " applyman " />
          
< variable name = " decision "  access = " read,write "  mapped - name = " decision " />
        
</ controller >  
    
</ task >
        
< task name = " 撤回请假单 "  swimlane = " applyman "  template = " apply_3_new.ftl " >
        
< controller >
           
< variable name = " reason "  access = " read "  mapped - name = " reason " />
          
< variable name = " day "  access = " read "  mapped - name = " day " />
          
< variable name = " applyman "  access = " read "  mapped - name = " applyman " />
          
< variable name = " decision "  access = " read,write "  mapped - name = " decision " />
        
</ controller >
    
</ task >
   
      
< transition name = " 结束 "  to = " 归档 " ></ transition >
      
< transition name = " 撤销 "  to = " 请假结束 " ></ transition >
      
< transition name = " 修改 "  to = " 修改 " ></ transition >
   
</ task - node >
   
< task - node name = " 归档 " >
           
< task name = " 请假归档 "  swimlane = " applyman "  template = " apply_4.ftl " >
        
< controller >
           
< variable name = " reason "  access = " read "  mapped - name = " reason " />
          
< variable name = " day "  access = " read "  mapped - name = " day " />
          
< variable name = " applyman "  access = " read "  mapped - name = " applyman " />
          
< variable name = " decision "  access = " read "  mapped - name = " decision " />
        
</ controller >  
    
</ task >
      
< transition name = " 结束 "  to = " 请假结束 " ></ transition >
   
</ task - node >
   
< end - state name = " 请假结束 " ></ end - state >
   
   
< task - node name = " 修改 " >
   
< task name = " 修改 "  swimlane = " applyman "  template = " apply_1.ftl " >
        
< controller >
           
< variable name = " reason "  access = " read,write "  mapped - name = " reason " />
          
< variable name = " day "  access = " read,write "  mapped - name = " day " />
          
< variable name = " applyman "  access = " read "  mapped - name = " applyman " />
        
</ controller >  
    
</ task >
      
< transition name = " 结束 "  to = " 审核 " ></ transition >
   
</ task - node >
</ process - definition >

在javaeye与其他jbpm使用者的讨论
http://jbpm.group.javaeye.com/group/blog/59741
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值