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", "哈哈", "哈哈");
}
}
Jbpm笔记之三 -- 流程变量
最新推荐文章于 2018-05-04 16:41:35 发布