第 15 章 高级进程概念和任务
15.1. 在业务流程中调用 Decision Model 和 Notation(DMN)服务 复制链接链接已复制到粘贴板!
您可以使用 Decision Model 和 Notation(DMN)在 Business Central 中的决策要求图(DRD)中以图形化方式为决策服务建模,然后在 Business Central 中将 DMN 服务作为业务流程的一部分调用。业务流程通过识别 DMN 服务并在 DMN 输入和业务流程属性之间映射业务数据,与 DMN 服务交互。
如图所示,此流程使用了示例 TrainStation 项目,它定义了列车路由逻辑。这个示例项目包含以下数据对象和 DMN 组件,用于在用于路由决策逻辑的 Business Central 中设计:
Train 对象示例
图 15.1. Compute Rail DMN 模型示例
图 15.2. Rail DMN 决策表示例
图 15.3. tTrain DMN 数据类型示例
有关在 Business Central 中创建 DMN 模型的更多信息,请参阅使用 DMN 模型设计决策服务。
先决条件
- 所有所需的数据对象和 DMN 模型组件都在项目中定义。
流程
-
在 Business Central 中,前往 Menu
Design Projects 并点项目名称。 - 选择或创建您要在其中调用 DMN 服务的业务流程资产。
- 在流程设计器中,使用左边工具栏来照常拖放 BPMN 组件,以定义您的整个业务流程逻辑、连接、事件、任务或其他元素。
要在业务流程中整合 DMN 服务,请在左侧工具栏或启动节点选项中添加 业务规则 任务,并在流程流程中的相关位置插入任务。
在本例中,以下
Accept Train业务流程将 DMN 服务包含在Route To Rail节点中:图 15.4. 带有 DMN 服务的
Accept Train业务流程示例选择您要用于 DMN 服务的业务规则任务节点,单击进程设计器右上角的 Properties,然后在 Implementation/Execution 下定义以下字段:
-
规则语言: 选择
DMN。 -
命名空间 :从 DMN 模型文件中输入唯一的命名空间。示例
:https://www.drools.org/kie-dmn -
决策名称 :输入要在所选进程节点中调用的 DMN 决策节点的名称。示例:R
ail DMN 模型名称 :输入 DMN 模型名称。示例:
计算 Rail重要当您浏览 root 节点时,请确保 Namespace 和 DMN Model Name 字段包含与 DMN 图表相同的值。
-
规则语言: 选择
在 Data Assignments
Assignments 下,点 Edit 图标并添加 DMN 输入和输出数据,以定义 DMN 服务与进程数据之间的映射。 对于本例中的
Route To RailDMN 服务节点,您可以为Train添加与 DMN 模型中输入节点对应的输入分配,并为Rail添加与 DMN 模型中决策节点对应的输出分配。Data Type 必须与您在 DMN 模型中为该节点设置的类型匹配,Source 和 Target 定义是指定对象的相关变量或字段。图 15.5.
Route To RailDMN 服务节点的输入和输出映射示例- 点 Save 保存数据输入和输出数据。
根据您希望如何处理完成的 DMN 服务,定义您的业务流程的其余部分。
在本例中,Properties
Implementation/Execution On Exit Action 值被设置为以下代码,以在 Route To RailDMN 服务完成后存储 rail 号:On Exit Action的代码示例train.setRailNumber(rail);
train.setRailNumber(rail);Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果无法计算 rail 编号,则进程会达到
一个没有正确的 Rail错误节点,该节点定义了以下条件表达式:图 15.6.
无适当的 Rail最终错误节点状况示例如果计算了 rail 编号,则进程到达
Accept Train脚本任务,该任务使用以下条件表达式定义:图 15.7.
Accept Train脚本任务节点的条件示例Accept Train脚本任务还使用 PropertiesImplementation/Execution Script 中的以下脚本打印有关列路由和当前 rail 的消息: com.myspace.trainstation.Train t = (com.myspace.trainstation.Train) kcontext.getVariable("train"); System.out.println("Train from: " + t.getDepartureStation() + ", to: " + t.getDestinationStation() + ", is on rail: " + t.getRailNumber());com.myspace.trainstation.Train t = (com.myspace.trainstation.Train) kcontext.getVariable("train"); System.out.println("Train from: " + t.getDepartureStation() + ", to: " + t.getDestinationStation() + ", is on rail: " + t.getRailNumber());Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用融合的 DMN 服务定义业务流程后,将您的流程保存到流程设计器中,部署项目,然后运行对应的进程定义来调用 DMN 服务。
在本例中,当您部署 TrainStation 项目并运行对应的进程定义时,打开
Accept Train进程定义的进程实例表单,并设置departure station和destination station字段来测试执行:图 15.8.
Accept Train进程定义的进程实例表单示例执行完进程后,会在服务器日志中显示含有您指定的列车路由的消息:
Accept Train进程的服务器日志输出示例Train from: Zagreb, to: Belgrade, is on rail: 1
Train from: Zagreb, to: Belgrade, is on rail: 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow