jBPM 7环境下DMN决策表执行日期比较报错问题咨询
报错根因说明
- 你遇到的
Skipped Decision Table Analysis类提示,是jBPM 7内置决策表的间隙/重叠自动校验功能的固有局限:该功能仅支持对和固定常量做比较的一元测试表达式做逻辑覆盖校验,你写的> date("2005-01-01")属于和固定日期常量比较,符合校验要求,因此可以正常运行。 - 当你尝试写两个动态日期字段(
onboarding和currentDate)的比较逻辑时,校验逻辑无法提前预判两个动态变量的取值范围,无法完成间隙/重叠分析,因此会抛出该提示。注意:这个提示本身仅代表自动校验功能跳过,不会阻断规则的实际执行,你运行失败是因为表达式写法不符合jBPM决策表的规范。
两个日期字段比较的正确实现方式
jBPM 7决策表不支持在绑定了单字段的输入列条件中,直接引用同对象的其他字段,你可以选以下任意一种方案调整:
- 方案1:取消输入列的字段绑定,直接在条件单元格写全量规则表达式:输入列不绑定
onboarding字段,直接在条件单元格写$p:Profile(onboarding > currentDate)即可,跳过单字段绑定逻辑就不会触发校验提示,规则可正常执行。 - 方案2:将对比字段提前放入工作内存:如果要保留输入列对
onboarding字段的绑定,你需要先把currentDate单独插入到规则工作内存中,条件单元格直接写> currentDate即可正常生效。 - 方案3:关闭间隙/重叠分析:你可以在决策表的配置项中直接关闭「间隙/重叠分析」开关,关闭后即使写变量对比逻辑,也不会再抛出该提示。
注意:如果日期比较时出现类型不匹配报错,可以把两个日期都转成毫秒时间戳再比较,写法为
onboarding.getTime() > currentDate.getTime()。
内容的提问来源于stack exchange,提问作者user1428716
相关产品推荐
相关产品推荐

