如何处理条件模板?

问题描述 投票:0回答:1

我们正在从 drools 版本 5.x 升级到 8.x 在尝试编译传统 DRT 语法时,基于条件的模板未按预期进行解析。 以下是场景。

template header
NOT_NULL_INDICATOR:Boolean
NULL_INDICATOR:Boolean

package xyz
import xyz

dialect 'mvel'
template "rule with all indicator false"
NOT_NULL_INDICATOR==false
NULL_INDICATOR==false
rule "Rule_@{RULE_GRP_ID}"
   agenda-group "@{RULE_GRP_ID}"
   auto-focus @{AUTO_FOCUS}
   lock-on-active true
   
when 
    xyz
then 
    xyz
    
template "rule with all indicator true"
NOT_NULL_INDICATOR==true
NULL_INDICATOR==true
rule "Rule_@{RULE_GRP_ID}"
   agenda-group "@{RULE_GRP_ID}"
   auto-focus @{AUTO_FOCUS}
   lock-on-active true
   
when 
    xyz
then 
    xyz

下面是生成DRL的java代码和输入Java对象。

    PRDataProvider prDataProvider = new PRDataProvider(ruleSet.getPRList());
    final DataProviderCompiler converter = new DataProviderCompiler();
    InputStream inputStream = InterchangeRuleExecutorImpl.class.getResourceAsStream(drt);
    String drl = converter.compile(prDataProvider, inputStream);
PR \[dataElement=XYZ, value=RDX, operation=EQUALS, ruleGrpId=500_28518_3722, autoFocus=true, mathOperationIndicator=false, feeCalculationPriority=0, fraud_fee=0.0, overridePriorityFlag=false, notNullIndicator=false, nullIndicator=false\]
PR \[dataElement=PQR, value=500, operation=EQUALS, ruleGrpId=500_28518_3724, autoFocus=false, mathOperationIndicator=false, feeCalculationPriority=0, fraud_fee=0.0, overridePriorityFlag=false, notNullIndicator=true, nullIndicator=true\]

我们在单个 DRT 文件中定义了多个模板,并且仅当满足给定模板的条件时才需要解析每个模板。预期的 DRL 是需要根据定义规则之前给出的条件输入(

NOT_NULL_INDICATOR
NULL_INDICATOR
)来解析模板。

目前,在 drools 升级之后,我们可以看到没有考虑该模板的条件,并且我们正在为每个 java 对象解析所有模板。

我该如何处理这种情况?

drools mvel
1个回答
-1
投票

DRT 已被弃用,并且功能一直很少。我建议使用像 Freemarker 这样的模板引擎,或者只是以编程方式生成规则。这样您就可以使用条件语句来决定是否生成规则。

© www.soinside.com 2019 - 2024. All rights reserved.