快速业务通道

使用jBpm支持高级用户交互模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
有以下几种可能方法:

在任务外解决:需要大量时间的任务并行循环(parallel looping) 。

使用动作处理器(Action handler):附加到任务节点的进入事件(enter event),基于流程实例变量创建多个节点实例。

在任务内解决:引入“任务接受量(task take)”(类似jPDL 4)并允许某 个任务实例可被接受多次。

根据jBPM最佳实践 ——“扩展jBPM API而不是去搞复杂的流程建模” ,我决 定采用任务内解决的方法。这就要求修改jBPM提供的任务和任务实例类。

使用jBpm支持高级用户交互模式(2)

时间:2011-07-08 infoq 译:胡键

扩展Task类

jBPM任务的定义被包含在org.jbpm.taskmgmt.def.Task类中。为了支持四眼原 则,我们需要给类增加以下的字段/方法(清单1):

protected int numSignatures = 1;   public int getNumSignatures(){    return numSignatures;   }   public void setNumSignatures(int numSignatures){    this.numSignatures = numSignatures;   }

清单1 给Task类增加字段和方法

这个新的参数允许指定任务完成所需的任务处理人数量。缺省值为1,这意味 着,只有1个用户应该/可以处理这个任务。

jBPM使用Hibernate来向数据库保存和读取数据。为了让我们新加的变量持久 化,我们需要更新Task类的Hibernate配置文件(Task.hbm.xml),它在 org.jbpm.taskmgmt.def文件夹中,增加代码如下(清单2)

<property name="numSignatures"  column="NUMSIGNATURES_" />

清单2 在Task映射文件中指定新增域

为了让我们新加的属性能被流程定义和数据库正确读取,我们需要修改 org.jbpm.jpdl.xml.JpdlXmlReader类以正确地读取我们的新属性(清单3)

String numSignatureText = taskElement.attributeValue ("numSignatures"); if (numSignatureText != null) {    try{     task.setNumSignatures(Integer.parseInt(numSignatureText));    }    catch(Exception e){} }

清单3 读取numSignature属性

最后,因为JpdlXmlReader根据模式来验证XML,因此我们需要在jpdl-3.2.xsd 中增加一个属性定义(清单4):

<xs:element name="task">   ………………….     <xs:attribute name="numSignatures"  type="xs:string" />

清单4 在jpdl-3.2.xsd中增加numSignatures属性

当完成这些工作,任务定义就被扩展可以使用numSignatures属性(清单5):

<task name="task2" numSignatures = "2">   <assignment pooled-actors="Peter, John"></assignment>   </task>

清单5 给任务定义增加numSignatures属性

使用jBpm支持高级用户交互模式(3)

时间:2011-07-08 infoq 译:胡键

扩展TaskInstance类

在扩展完任务类后,我们还需要创建一个自定义的任务实例类来跟踪分配给该 任务实例的参与者,并确保所有被分配的参与者完成类执行(清单6)。

package com.navteq.jbpm.extensions; import java.util.Date; import java.util.LinkedList; import java.util.List; import org.jbpm.JbpmException; import org.jbpm.taskmgmt.exe.TaskInstance; public class AssignableTaskInstance extends TaskInstance  {   private static final long serialVersionUID = 1L;   private List<Assignee> assignees = new  LinkedList<Assignee>();   private String getAssigneeIDs(){   StringBuffer sb

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号