閱讀英文

共用方式為


撤回

您可以使用 Retract 函式,從商務規則引擎的工作記憶體中移除物件。 下列幾段描述從規則引擎的工作記憶體撤回不同類型實體的關聯行為。

.NET 物件

使用 Retract 函式在原則中撤銷 .NET 物件。 此函式可在商務規則編輯器中作為 Functions 詞彙專案使用:將類別拖曳 (而非元件或方法) 至 Retract 參數。

注意

如果您將方法拖曳至 Retract 函式,引擎會嘗試撤銷方法所傳回的物件。

撤回 .NET 物件也會從規則引擎的工作記憶體移除它,並且有下列影響:

  • 在述詞中使用物件的規則,具有其已從議程移除的動作 (如果議程上存在任何動作)。

  • 會從議程中移除議程上使用物件的動作。

    注意

    在呼叫 Retract 函式之前,可能已經執行議程上較高的其他動作。

  • 物件已不再由引擎所評估。

TypedXmlDocument

您可以撤銷判斷提示為引擎的原始TypedXmlDocument,或撤銷從父XmlDocument節點建立的其中一個子TypedXmlDocument

使用下列 XML 做為範例,您可以撤銷與訂單相關聯的 TypedXmlDocument ,或與 orderline 建立關聯的 TypedXmlDocument或兩者。

<order>  
   <orderline customer="Joe" linenumber="001">  
      <product name="router" quantity="10" cost="550" />  
   </orderline>  
   <orderline customer="Jane" linenumber="002">  
      <product name="switch" quantity="1" cost="300" />  
   </orderline>  
</order>  

若要撤回 Order 物件,您可以在 XML 描述結構事實窗格中拖曳描述結構的最上方節點。 此節點以 「.xsd」 結尾,代表檔根節點 (不是檔元素節點) ;它有參考初始 TypedXmlDocument的 「/」 選取器。 撤銷父TypedXmlDocument時,所有與TypedXmlDocument 相關聯的 TypedXmlDocument實例都會 (藉由根據原則) 中使用的選取器呼叫Assert函式所建立的所有TypedXmlDocument實例都會從工作記憶體中移除。

若要只撤銷屬於 orderline) 的個別子 TypedXmlDocument (,您可以將這個節點從 [XML 架構] 窗格拖曳到 Retract 函式。 請務必注意,所有 TypedXmlDocuments 都與最初判斷提示的最上層 TypedXmlDocument 相關聯,而不是與 XML 樹狀結構階層中出現在其上方的 TypedXmlDocument 相關聯。 例如,product 是 orderline 物件下方的 TypedXmlDocument ;因此,它會與 Orderline TypedXmlDocument相關聯,而不是與 orderline TypedXmlDocument相關聯。 在大部分的執行個體中,這個差別並不重要。 不過,若您撤回 Order 物件,Orderline 和 Product 物件也會被撤回。 如果您撤回 Orderline 物件,則只有該物件會被撤回,而不會撤回 Product 物件。

引擎只適用于和追蹤物件實例, (TypedXmlDocuments) 一開始判斷提示 TypedXmlDocument 時所建立的物件實例。 如果您建立其他節點,例如,透過原則中的選取器選取的節點同層級節點,除非 建立並判斷提示這些節點,否則這些節點不會在規則中進行評估。 判斷提示這些新、較低層級 的 TypedXmlDocuments 會導致在規則中進行評估,但最上層 TypedXmlDocument 不知道它們。 撤銷最上層 TypedXmlDocument 時,不會自動撤銷新的獨立判斷提示 TypedXmlDocuments。 因此,如果建立新的節點,通常最簡單的方式是撤銷並重新建構完整的 XmlDocument

TypedXmlDocument類別支援一些有用的方法,這些方法可在自訂 .NET 成員內呼叫作為動作的一部分。 其中包括能夠取得與TypedXmlDocument或父TypedXmlDocument相關聯的XmlNode

TypedDataTable

您可以撤銷個別 TypedDataRows 或整個 TypedDataTable。 如果您撤回資料表,所有包含的資料列也會從工作記憶體中撤回。

若要撤銷整個TypedDataTable,您必須使用協助程式函式來存取TypedDataRow上的Parent屬性,例如:

Retract(MyHelper.GetTypedDataTable(TypedDataRow))  

在上述動作中,您會將資料表拖曳至 TypedDataRow。 在 GetTypedDataTable 中,您會傳回 TypedDataRow.Parent的值。

如同TypedXmlDocuments,如果您在判斷提示TypedDataTable之後針對相同的DataTable判斷提示其他TypedDataRows,則會將它們視為個別實體,並撤銷TypedDataTable不會造成這些額外TypedDataRows 的撤銷。 只有在判斷提示時,TypedDataRow 包含在 TypedDataTable 中的 TypedDataRow

DataConnection

撤銷DataConnection時,透過DataConnection建構的查詢,從資料庫擷取的所有TypedDataRow都會從工作記憶體中撤銷。 DataConnection本身也會撤銷,這表示不會再透過DataConnection (擷取TypedDataRow,也就是在其他述詞或動作中使用DataConnection) 。

使用 DataConnection時,個別 TypedDataRow 上的任何撤銷作業會將引擎置於不一致的狀態。 因此,與DataConnection相關聯的個別TypedDataRow上不允許作業。 如果您使用 DataConnection 參數將資料表 (拖曳到 Retract 函式) 中,您將會撤銷 DataConnection

另請參閱

引擎控制函式