【问题标题】:BizTalk Business Rules Check on node existance and valueBizTalk 业务规则检查节点存在和值
【发布时间】:2014-03-20 09:52:05
【问题描述】:

我有以下问题。我想执行一个检查节点是否存在的策略,然后它应该检查该值是否大于 0。

假设我们有“xmlDoc”,我想检查节点“test”是否存在以及“test”的值是否大于 0。

<xmlDoc>
    <test>5</test>
</xmlDoc>

当节点存在时,没有问题。但是,当节点丢失时,所有的地狱都会失败。 很明显他为什么会崩溃。他找不到节点“test”,因此无法检查其值。

我的问题:是否可以在 BizTalk BRE 中检查节点的存在和值而不会崩溃?

【问题讨论】:

    标签: biztalk business-rules biztalk-rule-engine


    【解决方案1】:

    条件列表中有“存在”谓词,但是,这并不总是有效,因为还会评估值事实。

    我发现解决此问题的一种方法是创建一个词汇项目并调整选择器以指向可能不存在的元素,在您的情况下为“文本”。

    那么 XPath 字段就是 /text() 节点。

    这样,如果 Selector 路径返回 null,则 BRE 知道该事实不存在,因此不会评估需要它的规则。

    【讨论】:

    • 感谢您的回答。我有点像你的方式解决了它。但我想知道 BRE 是否可以检查节点是否存在,如果确实存在,请检查节点的值。这样,规则仍然会被评估,这就是我想要的
    • 这几乎就是更改选择器所做的事情,尽管我将其描述为“仅在节点存在时评估规则”。
    • 是的,我使用相同的技术,有时也会更改选择器以测试节点是否不存在以执行其他操作(例如,发出它丢失的警告)。跨度>
    【解决方案2】:

    如果不存在检查与值检查一起执行,BRE 不会按预期工作。

    解决方案:

    如果节点不存在,以下函数将返回节点值和空字符串。 使用该函数的返回值进行值检查。

    声明:XML 文档。 path : XML 路径。

        public static string GetXMLPathValue(TypedXmlDocument claim, string path)
        {
            string nodeContent = string.Empty;
    
            if (claim.Document.SelectSingleNode(path) != null)
                return claim.Document.SelectSingleNode(path).InnerXml;
            return nodeContent;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多