条件表达式
2024/6/10大约 2 分钟
条件表达式
提示
- 在执行互斥网关时候,抉择是执行哪个分支,可以通过条件表达式来判断
 
1、内置表达式类型
- 1、默认: 
default@@${flag == 5 && flag > 4} - 2、SpEL: 
spel@@#{@user.eval(#flag)} - 3、大于: 
gt@@flag|4 - 4、大于等于: 
ge@@flag|4 - 5、等于: 
eq@@flag|4 - 6、不等于: 
ne@@flag|4 - 7、小于: 
lt@@flag|4 - 8、小于等于: 
le@@flag|4 - 9、包含: 
like@@flag|4 - 10、不包含: 
notLike@@flag|4 - 11、自定义表达式
 
2、匹配规则
- 1、常规匹配规则:
xxx@@yyy|zzz,xxx为表达式类型,其中yyy为变量名,,最后的zzz为变量值。 

- 2、默认表达式:
default@@${flag == 5 && flag > 4},其中flag为变量名。 

- 3、Spring Expression Language(SpEL)表达式: 
spel@@#{@user.eval(#flag)}表达式,#flag为变量和以下方法入参命名一致,可不设置入参。 

@Component("user")
public class User {
    /**
     * spel条件表达:判断大于等4
     * @param flag 待判断的字符串
     * @return boolean
     */
    public boolean eval(String flag) {
        BigDecimal a = new BigDecimal(flag);
        BigDecimal b = new BigDecimal("4");
        return a.compareTo(b) > 0;
    }
}
/**
 * 新增OA 请假申请
 *
 * @param testLeave OA 请假申请
 * @return 结果
 */
@Override
public int insertTestLeave(TestLeave testLeave, String flowStatus)
{
    FlowParams flowParams = FlowParams.build().flowCode(getFlowType(testLeave));
    // 流程变量
    Map<String, Object> variable = new HashMap<>();
    variable.put("flag", String.valueOf(testLeave.getDay()));
    flowParams.variable(variable);
    Instance instance = insService.start(id, flowParams);
    return instance != null? 1 : 0;
}3、特别注意
3.1 默认表达式
字符串和long类型需要特别注意 ${createBy == 1357280988086013951L}: 流程变量里面也要传long类型,不然会报错。
@Test
    public void testCondition() {
        Map<String, Object> variable = new HashMap<>();
        variable.put("createBy", 1357280988086013951L);
        log.info("default条件表达式结果:{}", ExpressionUtil.evalCondition
                ("default@@${createBy == 1357280988086013951L}", variable));
    }
    
    o.d.w.f.ExpressionTest - [testCondition,65] - default条件表达式结果:true${createBy == '1357280988086013951'}: 如果右边的值是字符串,那需要用单引号包起来,否则会报错。
@Test
    public void testCondition() {
        Map<String, Object> variable = new HashMap<>();
        variable.put("createBy", "1357280988086013951");
        log.info("default条件表达式结果:{}", ExpressionUtil.evalCondition
                ("default@@${createBy == '1357280988086013951'}", variable));
    }
    
    o.d.w.f.ExpressionTest - [testCondition,65] - default条件表达式结果:true

