DMN Use Service Task

在DMN中,可以通过Use Service Task来获取外部系统的数据。Use Service Task是一种可嵌入服务调用的任务类型,允许在规则流程中调用外部服务,包括Web服务、REST服务等。使用Use Service Task时,需要在DMN文件中定义任务的输入输出参数,然后在规则中调用该任务来获取外部系统的数据。

以下是使用Use Service Task获取外部系统数据的步骤:

  1. 定义任务的输入输出参数

在DMN文件中使用输入数据元素(InputData)和输出数据元素(OutputData)来定义任务的输入输出参数,例如:

 
<definitions id="definitions"
    xmlns="http://www.omg.org/spec/DMN/20191111/MODEL/"
    xmlns:dmndi="http://www.omg.org/spec/DMN/20191111/DMNDI/"
    xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
    xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
    xmlns:feel="http://www.omg.org/spec/DMN/20191111/FEEL/"
    xmlns:camunda="http://camunda.org/schema/1.0/dmn">
  <inputData id="input1" name="input1">
    <variable id="inputVar1" name="inputVar1" typeRef="string"/>
    <variable id="inputVar2" name="inputVar2" typeRef="double"/>
  </inputData>
  <outputData id="output1" name="output1">
    <variable id="outputVar1" name="outputVar1" typeRef="string"/>
    <variable id="outputVar2" name="outputVar2" typeRef="double"/>
  </outputData>
  ...
</definitions>

在上面的示例代码中,定义了一个名为“input1”的输入数据元素和一个名为“output1”的输出数据元素,它们分别有两个输入/输出变量(inputVar1、inputVar2和outputVar1、outputVar2)。

  1. 定义Use Service Task

在DMN文件中使用Camunda扩展元素(camunda:ServiceTask)来定义Use Service Task,并指定要调用的服务,例如:

 
<definitions id="definitions"
    xmlns="http://www.omg.org/spec/DMN/20191111/MODEL/"
    xmlns:dmndi="http://www.omg.org/spec/DMN/20191111/DMNDI/"
    xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/"
    xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/"
    xmlns:feel="http://www.omg.org/spec/DMN/20191111/FEEL/"
    xmlns:camunda="http://camunda.org/schema/1.0/dmn">
  ...
  <decision id="decision1" name="decision1">
    <inputDataRef>input1</inputDataRef>
    <outputDataRef>output1</outputDataRef>
    <decisionTable id="decisionTable1" hitPolicy="UNIQUE">
      ...
      <rule id="rule1">
        ...
        <outputEntry id="outputEntry">
          <extensionElements>
            <camunda:outputParameter name="outputVar1">${variables['outputVar1']}</camunda:outputParameter>
            <camunda:outputParameter name="outputVar2">${variables['outputVar2']}</camunda:outputParameter>
          </extensionElements>
        </outputEntry>
      </rule>
    </decisionTable>
  </decision>
  <camunda:serviceTask id="task1" name="task1" camunda:class="com.example.task1">
    <camunda:inputOutput>
      <camunda:inputParameter name="inputVar1">${variables['inputVar1']}</camunda:inputParameter>
      <camunda:inputParameter name="inputVar2">${variables['inputVar2']}</camunda:inputParameter>
      <camunda:outputParameter name="outputVar1">${variables['outputVar1']}</camunda:outputParameter>
      <camunda:outputParameter name="outputVar2">${variables['outputVar2']}</camunda:outputParameter>
    </camunda:inputOutput>
  </camunda:serviceTask>
  ...
</definitions>

在上面的示例代码中,定义了一个名为“task1”的Use Service Task,并指定了要调用的服务类(com.example.task1)。在任务的输入输出参数中,使用

posted @ 2023-06-03 23:37  justinzhang  阅读(23)  评论(0编辑  收藏  举报