在使用表达式的时候要避免保留字,这个可以在起变量名的时候跟自己的项目名来规避
image.png image.png
1.启动流程实例带参数
我们需要新构建一个流程图:
image.png
image.png
然后就是需要部署这个bpmn文件了,这个就不详细提了
下面是创建流程实例的代码,因为带参数,所以创建流程实例的方法多了一个传参的变量,是个Map类型,我们就传入person的key,值为wang
注意:如果流程中有很多的变量,这里也可以加入很多值
@Test
public void initProcessInstanceWithArgs(){
//流程变量 ${person}
Map<String,Object> variables = new HashMap<>();
variables.put("person","wang");
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey("Process_UEL_V1","b-key001",variables);
System.out.print("流程实例id:"+processInstance.getProcessInstanceId());
}
然后我们查看任务就会发现,多了一个新的任务:
image.png
2.完成任务带参数,指定流程变量
下面我们再创建一个流程,这个流程多了一个网关,我们还是像之前一样把王二,张三,李四的受让人都填写好他的拼音作为id,然后记住整个流程的key,然后再网关中的变量UEL都写好,然后保存好,发布流程,然后创建流程实例我们就不加参数,在之后我们在使用参数完成任务来使用一下带参数的完成任务方法:
image.png
image.png
在部署好BPMN之后,创建实例,然后查询wanger的任务,发现有了一条:
image.png
然后记录好王二的taskid,然后传入参数pay 是101,这样理论上审核人应该是李四,下面我们使用完成任务:
// 完成任务带参数,指定流程变量
@Test
public void completeTaskWithArgs(){
//流程变量 ${pay}
Map<String,Object> variables = new HashMap<>();
variables.put("pay","101");
taskService.complete("9fba4d13-8a52-11eb-8e18-acde48001122",variables);
System.out.println("执行完成任务");
}
然后我们查看李四的任务:
image.png
确实是有一条的,然后查看张三,是没有数据的:
image.png
3.完成任务带参数,使用实体类
我们需要创建一个新的流程:
image.png
image.png
image.png
我们创建一个类
image.png
// 完成任务带参数,使用实体类
@Test
public void completeTaskWithClassArgs(){
UELInfo uelInfo = new UELInfo();
uelInfo.setName("zhangyajuan");
//流程变量 ${person}
Map<String,Object> variables = new HashMap<>();
variables.put("uelinfo",uelInfo);
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey("UEL3","b-key001",variables);
System.out.print("流程实例id:"+processInstance.getProcessInstanceId());
}
完成任务带参数,指定多个候选人
image.png
在执行完之后,我们会发现查询任务的时候,Assingnee是null,为什么呢,因为虽然指定了很多人,但是任务还没有拾取,所以这里是null。
image.png
网友评论