Camunda新手求助:如何在表达式中访问extensionElements?
Camunda中用表达式访问extensionElements的方法
作为Camunda新手,要像访问processInstanceId、formKey那样用表达式获取extensionElements,得先明确你要访问的是哪个BPMN元素的扩展属性(流程定义、用户任务、服务任务等),以下是具体实现方式:
1. 访问流程定义级的extensionElements
EL表达式写法
获取所有扩展元素:
${processDefinition.extensionElements.elements}
如果要筛选指定名称的camunda:Property(比如名称为customAppKey):
${processDefinition.extensionElements.elements.![value when name == 'customAppKey'][0]}
FEEL表达式写法
筛选指定名称的扩展属性:
processDefinition.extensionElements.elements -> filter(item, item.name == "customAppKey")[1].value
2. 访问当前用户任务的extensionElements
EL表达式写法
获取当前任务的所有扩展元素:
${task.extensionElements.elements}
筛选指定名称的任务扩展属性:
${task.extensionElements.elements.![value when name == 'taskPriority'][0]}
FEEL表达式写法
task.extensionElements.elements -> filter(item, item.name == "taskPriority")[1].value
3. 访问当前执行活动的extensionElements
如果是在执行监听器、服务任务等场景下,要获取当前活动(比如服务任务)的extensionElements:
EL表达式写法
${execution.currentActivity.extensionElements.elements}
同样可以筛选指定属性:
${execution.currentActivity.extensionElements.elements.![value when name == 'serviceConfig'][0]}
注意事项
- 如果你用的是自定义BPMN扩展元素(非
camunda:Property),需要通过元素的localName来筛选,比如获取自定义元素MyCustomExtension的config属性:${processDefinition.extensionElements.elements.![@config when localName == 'MyCustomExtension'][0]} - 表达式返回的是集合,
[0]或[1](FEEL中索引从1开始)用于取第一个匹配的元素,确保你的扩展元素名称唯一,避免取错值。
内容的提问来源于stack exchange,提问作者Amir133
相关产品推荐
相关产品推荐

