JBPM4入门——8.等候节点的分支执行
JBPM4入门——8.等待节点的分支执行
本博文只是简要对JBPM4进行介绍,如需更详细内容请自行google
链接:
JBPM4入门——1.jbpm简要介绍
JBPM4入门——2.在eclipse中安装绘制jbpm流程图的插件
JBPM4入门——3.JBPM4开发环境的搭建
JBPM4入门——4.封装流程管理的工具类(JbpmUtil)
JBPM4入门——5.流程定义的发布、查询、删除
JBPM4入门——6.流程实例的创建和执行
JBPM4入门——7.等待节点的单条线手动执行
JBPM4入门——8.等待节点的分支执行
JBPM4入门——9.自动节点单线执行
先发布流程定义------>然后创建流程实例------>然后执行流程实例
以下是跟以前一样的执行方法。直接根据表中的ID来执行。
package com.test.test; import java.util.Iterator; import java.util.List; import org.jbpm.api.ProcessDefinition; import org.jbpm.api.ProcessDefinitionQuery; import org.jbpm.api.ProcessInstance; import com.test.util.JbpmUtil; public class Test { /** * 中间部分代码省略。。。。。。。。 * @param processInstanceId * @return */ public static void main(String[] args) { Test test = new Test(); // test.deploy("simple.jpdl.xml");//流程定义的发布 // test.createInstance("simple");//创建流程实例 test.execute("simple.240007");//执行流程实例 } }
但是以上的执行结果不会变。还会停留在当前的等待节点上。
分支情况下:如果还是根据ID来执行的话。结果不会变、还停留在之前的那个等待节点上:意思就是
当state1如果直接根据ID来执行的话(下图)ACTIVITYNAME的值还会停留在state1这个等待节点上。因为没给它具体指定走哪条线。它不会执行。
如果是JBPM 3版本的话 它会随机找一条线来执行。
如果想让它按照自己的意图来执行的话:随意的让它执行某一条线的话、需要根据这些transitionName来操作、也就是 to state2 to state3 这些名字来操作
操作思路为:在原来的执行流程实例的方法中。加一个参数:String transitionName 表示是通过线条名字来执行下一个流程节点
代码如下:
package com.test.test; import java.util.Iterator; import java.util.List; import org.jbpm.api.ProcessDefinition; import org.jbpm.api.ProcessDefinitionQuery; import org.jbpm.api.ProcessInstance; import com.test.util.JbpmUtil; public class Test { /** * 执行流程实例:通过transition 指向的路径根据名字执行(to state1 to state2 to end1......) * @param processInstanceId * @return */ public ProcessInstance execute(String processInstanceId,String transitionName){ return JbpmUtil.getExecutionService().signalExecutionById(processInstanceId,transitionName); } public static void main(String[] args) { Test test = new Test(); // test.deploy("simple.jpdl.xml");//流程定义的发布 // test.createInstance("simple");//创建流程实例 // test.execute("simple.240007");//执行流程实例 test.execute("simple.240007","to state3");//执行流程实例 } }
再查看数据库的话已经到state3这个节点了: