當來源提供者回應 GetChangeBatch (適用於 Managed 程式碼) 或 IKnowledgeSyncProvider::GetChangeBatch (適用於 Unmanaged 程式碼) 要求時,它的工作是要產生目的地複寫不知道的變更批次。來源提供者判斷來源複寫中哪些項目並未包含在目的地提供者所傳送知識物件中,然後傳回這些項目的批次。
每個變更批次都是由下列資訊組成:
已變更項目的全域識別碼和版本。
目的地複寫應該知道的標記。
建立方式知識。這是進行變更時,來源複寫的知識,Sync Framework 會隨著目的地提供者套用變更,為目的地從建立方式知識計算學習到的知識。
必要條件知識。這是目的地複寫必須具備的最低程度知識,以便處理這個變更批次。如果目的地複寫的知識並未包含必要條件知識,就無法處理這些變更。
來源複寫的被遺忘知識。這是用來偵測過時的目的地複寫。
兩個複寫之間的變更列舉
本節提供的案例描述使用Sync Framework 知識介面,進行兩個複寫之間的變更列舉處理。
注意
複寫要負責確保在提供者列舉變更之前,將本機所進行的變更反映在其知識中。這可以透過在本機進行變更時更新知識,或是在列舉變更之前執行中繼資料維護作業來完成。
在此案例中,目的地提供者會要求來源提供者的變更。要求的順序如下:
目的地複寫要確保在要與來源複寫進行同步處理的範圍中,本機上進行的所有變更都會反映在其知識中。
目的地提供者將目的地複寫的知識傳送給來源提供者。來源提供者透過 GetChangeBatch (適用於 Managed 程式碼) 或 IKnowledgeSyncProvider::GetChangeBatch (適用於 Unmanaged 程式碼) 方法,接收知識。
為了建立變更批次,來源提供者列舉來源複寫中的變更及刪除,並依據目的地複寫的知識,確認每一項變更。變更只在未包含於目的地複寫的知識內時,才會加入變更批次中。變更批次是以 ChangeBatch 物件 (適用於 Managed 程式碼) 或 ISyncChangeBatch 介面 (適用於 Unmanaged 程式碼) 代表。
來源提供者傳回變更批次給目的地提供者。
注意
變更集中可能會有大量的變更。為了要提供足夠時間來處理傳入變更清單,目的地提供者可以透過在其 GetSyncBatchParameters (適用於 Managed 程式碼) 或 GetSyncBatchParameters (適用於 Unmanaged 程式碼) 方法中傳回非零數字,要求按批次傳送變更。
當來源提供者使用變更單位來代表從來源複寫列舉的子項目時,只會傳送已變更的變更單位,而不是傳送整個項目。如需詳細資訊,請參閱同步處理變更單位。
處理過時的變更
建構了變更批次後,過時的變更會自動排除在外。過時的變更是已經包含於目的地複寫知識中的變更,不應該套用至目的地複寫。變更加入變更批次中時,Sync Framework 會比較此變更的版本與目的地複寫的知識,然後只有在目的地複寫的知識中未包含此變更時,才加入變更。這會產生最小的變更批次,並讓提供者實作更簡單的列舉變更演算法,例如根據滴答計數的演算法。
提供者可以執行其本身的驗證,確認加入變更批次的項目並未過時。為了執行這項作業,提供者會判斷全域識別碼和變更版本是否包含於目的地複寫的知識中。這是使用 Contains (適用於 Managed 程式碼) 或 ISyncKnowledge::ContainsChange (適用於 Unmanaged 程式碼) 方法來執行。如果知識並未包含變更,提供者就將變更加入變更批次中。這樣就會產生最小的變更批次,對想要完全控制變更批次建構的提供者很有用。
請參閱
參考
ISyncKnowledge 介面
ISyncChangeBatch 介面
IKnowledgeSyncProvider 介面
IKnowledgeSyncProvider::GetChangeBatch
SyncKnowledge
ChangeBatch
KnowledgeSyncProvider
GetChangeBatch