在测试未更改的 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”但当然它不会显示在演示项目的编辑器中,因为这不会发生。
不确定这是否与问题有关,但LoadRule和SaveRule操作之间的一个明显区别是规则的加载方式。
保存规则时,规则数据(来自 UI)被加载到编辑器中
editor.LoadClientData(data.Data);
并且在加载规则时,它是使用 xml(来自存储)加载的,有效地调用了这个:
editor.Rule = Rule.Models.RuleModel.Create(ruleXml, typeof(Models.Patient))
所以我的问题是为什么无效规则可以在保存时通过验证,然后相同的规则在加载时验证失败?我可以尝试任何修复或解决方法?