如果我的决策表中有 10 行,其中我只想执行第 6 行和第 4 行而不禁用剩余的行。 我们如何实现此功能? 但是,在操作规则中,我们可以设置优先级,但不能为决策表中的每一行设置优先级。 我尝试搜索决策表属性中可用的任何选项,但没有。请帮忙。
您可能需要实现这样的逻辑: 这是一个所谓的规则链。 一个规则(行(进行修改,然后激活另一个规则(行(,依此类推。
这需要 RETE 模式才能工作,请查看 RETE 的 ODM 文档,并记住在 BOM 设置中设置方法"SET NEXT"以更新 RETE。
此示例显示了基于NEXT初始值的不同选项的链接机制。
| 下一个? |条件 2|活跃 ? |行动一|设置下一页| | AA1 | BB1 | 真 |这样做1 | AA2 | | AA2 | BB2 | 真 |这样做2 | AA3 | | AA3 | BB3 | 真 |这样做3 | AA7 | | AA4 | BB4 | 假 |这样做4 | AA6 | | AA5 | BB5 | 真 |这样做5 | AA1 | | AA6 | BB6 | 假 |这样做6 | 三十 | | AA7 | BB7 | 真 |这样做7 | AA8 | | AA8 | BB8 | 真 |这样做8 | AA9 | | AA9 | BB9 | 真 |这样做9 | AA10 | | AA10 | BB10 | 真 |这样做10 | 三十 |
但这是最后的措施解决方案!
我不知道你的模型,条件等......突然,你可能想重新设计你的条件,因为在通常情况下,不需要在DT中选择优先级的规则,也就是说99.9%的时间!
但是,如果 DT 条件列作为分区都是独占的,则在 10 行中可能只有一个规则(行(同时匹配提供的数据。这样就无需命令规则执行。
但情况并非总是如此,有时DT中的某些规则(行(可能匹配,然后可能会对相同的数据执行几行,这是因为某些条件可能会重叠。
例如:让我们考虑这个DT,其中包含两个条件列和两个行(规则(和一个操作列。没有语言化,只有逻辑(
| <= 年龄>= |之后的日期 |动作| | 18,21 |07-五月-2020 |这样做 | | 16,20 |12-五月-2020 |这样做 |
在这种情况下,规则条件重叠,对于年龄 = 19 且日期 = 2020 年 6 月 12 日的数据,这两个规则(行(将匹配,并且将执行"执行此操作"和"执行该操作"。
如果DT的10条规则(行(在运行时与提供的数据匹配,则条件不够排他,您可能需要更改/返工DT条件的设计: 添加新的条件列,例如,以区分规则(行(。 或更正重叠条件
让我们以前面的示例为例,并添加新的区分条件列:例如 GENDER。
| <= 年龄>= |之后的日期 |性别 |动作| | 18,21 |07-五月-2020 | 米 |这样做 | | 16,20 |12-五月-2020 | F |这样做 |
在这种情况下,新列将允许一次只匹配一个规则。 或返工初始条件
| <= 年龄>= |之后的日期 |动作| | 18,21 |07-五月-2020 |这样做 | | 22 ,24 |12-五月-2020 |这样做 |
现在,即使第二个条件重叠,对于年龄 = 19 且日期 = 12-JUNE-2020 的数据,也只有第一个规则(行(匹配,并且将执行"执行此操作"。
我对你想按优先级排序的事实感到非常困惑。 优先级在某些特殊情况下可能会有所帮助(再次(,但如果它被到处使用(例如,规则中超过 5 个优先级(,它总是一个问题,并且维护起来会成为一场噩梦,因为优先级永远不会传达为什么一个规则应该在另一个规则之前应用。 相反,作为最佳实践,使用工作流对具有顺序任务规则流的 ruletask 中的规则进行分组,而规则任务名称传达分组/分离的语义。 例如初始化数据、数据检查、数据验证、数据转换等...
每当您需要对规则进行排序时,请在规则流中使用规则任务!然后,如果需要这样做,您可以将DT拆分为2个决策表,以便第一个表中的某些规则可以先于第二个决策表中的其他规则应用。