Jbpm笔记之三 -- 流程变量

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.junit.Before;
import org.junit.Test;


public class VariablesTest{
	/**
	 * 涉及到的表
	 * 		jbpm4_variable:存放流程变量
	 * 		当一个流程实例结束以后,关于流程实例的流程变量也被删除了
	 * 		该表也是一个临时表,临时才存放流程变量
	 * 
	 * jbpm4提供了流程变量持久化的保存方法
	 * 但是如果jbpm4的方法把流程变量持久化,那么就意味着所有的数据的数据结构写死了
	 * 如果将来需要比较复杂的查询统计,jbpm4本身的表根本满足不了需求
	 * 流程控制的表和数据结构的表是分开的
	 * 
	 * 
	 * 在整个流程控制产生的数据主要用于分析统计
	 */
	
	public static ProcessEngine processEngine;//定义流程引擎
	
	@Before
	public void testBase(){
		this.processEngine = Configuration.getProcessEngine();//获取工作流引擎
	}
	//设置变量
	@Test
	public void testStrartPI(){
		Map<String,String> var = new HashMap<String,String>();
		var.put("流程实例开始", "开始了");
		processEngine.getExecutionService()
		.startProcessInstanceById("qingjia-3",var);
	}
	
	@Test
	public void testWhenStartPI(){
		Person person = new Person();
		person.setId(1L);
		person.setName("呵呵");
		
		Map<String,Object> variables = new HashMap<String,Object>();
		variables.put("person",person);
		processEngine.getExecutionService()
		.startProcessInstanceById("qingjia-1", variables);
	}
	/**
	 * 完成任务
	 */
	@Test
	public void testWhenFinishTash(){
		Map<String,String> variables = new HashMap<String,String>();
		variables.put("请假天数", "2天");
		variables.put("请假原因", "呵呵");
		
		/*processEngine.getTaskService()
		.completeTask("110003");*/
		//processEngine.getTaskService().setVariables("140003", variables);//给当前节点设置流程变量  (在完成任务的时候设置流程变量)
		processEngine.getTaskService().completeTask("190001");
		
		
		/*在完成任务的使用同时设置流程变量
		 * processEngine.getTaskService().completeTask("110003", variables);这是jbpm内部的一个bug能编译过去,但是运行出错
		 * org.jbpm.api.JbpmException: No unnamed transitions were found for the task '申请请假'
			at org.jbpm.jpdl.internal.activity.TaskActivity.signal(TaskActivity.java:159)
			at org.jbpm.jpdl.internal.activity.TaskActivity.signal(TaskActivity.java:116)
			at org.jbpm.pvm.internal.model.op.Signal.perform(Signal.java:70)
			at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperationSync(ExecutionImpl.java:672)
			at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperation(ExecutionImpl.java:632)
			at org.jbpm.pvm.internal.model.ExecutionImpl.signal(ExecutionImpl.java:430)
			at org.jbpm.pvm.internal.model.ExecutionImpl.signal(ExecutionImpl.java:416)
			at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
			at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
			at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
			at java.lang.reflect.Method.invoke(Method.java:597)
			at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
			at org.jbpm.pvm.internal.model.ExecutionImpl_$$_javassist_5.signal(ExecutionImpl_$$_javassist_5.java)
			at org.jbpm.pvm.internal.task.TaskImpl.complete(TaskImpl.java:201)
			at org.jbpm.pvm.internal.cmd.CompleteTaskCmd.execute(CompleteTaskCmd.java:65)
			at org.jbpm.pvm.internal.cmd.CompleteTaskCmd.execute(CompleteTaskCmd.java:32)
			at org.jbpm.pvm.internal.cmd.CompositeCmd.execute(CompositeCmd.java:42)
			at org.jbpm.pvm.internal.cmd.CompositeCmd.execute(CompositeCmd.java:34)
			at org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
			at org.jbpm.pvm.internal.tx.StandardTransactionInterceptor.execute(StandardTransactionInterceptor.java:50)
			at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)
			at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
			at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:56)
			at org.jbpm.pvm.internal.svc.SkipInterceptor.execute(SkipInterceptor.java:43)
			at org.jbpm.pvm.internal.svc.TaskServiceImpl.completeTask(TaskServiceImpl.java:105)
			at org.jbpm.pvm.internal.svc.TaskServiceImpl.completeTask(TaskServiceImpl.java:92)
			at cn.itcast.jbpm.variables.VariablesTest.testWhenFinishTash(VariablesTest.java:43)
			at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
			at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
			at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
			at java.lang.reflect.Method.invoke(Method.java:597)
			at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
			at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
			at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
			at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
			at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
			at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
			at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
			at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
			at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
			at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
			at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
			at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
			at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
			at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
			at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
			at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
			at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
			at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
			at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
		 * */
		
	}
	
	/*查寻当前任务的流程变量
	 * 说明:历史服务只能根据流程实例去查询
	 */
	@Test
	public void showVariablesByTask(){
		
		Set<String> sets = processEngine.getTaskService()
		.getVariableNames("140003");
		System.out.println(sets.size());
		for(String s:sets){
			System.out.println(processEngine.getTaskService().getVariable("140003", s));
		}
	}
	/**
	 * 查询整个流程实例的变量
	 * 任务表中的ID
	 */
	@Test
	public void showVariablesByPI(){
		Set<String> sets = processEngine.getExecutionService()
		.getVariableNames("qingjia.140001");
		System.out.println(sets.size());
	}
	
	
	/**
	 * 在运行时设置流程变量
	 */
	
	@Test
	public void testWhenPI(){
		//参数为流程实例qingjia.140001
		processEngine.getExecutionService().setVariable("qingjia.140001", "哈哈", "哈哈");
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值