JBPM 3 (图形设计器)

本文介绍使用JBPM进行工作流设计的实际经验,包括自定义用户模型、流程控制及表单关联等关键实现细节。

    JBPM 提供了基于Eclipse的一个图形化设计器,用了一个多月,感觉比刚接触的时候好一点了,不过,还是有点简陋。也许BPM就是这样设计的吧?   。用来做工作流引擎还是比商业产品差那么一点点,好在扩展性够好,挂上代码就可以用。

     那我写的一格流程对ProcessDefintion.xml 里面的常用标记做些基本说明

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <process-definition  
  4.   xmlns="urn:jbpm.org:jpdl-3.1"  name="物资出门_往返">  
  5.    <start-state name="开始">  
  6.       <transition name="" to="审核人填写单据"></transition>         
  7.    </start-state>  
  8.    <task-node name="审核人填写单据">  
  9.       <task name="填写出门单据">  
  10.        <assignment class="mtm.workflow.FlowActorhandle"></assignment>  
  11.         <controller>  
  12.             <variable name="WF_WriteS2" mapped-name="Form"></variable>  
  13.          </controller>  
  14.       </task>  
  15.          
  16.       <transition name="提交审核" to="部门领导审批"></transition>  
  17.    </task-node>  
  18.    <task-node  name="部门领导审批">  
  19.       <task name="部门审核">  
  20.        <assignment class="mtm.workflow.FlowActorhandle"></assignment>  
  21.        <controller>  
  22.             <variable name="WF_Do_Task" access="read" mapped-name="Form"></variable>  
  23.          </controller>  
  24.       </task>  
  25.       <transition name="不同意" to="拒绝出门">  
  26.          <action name="标注拒绝" class="mtm.workflow.FlowActionhandle"></action>  
  27.       </transition>  
  28.       <transition name="同意" to="公司办审批"></transition>  
  29.       <transition name="修改单据" to="审核人填写单据"></transition>  
  30.    </task-node >  
  31.    <task-node name="公司办审批">  
  32.     <task name="公司办审核">  
  33.      <assignment class="mtm.workflow.FlowActorhandle"></assignment>  
  34.      <controller>  
  35.             <variable name="WF_Do_Task" access="read" mapped-name="Form"></variable>  
  36.          </controller>  
  37.     </task>  
  38.       <transition name="同意" to="门卫确认出门"></transition>  
  39.       <transition name="不同意" to="拒绝出门">  
  40.          <action name="标注拒绝"></action>  
  41.       </transition>  
  42.    </task-node>  
  43.    <task-node name="门卫确认出门">  
  44.       <task name="门卫出门审核">  
  45.        <assignment class="mtm.workflow.FlowActorhandle"></assignment>  
  46.        <controller>  
  47.             <variable name="WF_Do_Task" access="read" mapped-name="Form"></variable>  
  48.          </controller>  
  49.       </task>  
  50.       <transition name="同意放行" to="门卫确认进门">  
  51.          <action name="出门标注" class="mtm.workflow.FlowActionhandle"></action>  
  52.       </transition>  
  53.       <transition name="不同意放行" to="公司办审批"></transition>  
  54.    </task-node>  
  55.    <end-state name="结束"></end-state>  
  56.    <end-state name="拒绝出门"></end-state>  
  57.    <task-node name="门卫确认进门">  
  58.       <task name="登记物资进门">  
  59.        <assignment class="mtm.workflow.FlowActorhandle"></assignment>  
  60.        <controller>  
  61.             <variable name="WF_CheckIn" access="read" mapped-name="Form"></variable>  
  62.          </controller>  
  63.       </task>  
  64.       <transition name="入门确认" to="经办人确认">  
  65.          <action name="入门标注" class="mtm.workflow.FlowActionhandle"></action>  
  66.       </transition>  
  67.    </task-node>  
  68.    <task-node name="经办人确认">  
  69.       <task name="经办人确认">  
  70.        <assignment class="mtm.workflow.FlowActorhandle"></assignment>  
  71.        <controller>  
  72.             <variable name="WF_Do_Task" access="read" mapped-name="Form"></variable>  
  73.          </controller>  
  74.       </task>  
  75.       <transition name="完成处理" to="结束">  
  76.          <action name="完成确认" class="mtm.workflow.FlowActionhandle"></action>  
  77.       </transition>  
  78.    </task-node>  
  79.       
  80. </process-definition>  

 我的代码没有使用JBPM自己的用户模型(过于简单了),直接挂事件 <assignment class="mtm.workflow.FlowActorhandle"></assignment>,感觉好用得多,在委托事件里面使用Context能把所有东西都取出来,也就不必分开写成不同的了,这样反而可以做些配置保存下来。我自己封装的代码就提供了对人员处理的各种情况

 1.xml步骤直接指定流程  2.上一步数据运算结果影响下一步(指定,条件跳转 ex: 大于某个数字需要xxx处理,排除某人)3.指定步骤的处理人(发起者,上一步的关系,拥有者。。。用户委托),基本跟ibm Workflow一致了。btw,这些自己写还是有点烦

  所有回退都是用画线方式 <transition name="不同意放行" to="公司办审批"></transition> 。这样的好处是,所有的展示Form可以跟流程无关,只需要嵌入我做好的子表单就可以了,除了没有Cover和MainDoc的概念,基本改造得跟ibm workflow一样了,hehe,受ibm影响中毒太深,完全被同化了。下一步,打算把跳转条件运算结合jRules,这样会简单一点。

跟主数据交互现在是做得自己不太满意的,    采用的挂Action方法<action name="完成确认" class="mtm.workflow.FlowActionhandle"></action> 完全没有重用的可能,而且action设计得有点喜剧,挂得地方不一样,能得到的对象就不一样,挂线得Transaction,挂node得node,挂TaskNode得Tasknode,相对来说,线好用一些。

至于工作流里面最重要的,自定义流程和自定义表单关联,我开始考虑用ProcessInstance压变量,但是不直观,最后想了一个歪招搞定这个事情,<controller>
            <variable name="WF_Do_Task" access="read" mapped-name="Form"></variable>
         </controller> 用变量和映射变量来搞定。我只用名字不用值,这招还是很管用, mapped-name = "Form" 表示这个变量指定表单。 name =xxx 表示具体的表单。做到这里,我不知道是该鄙视自己把bpm当workflow用,还是该鄙视jbpm完全不考虑被当工作流用的方式。。。 反正这招挺好用,土就土点了。 工作流3大要素都齐全了,管他的,把 流转控制数据,业务数据分离了写代码傻瓜多了。swinline什么的,我觉得意义不大,被限制得有点多。就没多研究了,也许是理解不透彻吧。至于其他node,跟我估计的应该差不多,重点还是怎么挂事件了。遗憾点的就是挂事件的种类有点少,要是有editmodechange,cliam等事件就更方便了。。。。

 finish : 这个blog要能直接上载贴图就好了,索性不贴了....

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值