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

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

Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="webPay">  
  3.     <swimlane name="PooledActors">  
  4.         <assignment class="com.sky.plugin.jbpm.ActorHandel"></assignment>  
  5.     </swimlane>  
  6.     <start-state name="网上支付审批流程">  
  7.         <transition name="开始" to="财务人员录入"></transition>  
  8.     </start-state>  
  9.     <task-node name="财务人员录入">  
  10.         <task name="财务人员录入申报数据" swimlane="PooledActors"></task>  
  11.         <transition name="主管会计复核" to="主管会计复核"></transition>  
  12.     </task-node>  
  13.     <task-node name="主管会计复核" signal="last-wait" create-tasks="false">  
  14.         <task name="主管会计复核" swimlane="PooledActors"></task>  
  15.         <event type="node-enter">  
  16.             <action name="createInstance"  
  17.         class="com.sky.plugin.jbpm.CreateTaskInstance">  
  18.             </action>  
  19.         </event>  
  20.         <transition name="复核通过" to="领导审批"></transition>  
  21.         <transition name="复核不通过" to="异常结束"></transition>  
  22.     </task-node>  
  23.     <task-node name="领导审批">  
  24.         <task name="领导审批" swimlane="PooledActors"></task>  
  25.         <transition name="同意" to="结束"></transition>  
  26.         <transition name="不同意" to="异常结束"></transition>  
  27.     </task-node>  
  28.     <end-state name="结束"></end-state>  
  29.     <end-state name="异常结束"></end-state>  
  30. </process-definition>  
<?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代码

Java代码 复制代码
  1. import org.jbpm.graph.def.ActionHandler;  
  2. import org.jbpm.graph.exe.ExecutionContext;  
  3. import org.jbpm.graph.exe.Token;  
  4. import org.jbpm.graph.node.TaskNode;  
  5. import org.jbpm.taskmgmt.def.Task;  
  6. import org.jbpm.taskmgmt.exe.TaskMgmtInstance;  
  7.   
  8. public class CreateTaskInstance implements ActionHandler {  
  9.   
  10.     private static final long serialVersionUID = 1L;  
  11.   
  12.     public void execute(ExecutionContext executionContext) throws Exception {  
  13.         Token token = executionContext.getToken();  
  14.         TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();  
  15.   
  16.         TaskNode taskNode = (TaskNode) executionContext.getNode();  
  17.         Task task= taskNode.getTask("主管会计复核");  
  18.         tmi.createTaskInstance(task, token)  
  19.                       .setPooledActors(new String[]{"1000"});  
  20.         tmi.createTaskInstance(task, token)  
  21.                       .setPooledActors(new String[]{"1001"});  
  22.   
  23.     }  
  24.   
  25. }  
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 ()方法。 
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、5资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值