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