- 浏览: 461965 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (233)
- 技术日志 (87)
- portal (7)
- jBPM/Activiti (34)
- Roller学习 (18)
- Java基础、网站开发 (19)
- 收藏URL (4)
- UML (3)
- linux操作 (7)
- 工作环境准备 (8)
- Mina (15)
- tomcat (8)
- Mylyn (3)
- sina网站 (2)
- 规则引擎 (3)
- 工作记录 (11)
- html(5) (9)
- 手机开发 (3)
- oracle (26)
- 常用的 (2)
- maven (8)
- hadoop (0)
- xml (7)
- 错误解决 (5)
- linux (1)
- c# (2)
- c++ (1)
- node.js (1)
- 银行业务知识 (1)
- Java调试 (0)
最新评论
-
tomcatmeng:
请问候选用户是怎样task自己的任务,看网上说先根据任务id先 ...
jBPM4.4:ForEach的使用--动态设置参与人数 -
maoweiwer:
友情提醒:如果是在MYSQL下创建数据库,则还需要更改\jbp ...
jBPM4.4: 创建数据库表 -
zybing:
ganjiang 写道有点疑惑,请lz指点,1.那个“depl ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤 -
zybing:
ganjiang 写道有点疑惑,请lz指点,1.那个“depl ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤 -
ganjiang:
有点疑惑,请lz指点,1.那个“deployId”不知是那个i ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤
流程确定的情况下,有时候完成一个步骤人数不确定,在任务发布的时候有领导确定参与完成的人员。
为了完成这样的情况,可以到了这一步,通过配置动态的生成一些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
评论
不知道动态去创建任务行不行?
动态任务指的是怎么样的动态任务?
在foreach中间增加动态任务,还是不使用foreach,完全就是自己创建的动态任务?
完全自己创建的动态任务,当然没问题,就是所有的流程都要自己控制, 稍显麻烦.
在foreach中间增加动态任务当然也是可以的,就是在收尾的地方,对于任务数量要控制一下, 修改一下multiplicity, 否则自己动态增加的任务不记录到系统控制的任务数量中去的
不知道动态去创建任务行不行?
可能有以下的方式:
1. 将这个任务回退,重新开始
用这种方式,可能会造成有些人已经开始在做任务了,或者任务已经完成了;造成不必要的麻烦
2. 动态的增加任务:
foreach是为每个要参与的人员分派一个任务,这样在执行过程中,如果要增加人员,则动态的增加任务,为要新参与该任务的人员动态添加此任务,同时修改multiplicity="#{quorum}" 的值
---------------------------------------------
以上方法只是通过概念提出的可能的方法,并未实践过。
我们来看上面实际的例子:
**************************
<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中:
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.
---------------
不是这样,是根据departments中split出的department的个数来确定生成task的条数
发表评论
-
jBPM4.4+SpringSecurity用户合并到自己体系中来
2011-12-30 10:53 3534jbPM4.4中的用户: 见:http://zybin ... -
从JBPM4以后的走向
2011-12-23 09:47 2125从JBPM4以后, 原来jBPM的设计师Tom Baeye ... -
jBPM4.4:查找任务完成过程
2011-08-29 11:50 2699在jBPM中,历史的任务,通过historyService可以 ... -
【jBPM】jbpm怎么获取下一个节点的任务定义,注意不是任务实例。
2011-08-27 06:19 3463http://jbpm.group.iteye.com/gro ... -
jBPM4:在Listen中使用Spring的Bean
2010-12-07 10:23 1925jBPM和Spring结合,在spring中配置了大量的Bea ... -
jBPM4:sub-process
2010-11-16 10:03 1856看了一下sub-process, ... -
jBPM4.4:配置(包括和Spring的整合,和Hibernate配置)
2010-11-08 14:50 5285jBPM4.4,获取ProcessEngine是通过Confi ... -
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤
2010-10-29 11:17 5889流程执行时,有时候需要看一下当前的工作卡在哪一步了,对于熟悉流 ... -
jBPM4:接在现有的系统上,需要更换用户体系
2010-10-08 17:59 2387在现有的应用上,接入jBPM,要修改的就是jBPM的用户体系。 ... -
jBPM4.4:动态创建连接
2010-09-02 18:23 2392参考了这篇文档的思路: http://man1900.ite ... -
jBPM4.4:完成任务的几种方法
2010-09-02 13:46 1810开始了一个Process,需要完成任务,完成任务有以下几种方法 ... -
jBPM4.4:ProcessFactory和ProcessDefinitionBuilder
2010-08-31 15:44 1609在文档中,有例子可以 ... -
jBPM4.4:在看开发指南之前总结一下
2010-08-31 10:08 2158jBPM4.4: 源头是Config ... -
jBPM4.4 -- 深入了解数据库结构、关系
2010-08-27 17:13 2931重新深入了解jBPM4.4的数据库表、以及之间的关系: ... -
jBPM4.4: 动态创建执行路径 -- 类似与会签等
2010-08-25 16:23 6502工作场景: 有一项任务需要完成,不同的部门领导根据实际情况,有 ... -
jBPM4.4:ProcessDefinition/ProcessInstance/Execution/Task关系和区别
2010-08-24 16:06 9974ProcessDefinition : 这 ... -
jBPM4.4:分配任务的几种方式
2010-08-24 11:19 3372在jBPM中,分配任务可以有几种方式: 按照分配对象,可以分 ... -
jBPM4.4:获取现有的流程
2010-08-19 16:50 1550通过repositoryService, 获取一个Proces ... -
jBPM4.4:创建一个流程的实例
2010-08-19 13:42 3053发布了流程后,创建一个实例,进行执行。 ProcessEng ... -
jBPM4.4:发布自己第一个流程
2010-08-19 11:41 2863开始自己着手尝试:先发布自己第一个流程: 用Eclip ...
相关推荐
本书将详细介绍jBPM 4.4的核心概念、架构设计以及如何使用它来开发高效的应用程序。 ##### 1.3 源代码和WIKI 本书提供了jBPM 4.4的源代码链接以及相关的WIKI文档地址,方便读者深入研究代码实现和技术背景。 #####...
### jBPM 4.4版本更新概览与关键特性 #### 一、jBPM 4.4发行说明及文档资源 jBPM(Java Business Process Model)是一款开源的工作流引擎,它允许用户设计、执行和管理业务流程。jBPM 4.4版本的发行说明提供了一...
《jBPM 4.4 开发指南》作为其官方文档的翻译版,为开发者提供了全面深入的jBPM 4.4版本使用指导,涵盖了从基础概念到高级应用的详尽内容。 ### 一、简介与目标读者 文档开篇明确了目标读者为有志于学习和应用jBPM ...
这一特性允许在流程中使用 foreach 循环来动态地创建多个实例,非常适合处理列表数据。 ##### 2.4 Java 活动 允许开发者直接在 Java 中编写业务逻辑,提高代码的可读性和维护性。 ##### 2.5 赋值 在流程中定义...
- **foreach实现动态分支**:描述了如何利用`foreach`循环来实现动态的流程分支。 - **java活动**:讨论了如何编写Java代码来实现自定义的活动逻辑。 - **assign**:介绍了如何在流程中分配任务给特定的参与者或角色...
jBPM的孵化器功能提供了定时器、group活动、foreach实现动态分支等高级特性,这些特性在复杂的业务流程中非常有用。 #### 事务和持久化 事务管理在工作流执行中起着至关重要的作用。jBPM提供了独立事务、JTA事务和...
### jBPM开发者指南知识点概览 #### 一、引言 - **目标读者**:本文档主要面向希望深入了解jBPM工作流引擎特性和功能的开发者。...- **流程转换工具**:介绍如何使用工具将jBPM 3的流程定义转换为jBPM 4兼容的格式。