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要能直接上载贴图就好了,索性不贴了....

 

 

 

评论
kencool 2008-01-03
sonic yi 写道
自己做流程设计器本身并不复杂,就是写processdefintion.xml就可以了。jsp做我个人感觉不是一个最好的选择,b/s结构用dhtml的东西画多了效率会有些问题,如果是嵌入其他东西另当别论。你说的具体点的我不太清楚,如果你不是很熟悉jbpm的话建议你直接先抄jbpm的图形设计器,熟悉jbpm或者流程开发的话,按自己意思定义没什么问题,随便怎么改,不能支撑的部分自己写点东西来支撑就行了。改jbpm我就没想过了,看过代码,下面层次很多,基本上没发动。。。


请问,可以将jbpm的流程定义插件直接用在jBOSS中吗?
supermy 2007-04-10
RomKK 2007-03-28
引用
至于工作流里面最重要的,自定义流程和自定义表单关联,我开始考虑用ProcessInstance压变量,但是不直观,最后想了一个歪招搞定这个事情,
用变量和映射变量来搞定。我只用名字不用值,这招还是很管用, mapped-name = "Form" 表示这个变量指定表单。name=xxx 表示具体的表单。
这里的xxx是在哪定义的呢?也就是在流程定义文件上的‘WF_WriteS2’、‘WF_Do_Task’、‘WF_CheckIn’是在哪定义的。
sonic_yj 2007-03-05
自己做流程设计器本身并不复杂,就是写processdefintion.xml就可以了。jsp做我个人感觉不是一个最好的选择,b/s结构用dhtml的东西画多了效率会有些问题,如果是嵌入其他东西另当别论。你说的具体点的我不太清楚,如果你不是很熟悉jbpm的话建议你直接先抄jbpm的图形设计器,熟悉jbpm或者流程开发的话,按自己意思定义没什么问题,随便怎么改,不能支撑的部分自己写点东西来支撑就行了。改jbpm我就没想过了,看过代码,下面层次很多,基本上没发动。。。
wf_7758520 2007-03-05
看了你的一个回复中有提到自己来做JBPM流程的设计器
我现在有个需求,就是让用户自己定义流程(用jsp做)
这就需要一个设计器,能不能说的具体一点这要怎么实现。
sonic_yj 2007-02-10
jbpm有自己的用户模型,不过我感觉不适合我的需要,太简单了。其实认证并不存在,只是使用pooledactor这个东西。类里面都是我自己的用户分配方法

我对workflow用户分配方式分类如下,为了实现后面几个东西,而不用每次敲代码,就没法使用jbpm的东西了

1.静态分配,在流程设定的时候就通过指定用户,部门,角色的方式来指定,这种最简单,jbpm自己不写代码就能实现

2.根据运算指定,比如,上一步用户指定下一步用户,上一步条件影响下一步(比如报账,超过多少钱要xxx处理),流程相关性影响(比如要发起者确认)

3.还有排除处理者(xxx不能处理)

4.委托处理,超时自动处理(结合jbpm timmer可以做到)

5.会签,阈值问题(类似投票通过)
feedfly 2007-02-09
你说你用的用户模型是挂事件,是指在类里做用户的认证?
发表评论

您还没有登录,请登录后发表评论

sonic_yj
搜索本博客
我的相册
85ed4011-1a2d-452d-972d-a55ffe8191c1-thumb
又一个WC
共 8 张
最近加入圈子
存档
最新评论
评论排行榜