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<String,Object> map=new HashMap<String,Object>();
map.put("stuName", "张三");
map.put("days", 3);
map.put("reson", "生病");
executionService.signalExecutionById("qingJia.30001", map);
}
}
运行完代码后,可以在jbpm4_variable中查看流程局部变量数据信息,如下:
获取流程局部变量,进行条件判断。决定多个输出的跳转节点
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<String,Object> map=new HashMap<String,Object>();
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);
}
}