我正在使用BizTalk应用程序。
我已经设置了我的词汇表并开始在规则编写器中编写规则。
在评估规则之后,我创建了一个名为AddValidationError的函数,该函数将验证错误写入要验证的XML文档中。 AddValidationError方法是从规则的Action部分调用的。
我想将正在评估的节点传递给AddValidationError方法,以便我可以确定该节点的XPath并将其作为错误消息的一部分包含在内。
我以为我可以有一个类型为TTypedXmlDocument的参数,但这并不允许我传递定义为TTypedXmlDocument以外的任何节点,例如string,int,datetime等。我注意到了规则引擎有一个名为Exists的方法,它接受任何类型的节点并将其解析为XPath,这就是我想要的。
我不想将XPath文本复制到AddValidationError方法中,因为这看起来很乱,而且任何BA都应该能够通过简单地在屏幕上拖放节点和方法来创建新规则,即,他们不应该& #39;必须知道您需要将XPath复制到节点中的AddValidationError方法才能工作。
我希望这是有道理的。
所以回到Exists谓词方法,我可以将它传递给任何节点,它似乎自动计算出XPath,我怎样才能获得这个功能?或者更好的是,如何将TTypedXmlDocument以外的类型的节点传递给方法,然后确定传入的节点的XPath?
我考虑过为每个节点定义两个定义,一个代表值,字符串,整数,日期时间等,另一个代表同一个节点但是TTypedXmlDocument。虽然这确实有效,但它也有点味道,所以想要更好的东西。
答案 0 :(得分:2)
你具体要求的是不可能的。 Compose没有将实际的xPath看作是一个工件,只看到它解析的内容。
虽然您可能会在Exists谓词中看到xPath,但实际上并不是正在评估的内容。与任何其他参数一样,xPath的结果将被检查为null。
如果我必须做这样的事情,我可能会在规则中为正在测试的节点/字段创建一个带有'path'(但不一定是有效的xPath)的词汇表项。