昨天在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]
分享到:
相关推荐
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
JBPM流程监控的实现过程
JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料JBPM流程引擎设计 工作流资料
文档详细介绍了如何利用JBPM开发流程应用,从框架构造到节点处理。
JBPM流程代码演示
jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库
JBPM是JBOSS公司的一个开源工作流产品,它功能强大,商业工作流所提供的功能它基本上都有。然而在JBPM中没有提供流程监控的功能的相关API,这点让很多使用JBPM做企业应用的开发人员颇为头疼。
jbpm流程引擎框架源码,一套流行的流程引擎框架代码
jbpm流程监控的实现
jbpm流程
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
jbpm4.4流程图
eclipse3.4解压版带jbpm流程定义插件,很简单,只需解压即可使用
jbpm流程设计器 + 生成对应xml文档: 内部含有: jbpm控件 1: myflow2:插件原本内容 访问地址:http://localhost:8080/jbpmFlow1/myflow2/demo4.jsp 实现生成对应xml文档 并写有对xml文档读取存储到对象中,...
讲讲jbpm流程引擎内核.很好的教程,从别人那下的,贡献给大家!
会签源文件 博文链接:https://yy666.iteye.com/blog/660701
jbpm流程设计器,适用于jbpm工作流设计
揭秘jbpm流程引擎内核设计思想及构架.doc
jbpm工作流程jbpm工作流程jbpm工作流程jbpm工作流程jbpm工作流程
内含jbpm4.4的会签实例,使用customactivity实现,并且内含有使用的丰富工具类,有兴趣的朋友下载学习~