You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BPMN的ServiceTask中通过DataObject配置SkipExpression实现任务跳过?

实现方案:通过SkipExpression检查DataObject变量跳过ServiceTask

完全可以在BPMN内部实现这个需求,只需要给REFRESH_TASK的skipExpression配置正确的EL表达式即可,结合你提供的示例,具体实现如下:

核心表达式配置

将serviceTask的skipExpression替换为:

skipExpression="${optionalInputList.contains('input1')}"

逻辑说明

  • 你已经正确配置了_ACTIVITI_SKIP_EXPRESSION_ENABLED为true,这是启用跳过表达式的必要前提,Flowable会识别这个全局变量开启跳过逻辑。
  • optionalInputList作为DataObject,其配置的JSON数组值会被Flowable自动解析为Java的List<String>对象,因此可以直接调用contains()方法判断目标元素是否存在。
  • 当表达式返回true(即input1存在于optionalInputList中)时,REFRESH_TASK会被直接跳过,不会执行绑定的com.delegates.customDelegate代理类。

修改后的完整ServiceTask代码

<serviceTask id="REFRESH_TASK" name="REFRESH_TASK" flowable:async="true" skipExpression="${optionalInputList.contains('input1')}" flowable:triggerable="true" flowable:class="com.delegates.customDelegate">
   <extensionElements>
      <flowable:field name="inputData">
         <flowable:string>["input1"]</flowable:string>
      </flowable:field>
      <flowable:field name="outputDataConfig">
         <flowable:string>["output1"]</flowable:string>
      </flowable:field>
   </extensionElements>
</serviceTask>

动态场景扩展(可选)

如果后续需要从inputData字段动态获取要检查的元素(而非固定写死input1),可以调整表达式为:

skipExpression="${optionalInputList.contains(inputData.get(0))}"

这里的inputData会被解析为List对象,通过get(0)取出第一个元素进行存在性判断。

内容的提问来源于stack exchange,提问作者Jim Moriarty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:11:00