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

BizTalk业务规则,用于对照.csv、xml等中包含的值列表进行检查,biztalk,biztalk-2010,business-rules,biztalk-rule-engine,Biztalk,Biztalk 2010,Business Rules,Biztalk Rule Engine,我是BRE的新手,对BizTalk整体来说也是相当陌生的,所以这可能非常简单,只是在逃避我 我想做的是:在BRE中创建一个业务规则,将传入消息作为输入,并检查消息中包含的值是否与指定值集中的任何值匹配。示例消息如下所示。然后,字段将相应地更新 <n1:DocumentTemplate xmlns:n1="mynamespace"> <rootOid>2.16.840.1.113883.3.51.60.2.5</rootOid> <isFo

我是BRE的新手,对BizTalk整体来说也是相当陌生的,所以这可能非常简单,只是在逃避我

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

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

2.16.840.1.113883.3.51.60.2.5
假的
基本上,我希望将
节点与值列表进行匹配。我已经创建了一个业务,它将
与业务规则条件中的硬编码值相匹配……作为概念证明,学习如何在编排中使用BRE和调用规则的基础知识

除了在业务规则的“条件”中列出大量硬编码的OR之外,我没有找到一种方法来匹配一系列值。接受值的列表足够大,以至于做一堆OR是行不通的

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

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

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

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

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

A.
B
C
将此事实的词汇定义为 名称:可能值 XPath选择器:/options/value XPath字段:

然后将规则定义为currentValue==PossibleValues将导致三个条件求值,因为RHS在工作内存中产生三个事实。因此,只有那些正确的才会触发规则(操作)。将此与BRE从XML模式中选择节点时创建的默认定义进行比较,该节点将只声明一个(第一个)事实:

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

(为了简洁起见,省略了名称空间)

在运行时,将此XML文档作为参数传递给BRE(无论是在编排中还是在.Net组件中,取决于BRE调用上下文)。在设计测试时,您必须实现事实创建者组件(实现IFactCreator)以提供所需参数的实例

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

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

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

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

A.
B
C
将此事实的词汇定义为 名称:可能值 XPath选择器:/options/value XPath字段:

然后将规则定义为currentValue==PossibleValues将导致三个条件求值,因为RHS在工作内存中产生三个事实。因此,只有那些正确的才会触发规则(操作)。将此与BRE从XML模式中选择节点时创建的默认定义进行比较,该节点将只声明一个(第一个)事实:

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

(为了简洁起见,省略了名称空间)

在运行时,将此XML文档作为参数传递给BRE(无论是在编排中还是在.Net组件中,取决于BRE调用上下文)。在设计测试时,您必须实现事实创建者组件(实现IFactCreator)以提供所需参数的实例


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

我不太确定我是否理解了您的意思。我可以看到您可以在哪里添加词汇表,但无法提供包含可接受值列表的XML或CSV文件。添加了更多说明。Paul,您所说的正是我希望做的,我理解您的意思,我在BRE Composer中找到了除了如何实际将引擎指向带有
列表的XML文件之外的所有操作。我有一个文件,我有一个模式,我有词汇表和规则,但我不知道如何将实际的XML文件与词汇表和规则关联起来,并将Xpath应用于。我看不到任何地方可以在选项列表中添加“来源”。这在最初的问题中并不清楚。现在又补充了答案。我开始认为情况就是这样。您知道如何管理从业务流程传递XML文件的任何示例吗?我在谷歌上找不到任何样本。我不太确定我是否明白你的意思。我可以看到您可以在哪里添加词汇表,但无法提供包含可接受值列表的XML或CSV文件。添加了更多说明。Paul,您所说的正是我希望做的,我理解您所说的