-
Notifications
You must be signed in to change notification settings - Fork 10
流程参数
songhongtu edited this page Jan 18, 2023
·
5 revisions
在实际用途中,不少流程都需要传参。
runflow支持在启动的时候传入一个初始参数的map,key为String 类型,value为Object类型。
Map<String,Object> map = new HashMap();
map.put("a", object1);
map.put("b", object2);
ExecutionEntityImpl leave = repositoryService.startWorkflow(key, map);
这个map对象可以被流程中的任意任务或者线上的el表达式访问。比如 java写法 object1.MethodA(object2),可以直接用el表达式${a.MehtodA(b)} 代替。
在任务或者线上写的el表达式如果有返回值,会被存在一个key 为当前节点id,value为返回值的map中。可以通过下列方式获取。
ExecutionEntityImpl leave = repositoryService.startWorkflow(key, map);
leave.getVariableInstances("节点1id");//访问节点1的返回值
leave.getVariableInstances("节点2id");//访问节点2的返回
因为节点id被用作返回值的key,因此在初始参数里面的map的key不能和节点id一致,否则报错。
获取返回值的方式也可以用在流程图中,如下图,流程执行顺序A-B-C-D-E,其中节点B的el可以获取到A的返回值,例如${a.add(节点A的id)}表示调用key为a的对象的add方法,其中入参是节点A的返回值。
- 注意:B节点获取不到C,D,E的返回值,因为还没执行。
- 因为A节点是一个线,并且不是一个出节点的线,因此不能输入el表达式,线C,E可以输入el表达式。上面的那样写是方便大家理解的例子。
如果是多上下文,在流程中获取其它节点的返回值就要注意了,因为执行的顺序是随机的(其实不是随机,是执行在bpmn文件中声明的第一条线,为了方便维护,就理解为随机),或者是多线程执行。 正确H,J,K,L的获取返回值的范围
- H-EBA
- J-JFCA
- K-GDA
- L-所有