从CodeEffects 4.3.7.2升级到5后,Xml.IsRuleValid失效了。

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

我们试图从CodeEffects 4.3.7.2升级到5,但是我们现有的规则xml在执行CodeEffects.Rule.Common.Xml.IsRuleValid时失败。我们只是将Xml加载到XmlDocument中,然后调用Xml.IsRuleValid。这都是CodeEffects 4中现有的工作代码。下面是抛出的异常。

Value cannot be null. Parameter name: input

   at System.Xml.XmlReaderSettings.CreateReader(Stream input, Uri baseUri, String baseUriString, XmlParserContext inputContext)
   at System.Xml.XmlReader.Create(Stream input, XmlReaderSettings settings, String baseUri)
   at CodeEffects.Rule.Common.RuleXmlValidator.AddSchema(XmlSchemaSet schemas, String schemaName, Assembly assembly)
   at CodeEffects.Rule.Common.RuleXmlValidator..ctor()
   at CodeEffects.Rule.Common.Xml.IsRuleValid(XmlDocument ruleXml)

下面是一个规则的示例xml,现在在这个检查中失败了。"CustomerSince "和 "SystemDate "是DateTime。

<?xml version="1.0" encoding="utf-8"?>
<codeeffects xmlns="http://codeeffects.com/schemas/rule/41" xmlns:ui="http://codeeffects.com/schemas/ui/4">
    <rule id="ab686e3c-e896-420c-9f8b-5fd09943c939" webrule="4.3.2.71" utc="2016-12-16T07:49:18.9753" type="CompanyABC.Domain.ICustomer, CompanyABC.Domain.State, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" eval="true">
        <definition>
            <or>
                <condition type="isNull">
                    <property name="CustomerSince" />
                </condition>
                <condition type="lessOrEqual">
                    <property name="CustomerSince" />
                    <property name="SystemDate" />
                </condition>
            </or>
        </definition>
        <format><lines /></format>
    </rule>
</codeeffects>

我尝试使用CodeEffects 5 Classic MVC Rule Editor并生成了下面的Xml,但我仍然看到了同样的错误。

<?xml version="1.0" encoding="utf-8"?>
<codeeffects xmlns="http://codeeffects.com/schemas/rule/41" xmlns:ui="http://codeeffects.com/schemas/ui/4">
<rule id="aecdeec9-9b06-4cb1-910d-8b62c311c72f" webrule="5.0.12.4" utc="2020-05-11T22:04:19.8510" type="CompanyABC.Domain.ICustomer, CompanyABC.Domain.State, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" eval="true">
<definition>
    <or ui:block="true">
        <condition type="isNull">
            <property name="CustomerSince" />
        </condition>
        <condition type="lessOrEqual">
            <property name="CustomerSince" />
            <property name="SystemDate" />
        </condition>
    </or>
</definition>
<format><lines /></format>
</rule>
</codeeffects>

我们使用的是CodeEffects Downloader中的以下库。

CodeEffects.Rule.Common.dll (5.0.4.2)

CodeEffects.Rule.Engine.Standard.dll (5.0.9.6)

和下面的Nuget包。

CodeEffects.Rule.Editor.Mvc.dll (5.0.12.4)

CodeEffects.Rule.Editor.Net.dll (5.0.12.4)

任何帮助将是感激的。

rule-engine business-rules codeeffects
1个回答
0
投票

这个问题已经在今天早些时候发布的最新小版本中得到了修复。

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