重新判斷提示
若要 重新組譯 ,表示在引擎的工作記憶體中已存在的物件上呼叫 Assert 函式。 重新判斷提示命令相當於對物件發出撤回命令,之後跟隨判斷指示命令。
此物件是第一個被撤回的物件,而且使用此物件 (在述詞或動作中) 的規則議程上的任何動作都會被移除。 然後該物件會判斷提示回工作記憶體中,並評估為新判斷提示的任何物件。 這表示在述詞中使用此物件的任何規則都會重新評估,而且會依適當的情況將其動作新增到議程中。 任何先前評估為 true 的規則,且只會在其動作中使用 物件,就會將其動作重新新增至議程。
重新設定最上層TypedXmlDocument (TXD) 時,一開始判斷提示最上層TXD時所建立的子TXD會根據子TXD的狀態而有不同的行為。 如果是新的子節點或已變更的子節點,這表示至少有一個欄位已在原則中使用規則動作變更,在子節點上執行判斷提示或重新組譯動作。 未變更的現有子節點仍存在工作記憶體中。 以下範例是一個簡化的實例,描述在重新判斷提示子節點的父節點時其子節點的行為。
假設目前在工作記憶體中有三 個 TXD: P、 C1、 C2 和 C3。 P 是最上層 TXD,父節點;每個子節點都包含欄位 x。
P
C1 (C1。x = 1)
C2 (C2。x = 1)
C3 (C3。x = 1)
接著,假設下列作業已做為規則動作的結果執行:
C2 的欄位 (x) 值會更新。
C3 會使用使用者程式碼刪除。
使用使用者程式碼將額外的子節點 D新增至 P 。
注意
作業的「商務規則引擎」不會將節點標示為已變更,因為引擎不處理這些動作。 例如,在外部應用程式中以程式設計方式新增、刪除或修改節點。
工作記憶體中新的物件表示法如下:
P
C1 (C1。x = 1)
C2 (C2。X = 0)
D
現在,請重新組譯 P。下列幾點摘要說明子節點的行為:
節點 C2 已重新建構,因為它在更新其欄位之後變得過時。
節點 C3 會從工作記憶體中撤銷。
節點 D 會判斷提示到工作記憶體中。
節點 C1 在工作記憶體中保持不變,因為它在重新組譯 P 之前未更新。
如果在TypedDataRow上發出Reassert,則會撤銷該資料列,然後判斷提示為工作記憶體。 如果在TypedDataTable上發出Reassert,則會撤銷所有相關聯的TypedDataRow,然後判斷提示。
會撤銷透過DataConnection擷取的所有TypedDataRow。 接著會重新評估所有使用 DataConnection 的述詞,導致 重新查詢 DataConnection 以建立相關的 TypedDataRows。