Jbpm笔记之三 -- 流程变量

来源:互联网 发布:知乎 健康果甲醛检测 编辑:程序博客网 时间:2024/05/18 13:04
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;//定义流程引擎@Beforepublic void testBase(){this.processEngine = Configuration.getProcessEngine();//获取工作流引擎}//设置变量@Testpublic void testStrartPI(){Map<String,String> var = new HashMap<String,String>();var.put("流程实例开始", "开始了");processEngine.getExecutionService().startProcessInstanceById("qingjia-3",var);}@Testpublic 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);}/** * 完成任务 */@Testpublic 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) * */}/*查寻当前任务的流程变量 * 说明:历史服务只能根据流程实例去查询 */@Testpublic 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 */@Testpublic void showVariablesByPI(){Set<String> sets = processEngine.getExecutionService().getVariableNames("qingjia.140001");System.out.println(sets.size());}/** * 在运行时设置流程变量 */@Testpublic void testWhenPI(){//参数为流程实例qingjia.140001processEngine.getExecutionService().setVariable("qingjia.140001", "哈哈", "哈哈");}}


0 0