Service Task 服务任务

服务任务用于调用服务。在Camunda中,这是通过调用Java代码来完成的,或者为外部工作者提供的工作项来完成以异步或直接调用Web服务的形式实现逻辑。

调用Java Code.

有四种方式配置如何调用Java逻辑:

  • 指定实现Java委托或活动行为的类
  • 计算解析为委派对象的表达式
  • 调用方法表达式
  • 计算表达式

要指定在流程执行期间调用的类,所需的完全限定类名需要由camunda:class属性提供。

<serviceTask id="javaService"
             name="My Java Service Task"
             camunda:class="org.camunda.bpm.MyJavaDelegate" />

请参阅User Guide 中的 Java 委托类 章节,了解有关如何实现Java委托的详细信息。

还可以使用解析为对象的表达式。这个对象必须遵循使用与Camunda:Class属性时创建的对象相同的规则。

<serviceTask id="beanService"
             name="My Bean Service Task"
             camunda:delegateExpression="${myDelegateBean}" />

或调用方法或解析值的表达式。

<serviceTask id="expressionService"
             name="My Expression Service Task"
             camunda:expression="${myBean.doWork()}" />

有关表达式语言作为委派代码的详细信息,请参阅相应的 User Guidesection 章节。

也可以调用以Web服务形式实现的逻辑。 camunda:connector 是一个扩展,允许直接从工作流调用REST/SOAP API。 有关使用连接器的更多信息,请参阅相应的信息 User Guide 中的 section 章节。

通过 Java 委托类 & 参数注入

你可以轻松地编写通用Java委托类,该类可以通过BPMN 2稍后配置. 0 XML在服务任务中。请参考 User Guide 中的 参数注入 章节。

服务任务结果

服务执行的返回值(对于专门使用表达式的服务任务)可以通过将 camunda:resultVariable 指定为流程变量名来分配给已存在的或新流程变量。特定流程变量的任何现有值将被服务执行的结果值覆盖。未指定结果变量名时,忽略服务执行结果值。

<serviceTask id="aMethodExpressionServiceTask"
           camunda:expression="#{myService.doSomething()}"
           camunda:resultVariable="myVar" />

在上面的示例中,服务执行的结果 (返回值的 doSomething()对象上的方法调用 myService) 在服务执行完成后,将被设置为命名的流程变量 myVar

结果变量和多实例

请注意,当你使用时 camunda:resultVariable 在多实例构造中,例如在多实例子处理中,每次任务完成时都会覆盖结果变量,这可能显示为随机行为。看 camunda:resultVariable 有关详细信息。

外部任务

与调用Java代码相比,流程引擎同步调用Java逻辑,可以以外部任务的形式实现流程引擎边界之外的服务任务。当服务任务声明为外部时,流程引擎为工人提供工作项,该工人独立地研究了发动机以进行工作。这使得从流程引擎执行任务的实施,并允许跨系统和技术边界。查阅 外部任务的用户指南 了解相关概念和相关API的详细信息。

要声明要在外部处理的服务任务,属性 camunda:type 可以设置为 external 和属性 camunda:topic 指定外部任务的主题。例如,以下XML片段定义了具有主题的外部服务任务ShipmentProcessing:

<serviceTask id="anExternalServiceTask"
           camunda:type="external"
           camunda:topic="ShipmentProcessing" />

Camunda 扩展

属性 camunda:asyncBefore, camunda:asyncAfter, camunda:class, camunda:delegateExpression, camunda:exclusive, camunda:expression, camunda:jobPriority, camunda:resultVariable, camunda:topic, camunda:type, camunda:taskPriority
扩展元素 camunda:errorEventDefinition, camunda:failedJobRetryTimeCycle, camunda:field, camunda:connector, camunda:inputOutput
约束 One of the attributes camunda:class, camunda:delegateExpression, camunda:type or camunda:expression is mandatory
The attribute camunda:resultVariable can only be used in combination with the camunda:expression attribute
The camunda:exclusive attribute is only evaluated if the attribute camunda:asyncBefore or camunda:asyncAfter is set to true
The attribute camunda:topic can only be used when the camunda:type attribute is set to external.
The attribute camunda:taskPriority can only be used when the camunda:type attribute is set to external.
The element camunda:errorEventDefinition can only be used as a child of serviceTask when the camunda:type attribute is set to external.

相关资源

目录: