`
tomkoo
  • 浏览: 186065 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JBPM流程通过Aciton动态创建TaskInstance来实现“会签”

    博客分类:
  • JBPM
阅读更多
    昨天在Jbpm-inside群里面和大家讨论了在Jbpm流程中,如何实现“会签”的问题,最后得出了两种方案。今天就这两种思想中的一种:通过Aciton动态创建TaskInstance来实现“会签”,自己实现了一把,成功了!

     1. 创建processDefinition.xml流程定义文件,如下:

<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="webPay">
	<swimlane name="PooledActors">
		<assignment class="com.sky.plugin.jbpm.ActorHandel"></assignment>
	</swimlane>
	<start-state name="网上支付审批流程">
		<transition name="开始" to="财务人员录入"></transition>
	</start-state>
	<task-node name="财务人员录入">
		<task name="财务人员录入申报数据" swimlane="PooledActors"></task>
		<transition name="主管会计复核" to="主管会计复核"></transition>
	</task-node>
	<task-node name="主管会计复核" signal="last-wait" create-tasks="false">
		<task name="主管会计复核" swimlane="PooledActors"></task>
		<event type="node-enter">
			<action name="createInstance"
		class="com.sky.plugin.jbpm.CreateTaskInstance">
			</action>
		</event>
		<transition name="复核通过" to="领导审批"></transition>
		<transition name="复核不通过" to="异常结束"></transition>
	</task-node>
	<task-node name="领导审批">
		<task name="领导审批" swimlane="PooledActors"></task>
		<transition name="同意" to="结束"></transition>
		<transition name="不同意" to="异常结束"></transition>
	</task-node>
	<end-state name="结束"></end-state>
	<end-state name="异常结束"></end-state>
</process-definition>


task-node"主管会计复核"则是我们需要进行会签的节点。在这个节点我们设置了几个重要的属性:

    1) signal="last-wait",这个属性决定了该节点将在完成该节点内的所有Task的TaskInstance以后才会进入下一个节点。)

    2) create-tasks="false",这个属性决定了在进入该节点的时候,不会自动为该节点的任何Task创建任何的TaskInstance。因为我们需要根据会签的人员来自己创建TaskInstance。

    3) action,action的设定是为了,在Action中根据实际的情况来创建TaskInstance



    2. 编写Action代码

import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.graph.exe.Token;
import org.jbpm.graph.node.TaskNode;
import org.jbpm.taskmgmt.def.Task;
import org.jbpm.taskmgmt.exe.TaskMgmtInstance;

public class CreateTaskInstance implements ActionHandler {

	private static final long serialVersionUID = 1L;

	public void execute(ExecutionContext executionContext) throws Exception {
		Token token = executionContext.getToken();
		TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();

		TaskNode taskNode = (TaskNode) executionContext.getNode();
		Task task= taskNode.getTask("主管会计复核");
		tmi.createTaskInstance(task, token)
                      .setPooledActors(new String[]{"1000"});
		tmi.createTaskInstance(task, token)
                      .setPooledActors(new String[]{"1001"});

	}

}


当然,在实际情况中.setPooledActors(new String[]{"100"})中设置的actor应该是动态指定的,这里为了简单方便就直接写入的固定值。

    3.部署运行,OK!

    注意:如果在给TaskInstance指定Actor的时候是使用.setActor()方法的话,那么在获取用户任务列表的时候用.findTaskInstances();如果是用.setPooledActors(),则需要使用.findPolledTaskInstance()方法。[list][/list]
分享到:
评论
10 楼 lxhxklyy 2013-03-11  
楼主,求代码,新手,什么也不会啊,624479627@qq.com
9 楼 zwm 2007-08-26  
谢谢你们,希望继续写一些这方面的文章
8 楼 zwm 2007-08-26  
谢谢你们,希望继续写一些这方面的文章
7 楼 jamjar 2007-03-09  
太感谢了,正在做这个
6 楼 coolfish 2006-11-22  
写的不错!!其实JBPM对授权是很灵活的,我的理解是 在流程设计中将task指定给一堆人(pooled actors),但是任务的执行总是要具体人完成的,在这个角色的人进来以后,可以在task上setActor,这里我注意到jbpm默认的是将相关的swimlane的actor也设置为这个人,在流程中其他再遇到这个swimlane的时候,task的assign就直接将swimlane的复制过去,task的actor自然而然也是这个人了.当然我们也可以直接指定个人完成的任务.
5 楼 chenjin 2006-11-09  
这种方法似乎有问题, 我试了一下, 当多个人会签时,流程只是转向最后一个人决定的方向. 我现在也面临着会签的需求.
4 楼 tomkoo 2006-10-23  
mygol,现在研究JBPM的朋友很少,看来我们的项目都需要用到JBPM,在Blog上面留言,交流起来实在有点慢,让人感觉很不爽!可以留下你的MSN或者QQ吗?

我先留下我的:

MSN:love4yue4@hotmail.com
QQ: 12203151
3 楼 mygol 2006-10-20  
jbpm的test里面有个Wfp09DiscriminatorTest可以满足我的需求。但是对于已经完成的Task再想撤销,在node1后面再加个cancelnode吧。如果node2到达join那么取消node1分支令牌
2 楼 tomkoo 2006-10-18  
mygol,首先谢谢你的鼓励。由于请了婚假,所以现在才回复,见谅!

我现在也遇到跟你同样的问题:当流程已经流传到Node2了,但是Node2的Actors并没有对这个Node2的Tasks进行处理,这个时候,Node1的Actor却想撤销他已经完成的Task;但是如果Node2的Actor比较勤快,已经对Node2的Task处理了,这个时候Node1的Actor就没有办法撤销了。

我把这样的情况叫做“流程回收”,我现在已经有点一些思路,但是不很清晰,如果实现了我会贴出来,也希望发表你的看法!
1 楼 mygol 2006-10-11  
写得非常好。
我现在遇到一个问题:当请假人写好请假单后转到经理审合。在经理没审合之前请假人可以取消请假单。经理审合后不能取消请假单。我想用FORK-jion来做。当一个分支到达以后怎么样取消另一个分支。

相关推荐

    JBPM流程监控的实现过程

    本文将深入探讨如何通过手工编码方式在JBPM中实现流程监控,包括如何监控已发布流程的状态、流程实例的动态以及任务实例的执行情况。 #### 一、理解流程监控的核心需求 流程监控的核心目标在于实时掌握系统内流程...

    JBPM采购申请系统——08_JBPM流程节点.7z

    JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...

    JBPM 流程 监控 的实现

    4. **集成第三方监控工具**:可以将JBPM与像Prometheus、ELK Stack(Elasticsearch、Logstash、Kibana)等监控工具集成,通过这些工具的强大分析能力来实现对JBPM流程的性能监控和故障排查。 5. **扩展jbpm-console...

    jbpm4.3 会签的实现

    jbpm是一个开源的工作流管理框架,版本4.3提供了丰富的功能来支持复杂的企业流程,其中包括会签的实现。本文将深入探讨jbpm4.3如何实现会签功能,并分享相关的源码和工具使用。 1. jbpm4.3概述: jbpm4.3是jbpm的一...

    揭秘jbpm流程引擎内核设计思想及构架.doc

    jbpm流程引擎内核的设计思想和结构是jbpm流程引擎的核心部分,掌握了jbpm流程引擎内核的设计思想和结构,才能真正理解jbpm流程引擎的工作原理,并且能够更好地应用jbpm流程引擎来解决实际问题。 流程引擎内核的设计...

    JBPM流程引擎资料

    这些节点的处理方式,例如如何通过decision条件或表达式进行决策,如何实现并行分支,如何结束流程实例等,都是jBPM流程设计的关键知识点。 自动活动(Automatic Activities)是流程中无需人工干预的部分,文档对于...

    JBPM流程引擎设计 工作流资料

    JBPM流程引擎设计是IT领域中的一个重要知识点,尤其对于那些希望理解和实施企业级工作流管理系统的人员来说,它是不可或缺的。 1. **流程建模**:JBPM支持BPMN 2.0(Business Process Model and Notation)标准,这...

    jbpm流程设计器

    jbpm(Java Business Process Management)是一个开源的企业级工作流管理系统,它允许开发者通过定义业务流程来自动化企业的业务操作。jbpm流程设计器作为jbpm框架的重要组成部分,提供了一个直观的图形化界面,使得...

    jBPM4.4 会签,用custom实现(带加签、减签功能)

    在jBPM中,我们可以通过动态修改流程实例的结构来实现加签。例如,当一个特定条件满足时,我们的custom节点可以增加一个新的多实例任务,并将其分配给新添加的审批人。 减签则是在流程进行中,因为某些原因不再需要...

    揭秘jbpm流程引擎内核.pdf

    通过深入理解jbpm流程引擎的内核,开发者可以更好地利用其特性来构建高效、可维护的业务流程系统。这个教程“揭秘jbpm流程引擎内核.pdf”很可能是对jbpm核心机制的详细解析,包括引擎的内部结构、执行流程、任务调度...

    JBPM流程代码演示

    在JBPM中,通常会创建一个应用实例来启动和管理流程实例。它可能包含了启动流程、处理任务、完成任务等操作的逻辑。 2. **WorkFlowApplication.java**:这个文件可能是工作流应用的接口或抽象类,定义了与流程管理...

    jbpm流程监控的实现

    这可以通过jbpm提供的Rest API或者JMX接口来获取实时和历史的流程数据。数据可以包括:流程实例的数量、状态分布、平均执行时间、活动等待情况等。 5. **分析与优化**:监控数据可用于业务流程的分析。例如,如果...

    MyEclipse6.0下Jbpm流程设计器

    通过Jbpm设计器,开发者可以创建流程模型,包括开始节点、结束节点、用户任务、服务任务、 Exclusive Gateway(排他网关)、Inclusive Gateway(并行网关)以及Intermediate Catch Event(中间捕获事件)等。...

    JBPM4.4会签实例

    通过学习"CountersignDemo"这个实例,你可以深入了解JBPM4.4的会签实现,包括如何设计流程、创建自定义活动、编写工具类以及如何在实际应用中部署和使用。这将有助于提升你对业务流程管理的理解,使你能更好地为企业...

    jBPM4.4 会签(带加签、减签功能)

    在jbPM中实现加签,可以通过动态修改任务参与者的方式来达成。这通常需要编写自定义服务任务或者监听器,当满足特定条件时,动态插入新的参与者到任务实例中。 4. **减签功能** 减签则是在流程进行中,某些审批者...

    揭秘jbpm流程引擎内核设计思想及构架.docx

    jbpm流程引擎内核的设计思想和构架对于理解jbpm流程引擎的工作原理和实现机制非常重要,同时对于开发和应用jbpm流程引擎也具有重要的参考价值。 在jbpm流程引擎内核中,还有一些其他重要的技术和概念,例如: 1. ...

    jbpm流程设计器 + 生成对应xml文档 完美实现

    jbpm流程设计器 + 生成对应xml文档: 内部含有: jbpm控件 1: myflow2:插件原本内容 访问地址:http://localhost:8080/jbpmFlow1/myflow2/demo4.jsp 实现生成对应xml文档 并写有对xml文档读取存储到对象中,...

    jbpm流程自定义

    通过jbpm Designer,你可以拖放元素来构建流程,并且可以保存为XML格式的jbpm流程定义文件(.bpmn20.xml)。 3. **源码集成**: 标签提到“源码”,意味着我们将讨论jbpm如何与Java应用源码结合。jbpm的核心库可以...

    jbpm工作流(会签,串签)

    这通常通过序列流(Sequence Flow)来实现,每个任务完成后,流程才会流转到下一个任务。 查询已办和待办任务是流程参与者日常操作的重要部分。jbpm提供了任务查询服务,可以基于各种条件(如任务状态、任务负责人...

Global site tag (gtag.js) - Google Analytics