本文共 3837 字,大约阅读时间需要 12 分钟。
jbpm中节点分为等待节点和自动执行节点:
等待节点:如state节点,等待节点会停
自动执行节点:如start和end节点,自动执行节点不会停
当一个节点只有一个输出时,会自动往下走,但是当一个节点有多个输出时,需要根据条件进行判断节点往哪个方向走。
流程定义:就是规则
流程实例:规则+数据
局部变量:用于定义流程相关数据。一个完整的流程需要数据的传递
下面讲解流程局部变量示例:
1、新建工具包类JbpmUtil,代码如下:
package com.cn.util;import org.jbpm.api.Configuration;import org.jbpm.api.ExecutionService;import org.jbpm.api.ProcessEngine;import org.jbpm.api.RepositoryService;/** * 工具包 * */public class JbpmUtil { private static ProcessEngine processEngine; //流程引擎对象 private static RepositoryService repositoryService; //流程定义管理类 private static ExecutionService executionService; //流程实例管理类 static{ processEngine=Configuration.getProcessEngine(); //通过Configuration获得流程引擎对象 repositoryService=processEngine.getRepositoryService(); executionService=processEngine.getExecutionService(); } //发布流程定义方法 public static void delopy(String path){ getRepositoryService().createDeployment().addResourceFromClasspath(path).deploy(); } public static ProcessEngine getProcessEngine(){ return processEngine; } public static ExecutionService getExecutionService() { return executionService; } public static RepositoryService getRepositoryService() { return repositoryService; }}
2、绘制流程图qingJia.jpdl.xml,该流程图一个节点有两个输出同意或否决,需要传递局部变量进行判断该审批节点该如何往下走
3、发布流程图,用工具类JbpmUtil进行发布
package com.cn.test;import com.cn.util.JbpmUtil;/** * 发布流程定义 * 流程定义processDefinition,流程定义是规则,规则就是没有数据的描述 * * */public class DeployProcessDefinition { public static void main(String[] args) { //发布流程定义 JbpmUtil.delopy("jpdl/qingJia.jpdl.xml"); }}4、启动流程实例
package com.cn.test;import org.jbpm.api.ExecutionService;import org.jbpm.api.ProcessEngine;import com.cn.util.JbpmUtil;/** * 启动流程实例 * */public class StartProcessInstance { public static void main(String[] args) { ExecutionService executionService=JbpmUtil.getExecutionService(); executionService.startProcessInstanceById("qingJia-1"); }}5、流程流转
package com.cn.test;import org.jbpm.api.ExecutionService;import org.jbpm.api.ProcessEngine;import com.cn.util.JbpmUtil;/** * 启动流程实例 * */public class StartProcessInstance { public static void main(String[] args) { ExecutionService executionService=JbpmUtil.getExecutionService(); executionService.signalExecutionById("qingJia.30001"); }}流程流转到老师审批节点,如
6、因为老师审批节点有两个走向,即同意和驳回。需要加入数据进行条件判断。如果请假天数小于3天则同意,如果请假天数大于3天则不同意。那么这个请假天数的数据如何
传入到流程中进行条件判断呢?这就需要流程局部变量将数据传递到流程中,代码如下:
package com.cn.test;import java.util.HashMap;import java.util.Map;import org.jbpm.api.ExecutionService;import org.jbpm.api.ProcessEngine;import com.cn.util.JbpmUtil;/** * 启动流程实例 * */public class StartProcessInstance { public static void main(String[] args) { ExecutionService executionService=JbpmUtil.getExecutionService(); Map运行完代码后,可以在jbpm4_variable中查看流程局部变量数据信息,如下:map=new HashMap (); map.put("stuName", "张三"); map.put("days", 3); map.put("reson", "生病"); executionService.signalExecutionById("qingJia.30001", map); }}
获取流程局部变量,进行条件判断。决定多个输出的跳转节点
package com.cn.test;import java.util.HashMap;import java.util.Map;import org.jbpm.api.ExecutionService;import org.jbpm.api.ProcessEngine;import com.cn.util.JbpmUtil;/** * 启动流程实例 * */public class StartProcessInstance { public static void main(String[] args) { ExecutionService executionService=JbpmUtil.getExecutionService(); Mapmap=new HashMap (); map.put("stuName", "张三"); map.put("days", 3); map.put("reson", "生病"); //executionService.signalExecutionById("qingJia.30001", map); //得到流程局部变量 String pid="qingJia.30001"; String stuName=(String) executionService.getVariable(pid, "stuName"); int days=(int) executionService.getVariable(pid, "days"); System.out.println(stuName+"请假天数为:"+days+"天"); String nodeName=""; //大于3天驳回,小于3天同意 if(days>=3){ nodeName="to 驳回"; }else{ nodeName="to 同意"; } executionService.signalExecutionById(pid, nodeName); }}