规则验证问题-保存时有效,加载时无效

时间:2018-11-23 14:33:24

标签: rule-engine business-rules codeeffects

在测试未更改的CodeEffects asp.net核心演示应用程序(编辑器5.0.4.8,引擎5.0.2.6)时,我发现了一个有趣的问题。

如果我创建一个执行规则,例如检查FirstName是否包含两个空格,则可以毫无问题地保存该规则,并且在SaveRule操作中,它使用 editor.Rule.IsValid 通过验证。这是规则定义的示例:

        <if>
            <clause>
                <condition type="contains" stringComparison="OrdinalIgnoreCase">
                    <property name="FirstName" />
                    <value>  </value>
                </condition>
            </clause>
            <then>
                <method name="Register">
                    <value>aaaa</value>
                </method>
            </then>
        </if>

但是在刷新编辑器并尝试加载此保存的规则时,它将不会加载到编辑器中。原因是 LoadRule 控制器操作返回空json。

在进一步调查时,由于规则无效,因此 editor.GetClientRuleData 返回null。如果我在调用 editor.GetClientRuleData 之前检查 editor.Rule.IsValid ,我会看到它返回false,并且editor.Rule.InvalidElements保存一个元素:

{{c:"",h:"v120"}}

错误消息将为“唯一允许使用空字符串值的运算符为IS和IS NOT”,但由于预期不会发生,因此,它不会在演示项目的编辑器中显示。

不确定这是否与问题相关,但是 LoadRule SaveRule 操作之间的明显区别是规则的加载方式。

保存规则时,规则数据(来自UI)通过

加载到编辑器中
editor.LoadClientData(data.Data);

,并且在加载规则时,它是使用xml(从存储设备)加载的,有效地调用了此代码:

editor.Rule = Rule.Models.RuleModel.Create(ruleXml, typeof(Models.Patient))

所以我的问题是,为什么无效规则可以在保存时通过验证,然后同一规则在加载时无法通过验证?我可以尝试的任何修复方法或解决方法?

1 个答案:

答案 0 :(得分:0)

此问题已在最新版本的“规则编辑器”中修复。您需要从NuGet更新代码效果引用:

CodeEffects.Rule.Common-5.0.2.4,CodeEffects.Rule.Editor.Core-5.0.4.1(这是包含该修复程序的程序集),CodeEffects.Rule.Editor.Web.Core-5.0.4.8