繁体   English   中英

BizTalk业务规则,用于检查.csv,xml等中包含的值列表

[英]BizTalk Business Rule for checking against list of values contained in .csv, xml, etc

我是BRE的新手,并且是BizTalk的新手,所以这可能很简单,只是在逃避我...

我想做的是:在BRE中创建业务规则,将传入消息作为输入,并检查消息中包含的值是否与指定值集中的任何值匹配。 示例消息如下。 然后, <isFound>字段将相应地更新。

<n1:DocumentTemplate xmlns:n1="mynamespace">
    <rootOid>2.16.840.1.113883.3.51.60.2.5</rootOid>
    <isFound>false</isFound>
</n1:DocumentTemplate>

基本上,我想将<rootOid>节点与值列表进行匹配。 我已经创建了一个业务,该业务将<rootOid>与业务规则条件中的硬编码值相匹配...只是作为概念验证,以了解如何使用BRE并在规则中调用规则编排。

除了在业务规则的“条件”中编写大量的硬编码OR之外,我无法找到一种与值列表匹配的方法。 可接受值的列表足够大,以至于无法执行一堆“或”操作。

理想情况下,我希望有一个可维护的XML文件,其中包含可接受的<rootOid>值,可以从业务规则中进行检查。

我还意识到,有一种方法可以调用数据库并从表/列中读取值以进行匹配,但是我宁愿将SQL排除在等式之外,这样可以使它更加独立。

一个“等于”表达式就足够了。 您的RHS事实应该是另一个词汇。 如果是XML类型,则正确的路径将一一拉出所有值,并导致多个求值,如果存在匹配项,则分别触发操作。 要记住的关键:BRE是模式匹配引擎。

词汇表只是事实定义的方便别名。 假设您使用以下结构创建XML文件:

<options>
  <value>A</value>
  <value>B</value>
  <value>C</value>
</options>

为此事实定义一个词汇表,其名称为:PossibleValues XPath选择器:/ options / value XPath字段:。

然后将规则定义为IF currentValue ==可能性值将导致三个条件评估,因为RHS将三个事实产生到工作存储器中。 因此,只有符合条件的人才能触发规则(操作)。 将此与BRE从XML模式中选择一个仅断言一个(第一个)事实的节点时BRE创建的默认定义进行比较:

XPath选择器:/ options / XPath字段:值

(为简便起见,省略了命名空间)

在运行时,将此XML文档作为参数传递给BRE(无论是在业务流程中还是在.Net组件中,具体取决于BRE调用上下文)。 在设计测试时,您必须实现Fact Creator组件(实现IFactCreator)以提供必需参数的实例。

使用自定义事实检索器可以更好地管理长期事实(如问题中的事实)。 事实检索器是实现IFactRetriever的.Net组件。 有关详细信息,请参见文档 内部事实检索器实现内部(从磁盘)加载XML,并将其断言为TypedXmlDocument到工作内存中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM