Skip to content

流程参数

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的返回值。 image

  • 注意:B节点获取不到C,D,E的返回值,因为还没执行。
  • 因为A节点是一个线,并且不是一个出节点的线,因此不能输入el表达式,线C,E可以输入el表达式。上面的那样写是方便大家理解的例子。

多上下文

如果是多上下文,在流程中获取其它节点的返回值就要注意了,因为执行的顺序是随机的(其实不是随机,是执行在bpmn文件中声明的第一条线,为了方便维护,就理解为随机),或者是多线程执行。 image 正确H,J,K,L的获取返回值的范围

  • H-EBA
  • J-JFCA
  • K-GDA
  • L-所有
Clone this wiki locally