`
zybing
  • 浏览: 457309 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jBPM4.4:ForEach的使用--动态设置参与人数

阅读更多

流程确定的情况下,有时候完成一个步骤人数不确定,在任务发布的时候有领导确定参与完成的人员。

 

为了完成这样的情况,可以到了这一步,通过配置动态的生成一些subTask,通过subTask给每个人进行分派工作。

 

其实还可以通过jBPM4.4中的foreach的方式进行完成(注意:这个功能还在孵化器中)。

 

如:完成一个审核工作,有些工作需要2个人完成,有些工作需要3个人完成,在开启流程的时候,由生成流程的人员进行指定对应的工作人员。

 

拿jBPM4.4开发指南中的例子来解释:

<process name="ForEach" xmlns="http://jbpm.org/4.4/jpdl">

   <start g="28,61,48,48" name="start1">
      <transition to="foreach1"/>
   </start>

   <foreach var="department" in="#{departments}" g="111,60,48,48" name="foreach1">
      <transition to="Collect reports"/>
   </foreach>

   <task candidate-groups="#{department}" g="201,58,92,52" name="Collect reports">
      <transition to="join1"/>
   </task>

   <join g="343,59,48,48" multiplicity="#{quorum}" name="join1">
      <transition to="end1"/>
   </join>

   <end g="433,60,48,48" name="end1"/>

</process>

 

1. 启动流程后,到达foreach节点:

   <foreach var="department" in="#{departments}" g="111,60,48,48" name="foreach1">
      <transition to="Collect reports"/>
   </foreach>

 参数:

in:表示从外面传入的参数,foreach会读取这个参数,这个参数可以是string数组,也可以是通过逗号分隔的字符串

var:这个变量是foreach将in中的内容按照规则进行拆分,拆分的结果放在var定义的变量中,传递给下一步(每一步接收一个值)

 

进入到foreach,解析完这些参数,会根据join中的multiplicity参数的值,生成task(multiplicity定义为几,就生成几个Executiuon,几个task),这些Task的assignee都是空的

 

2. 进入到task

   <task candidate-groups="#{department}" g="201,58,92,52" name="Collect reports">
      <transition to="join1"/>
   </task>

进入到task,其实现在有多个task,是根据join中的multiplicity来确定的。

 

这些task任务安排的人员在candidate-groups(或者是candidate-users等)中定义。这个例子#{department},就是在foreach节点中,定义的var="department"中的变量名字;

 

这些任务不是直接分派到用户的,而是需要用户自己进行take的

(通过TaskService.createTaskQuery().candidate(userId).list 可以获得有哪些任务自己是候选者

   或者通过TaskService.findGroupTasks(userId)获取有哪些任务是自己加入的组需要完成的,

  或者在流程xml文件中,直接用assignee,分配给任务完成的人员

)。

 

3. foreach自动生成的这些Task都完成了,则流程进入到下一步;

   如果有部分人员完成,部分人员没有完成,还是可以查到foreach自动生成的所有Execution(通过processInstance.getExecutions()),不过根据任务完成的情况有不同的状态:

   如果任务已经完成,则在Task表中已经删除,得到的execution状态是:inactive-join

   没有完成的任务,在task中依旧存在,得到的execution状态是 active-concurrent

 

 

 

 

分享到:
评论
7 楼 tomcatmeng 2015-04-25  
请问候选用户是怎样task自己的任务,看网上说先根据任务id先把任务分给候选用户,但是taskid怎样获得的?processEngine.getTaskService().takeTask("任务id", "候选人");
6 楼 zybing 2012-07-12  
fatter 写道
yanghw6 写道
你好,请问一下,设置参与人员后启动,给相关人员发送任务,这时如果发现还有需要要新添加2个任务给其他的人,需要如何处理?

不知道动态去创建任务行不行?



动态任务指的是怎么样的动态任务?

在foreach中间增加动态任务,还是不使用foreach,完全就是自己创建的动态任务?

完全自己创建的动态任务,当然没问题,就是所有的流程都要自己控制, 稍显麻烦.

在foreach中间增加动态任务当然也是可以的,就是在收尾的地方,对于任务数量要控制一下, 修改一下multiplicity, 否则自己动态增加的任务不记录到系统控制的任务数量中去的
5 楼 fatter 2012-07-11  
yanghw6 写道
你好,请问一下,设置参与人员后启动,给相关人员发送任务,这时如果发现还有需要要新添加2个任务给其他的人,需要如何处理?

不知道动态去创建任务行不行?
4 楼 zybing 2011-08-27  
yanghw6 写道
你好,请问一下,设置参与人员后启动,给相关人员发送任务,这时如果发现还有需要要新添加2个任务给其他的人,需要如何处理?


可能有以下的方式:
1. 将这个任务回退,重新开始
   用这种方式,可能会造成有些人已经开始在做任务了,或者任务已经完成了;造成不必要的麻烦

2. 动态的增加任务:
   foreach是为每个要参与的人员分派一个任务,这样在执行过程中,如果要增加人员,则动态的增加任务,为要新参与该任务的人员动态添加此任务,同时修改multiplicity="#{quorum}" 的值


---------------------------------------------
以上方法只是通过概念提出的可能的方法,并未实践过。
3 楼 yanghw6 2011-08-26  
你好,请问一下,设置参与人员后启动,给相关人员发送任务,这时如果发现还有需要要新添加2个任务给其他的人,需要如何处理?
2 楼 zybing 2010-10-29  
回1楼:

我们来看上面实际的例子:
**************************
<foreach var="department" in="#{departments}" g="111,60,48,48" name="foreach1"> 
这句话的理解:
foreach中,产生一个变量department,这个变量带给后面的task;

departments:表示有多个组/部门:
department: 是departments中split出来的单个组/部门;


*****************************
再来看task:
<task candidate-groups="#{department}" g="201,58,92,52" name="Collect reports"> 
department:就是上面foreach中生成的变量;
这个变量表示一个组/部门,这个组/部门中的任何成员都可以完成这个task,谁来完成谁take这个任务。


***********************
再看结束点:
<join g="343,59,48,48" multiplicity="#{quorum}" name="join1"> 
multiplicity:这个是join完成的条件:
我们来看文档(http://docs.jboss.com/jbpm/v4/devguide/html_single/)中的说明:
2.3. Multiplicative split with foreach中:
引用
Important
When using foreach, the corresponding join must have the multiplicity attribute set. Without it, join continues execution based on its incoming transitions. In the preceding example, join has a single incoming transition. If multiplicity is not specified, the first execution that reaches the join activity will cause the parent execution to leave the join.


1 楼 zhang017 2010-10-21  
进入到foreach,解析完这些参数,会根据join中的multiplicity参数的值,生成task(multiplicity定义为几,就生成几个Executiuon,几个task)
---------------
不是这样,是根据departments中split出的department的个数来确定生成task的条数

相关推荐

    jbpm4.4帮助文档API--chm格式

    完美版JBPM4.4帮助文档,开发必备。

    jbpm-4.4\jbpm-4.4\doc\javadocs

    jbpm-4.4\jbpm-4.4\doc\javadocsjbpm-4.4\jbpm-4.4\doc\javadocsjbpm-4.4\jbpm-4.4\doc\javadocs

    jBPM4.4.rar_jbpm4.4_jbpm4.4 PDF

    《jBPM4.4开发指南》与《jBPM4.4中文用户手册》是深入理解jBPM4.4这一开源工作流管理系统的重要参考资料。jBPM,全称Java Business Process Management,是一个用于执行业务流程的轻量级、灵活的开源框架,它为业务...

    jBPM4.4开发指南

    - **添加 jPDL 4.4 Schema 校验**:用于校验流程定义文件的 xsd 文件路径为 JBPM_HOME/src/jpdl-4.4.xsd。 - 添加方法: 1. Window -&gt; Preferences 2. 选择 XML -&gt; XML Catalog 3. 点击 Add 4. 打开 Add XML ...

    jbpm-4.4.zip part03

    【jbpm-4.4.zip part03】这个压缩文件是关于jbpm 4.4版本的组成部分,jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了业务流程建模、部署、执行和监控的功能。jbpm 4.4是该系统的一...

    jbpm4.4下载地址

    jBPM 4.4的下载地址为:http://sourceforge.net/projects/jbpm/files/jBPM%204/jbpm-4.4/。在下载页面上,你可以找到不同的包,包括源代码、二进制文件和文档。选择适合你需求的包进行下载。安装过程通常涉及解压缩...

    jbpm4.4的安装myeclipse配置还有helloworld实例

    - **jBPM 4.4**: `jbpm-4.4.zip` - **Apache Ant**: `apache-ant-1.7.0.zip`,用于自动化构建过程。 - **Apache Tomcat**: `apache-tomcat-6.0.29.zip`,作为应用服务器。 - **MyEclipse 7.5**: `myeclipse-7.5.0-...

    jbpm4.4 动态设置参与人数

    ### jbpm4.4 动态设置参与人数 在企业级应用中,工作流管理是极为重要的组成部分之一。JBPM(JBoss Business Process Management)作为一款开源的工作流引擎,广泛应用于各种业务流程管理场景中。特别是在版本4.4中...

    JBPM4.4例子

    - **部署流程定义**: 使用jbpm-tools工具或API导入BPMN流程定义文件(.bpmn2)。 - **编写servlet**: 创建servlet来启动流程实例、查询任务列表、完成任务等。 - **设计jsp页面**: 设计用户交互界面,显示任务列表,...

    jbpm4.4 shh2 项目示例

    jbpm4.4 shh2 项目示例是基于jbpm4.4版本与SSH2(Struts2、Spring和Hibernate)集成的一个实战项目。jbPM(Business Process Management)是一款开源的工作流管理系统,用于实现业务流程自动化。SSH2是Java开发中的...

    JBPM4.4所需要的包.rar

    标题中的"JBPM4.4所需要的包.rar"表明这是一个与JBPM 4.4版本相关的压缩文件,包含了一些必要的库和组件。JBPM(Java Business Process Management)是一个开源的工作流和业务流程管理系统,用于设计、执行和管理...

    jBPM4.4开发实例

    通过这个入门实例,开发者可以学习到如何使用jBPM4.4进行流程设计、部署和执行的基本操作,并逐步掌握其在实际项目中的应用。在实践中不断探索和深入,才能更好地利用jBPM4.4实现业务流程自动化,提高工作效率。

    jbpm4.4 ibatis-spring 整合

    jbpm4.4 ibatis-spring 整合

    jbpm4.4文档+学习资料

    jbpm4.4是JBoss企业级业务流程管理(Business Process Management)平台的一个重要版本,它为开发者提供了全面的工作流和业务流程管理解决方案。本文将深入解析jbpm4.4的相关知识点,帮助那些寻找优质学习资源的朋友...

    jbpm4.4表字段说明

    JBPM4.4是JBoss Business Process Management (BPM)平台的一个特定版本,它提供了用于设计、执行和管理业务流程的工具和框架。...了解这些表的结构和字段对于有效地使用和维护基于JBPM4.4的系统至关重要。

    jbpm4.4中文开发指南

    6. **规则集成**: jbpm4.4可以与Drools规则引擎结合,实现业务规则在流程执行过程中的动态应用,提升决策的灵活性。 7. **监控和报表**: 提供了监控工具,允许管理员查看流程实例的状态、跟踪任务执行情况,并生成...

    jBPM4.4课程文档.doc

    - 在 Add Site 对话框中选择 Archive 并指定下载的 `jbpm-gpd-site.zip` 文件路径。 - 添加完成后,在 Install 对话框中选择 jPDL4 GPD Update Site。 - 点击 Next 和 Finish 后,同意许可协议并重启 Eclipse。 -...

    jbpm4.4-demo

    3. **jbpm核心库**:包括jbpm-runtime、jbpm-persistence、jbpm-human-task等,这些都是jbpm框架的核心依赖,负责流程的执行和管理。 4. **示例应用**:可能是一个简单的Web应用程序,使用Spring或其他框架集成jbpm...

Global site tag (gtag.js) - Google Analytics