jbpm(4)---流程局部变量

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);
		
		
	}
}


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值