2013-07-25 58 views
1

我是BRE新手,對於BizTalk整體來說相當新,所以這可能相當簡單,只是迴避我...BizTalk Business Rule用於檢查包含在.csv,xml等中的值列表

我想要做的是:在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的巨列表之外的值列表。可接受值的列表足夠大,以至於執行一堆OR操作都不起作用。

理想情況下,我希望有一個可維護的XML文件,其中包含可接受的<rootOid>值,以便在業務規則中進行檢查。

我也意識到有一種方法可以調用數據庫並從表/列中讀取值進行匹配,但我寧願將SQL排除在等式之外,以便它可以更加獨立。

回答

1

一個「相等」的表達就足夠了。你的RHS的事實應該是另一個詞彙項目。在XML類型的情況下,正確的路徑將逐個拉取所有值並導致多次評估,如果匹配則分別觸發一個操作。要記住的關鍵:BRE是一種模式匹配引擎。

詞彙只是事實定義的方便別名。比方說,你創建一個XML文件結構如下:

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

定義詞彙這一事實爲 名稱:PossibleValues XPath的選擇:/選項/值 的XPath場。

然後將規則定義爲IF currentValue == PossibleValues將導致三個條件評估,因爲RHS會在工作內存中生成三個事實。因此,只有那些真的會觸發一個規則(行動)。

XPath的選擇:/選項/ XPath的字段:值省略

(命名空間當你拿起從XML模式的節點上,將只斷言一個(第一)其實與此相比,默認定義BRE創建簡潔)

在運行時將此XML文檔作爲參數傳遞給BRE(無論是在業務流程中還是在.Net組件中,取決於BRE調用上下文)。在設計時進行測試,您必須實施Fact Creator組件(實現IFactCreator)以提供所需參數的實例。

使用自定義事實檢索器可以更好地管理長期事實(如問題中的問題)。 Fact Retriever是一個實現IFactRetriever的.Net組件。詳細信息請參見documentation。內部事實檢索器實現加載XML(從磁盤)並將其作爲TypedXmlDocument斷言到工作內存中。

+0

我不太確定我是否按照你所說的去做。我可以看到可以添加詞彙的位置,但不能提供包含可接受值列表的XML或CSV文件的位置。 – Bensonius

+0

增加了更多的說明。 –

+0

Paul,你在說什麼正是我想要做的,我明白你在說什麼,並且我在BRE作曲家中發現了在哪裏可以做所有事情,除了如何真正將引擎指向具有''列表的XML文件。我有一個文件,我有一個模式,我有詞彙和規則,但我不知道如何將實際的XML文件與詞彙表和規則相關聯,並將Xpath應用於。我無法看到爲選項列表添加「源」。 – Bensonius

相關問題