【问题标题】:Problem with rule validation - valid on save, invalid on load规则验证问题 - 保存时有效,加载时无效
【发布时间】:2019-04-26 04:15:56
【问题描述】:

在测试未更改的 CodeEffects asp.net 核心演示应用程序(Editor 5.0.4.8,Engine 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”,但当然它不会显示在演示项目的编辑器中,因为这不会发生。

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

保存规则时,规则数据(来自 UI)被加载到编辑器中

editor.LoadClientData(data.Data);

并且在加载规则时,它是使用 xml(来自存储)加载的,有效地调用了这个:

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

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

【问题讨论】:

  • 谢谢。我们正在检查这个问题。

标签: rule-engine business-rules codeeffects


【解决方案1】:

此问题已在最新版本的规则编辑器中得到修复。您需要从 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

【讨论】:

  • 我已经检查过了,我已经有了这个版本,没有什么可以从 NuGet 更新。 CodeEffects.Rule.Editor.Web.Core - 5.0.4.8,这个依赖于 CodeEffects.Rule.Editor.Core - 5.0.4.1。发现此版本存在问题。
  • 请发送电子邮件至 public.support@codeeffects.com。我们将从那里继续。
猜你喜欢
  • 2016-04-16
  • 2012-03-09
  • 2019-11-23
  • 1970-01-01
  • 2023-01-05
  • 2012-12-11
  • 2011-06-07
  • 2016-05-13
  • 2018-03-18
相关资源
最近更新 更多