You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drools 3升级至7.69:多条件When子句语法错误修复咨询

Drools 3升级到7.69版本的DRL规则修改方案

问题根源

Drools 7.x对DRL语法的校验更严格,原VMS_TRANSLATION规则的写法存在两个核心问题:

  1. 错误地将多个Message条件用||直接拼接,新版本会把这种写法解析为匹配多个不同的Message对象,既不符合实际业务逻辑(原本是要匹配同一个Message对象满足任意一组条件),也触发了语法解析错误。
  2. 旧版本中用逗号连接约束条件的写法,在新版本里容易引发语法歧义,不符合规范的语法结构。

修改方案

把所有(product, subtask)的组合条件整合到同一个Message约束中:

  • 每组(product, subtask)条件内部用&&显式表示逻辑与(替代旧版本的逗号,避免歧义)
  • 不同组条件之间用||表示逻辑或
  • 确保整个条件针对同一个Message对象进行匹配,去掉重复的Message关键字

修改后的完整DRL代码

package rules.event   
dialect "java"                                                     

rule "TASK_ARC_CIFF01_XMIT01_EXCEPTION_1000"                                  
when                                                                  
    message : Message( product == "ARC" && subtask == "MOVE01" )
then                                                                  
    exception.evaluate("1000", message);                           
    mq.notify(exception, message);
end                                    

                                                                        
//VMS message translation rules

rule "VMS_TRANSLATION"                                         
when  
    message : Message( 
        (product == "ISIXSR" && subtask == "BLDPZ1") ||
        (product == "ISIXSR" && subtask == "ECPLD2") ||
        (product == "ISIXSL" && subtask == "FILMV1") ||
        (product == "ISIXSL" && subtask == "MOVE01") ||
        (product == "ISIXRL" && subtask == "MOVE01") ||
        (product == "ISIXRR" && subtask == "MOVE01") ||
        (product == "ISIXER" && subtask == "VALID2") ||
        (product == "ISIXRR" && subtask == "XRFMV1") 
    )
then                                                                  
    vmstr.notify(message);                           
end

内容的提问来源于stack exchange,提问作者Bavani S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:33:14