共用方式為


篩選同步處理資料

使用篩選來限制同步處理的資料。一般來說,來源提供者會在變更列舉期間套用篩選,以限制傳送的變更。Sync Framework 支援以下篩選類型。

  • 項目篩選會將同步處理資料限定於項目子集,例如,只同步處理兩個檔案資料夾之間的 .txt 檔案,並忽略其他類型的檔案。項目並不會依照使現有項目移入或移出篩選的方式來變更。雖然項目篩選的使用方式很簡單,不過用於同步處理的中繼資料成長比例與同步處理範圍中的項目數成正比。

  • 變更單位篩選會將同步處理資料限制為變更單位的子集,例如,只同步處理連絡人的 name 和 phone number 欄位,並忽略剩餘的變更單位。

  • 自訂篩選會依照 Sync Framework 所未知的方式來限制同步處理資料。項目可以隨著時間移入和移出自訂篩選。Sync Framework 會定義有效支援自訂篩選的其他中繼資料、介面和類別,同時保持較小的整體中繼資料大小。

篩選可以由同步處理應用程式或是來源或目的地提供者所定義,也可以在來源與目的地提供者之間交涉。

當偵測到變更時,來源提供者會使用此篩選。變更偵測期間所建立的變更批次只包含傳遞篩選的同步處理資料。

當篩選套用變更時,也可由目的地提供者所使用。套用到目的地複寫的變更只包含傳遞篩選的同步處理資料。

控制哪些項目要同步處理

項目篩選會定義來源提供者在變更列舉期間會傳送哪些項目變更。因為篩選項目的方式取決於同步處理範圍內的資料類型,所以 Sync Framework 允許來源提供者定義篩選機制。如果提供者與同步處理應用程式之間需要有關篩選的通訊,可以使用任何適當的機制來完成這個作業。

當來源提供者篩選項目變更時,Sync Framework 需要來源提供者將有關篩選的資訊附加到變更列舉期間所傳送的所有變更批次物件。變更批次物件中項目篩選資訊的存在會通知 Sync Framework 篩選的同步處理正在發生,好讓 Sync Framework 可以正確處理篩選之變更批次的知識。如果來源提供者會篩選變更批次中所包含的項目,但是並未將項目篩選資訊指定給變更批次物件,Sync Framework 可能無法正確處理知識。

當來源提供者使用篩選來限制變更批次所包含的項目時,此提供者必須將篩選的相關資訊附加至 ChangeBatch (適用於 Managed 程式碼) 或 ISyncChangeBatch (適用於 Unmanaged 程式碼) 物件。篩選資訊是由 ItemListFilterInfo 物件 (適用於 Managed 程式碼) 或設定 SYNC_FILTER_INFO_FLAG_ITEM_LIST 旗標的 ISyncFilterInfo 物件 (適用於 Unmanaged 程式碼) 所表示。在 Unmanaged 程式碼中,此提供者會使用 IProviderFilteredSyncServices::CreateFilterInfo 來建立 ISyncFilterInfo 物件。篩選資訊會使用 ChangeBatch (適用於 Managed 程式碼) 或 IProviderFilteredSyncServices::CreateFilteredEnumerationChangeBatch (適用於 Unmanaged 程式碼) 建立變更批次物件,藉此附加至變更批次。

如需如何使用項目篩選的詳細資訊,請參閱 HOW TO:篩選列舉項目

控制哪些變更單位要同步處理

變更單位篩選會針對變更列舉期間由來源提供者所傳送的每一個項目變更來定義所包含的變更單位變更。當複寫只儲存針對範圍內的項目所定義的變更單位子集時,變更單位篩選將會很實用。

例如,同步處理社群會交換連絡人資訊,並定義 name、phone number 和 address 的變更單位。社群中的複寫是行動裝置,只能儲存 name 和 phone number。此複寫會使用變更單位篩選,以指定它只會針對這兩個變更單位來追蹤知識。當來源複寫同步處理裝置複寫的資料時,它會使用變更單位篩選,以便只傳送有關 name 和 phone number 變更單位的資訊。從來源提供者學到的知識會投射到變更單位篩選,好讓裝置複寫上的知識只包含 name 和 phone number 變更單位的知識。同樣地,在裝置的本機進行變更而此裝置後續當做同步處理工作階段中的來源複寫時,接收變更的複寫只會針對變更單位的指定集合來更新其知識。

在使用變更單位篩選時,Sync Framework 會將變更批次學到的知識投射到篩選所指定的變更單位集合上,好讓變更批次學到的知識只包含有關指定之變更單位集合的資訊。

若要篩選變更單位變更,來源提供者會建立 ChangeUnitListFilterInfo 物件 (適用於 Managed 程式碼) 或 IChangeUnitListFilterInfo (適用於 Unmanaged 程式碼),並指定同步處理的變更單位集合。在 Unmanaged 程式碼中,IChangeUnitListFilterInfo 物件的建立方式是將 SYNC_FILTER_INFO_FLAG_CHANGE_UNIT_LIST 指定給 IProviderFilteredSyncServices::CreateFilterInfo 方法。來源提供者會使用 ChangeBatch (適用於 Managed 程式碼) 或 IProviderFilteredSyncServices::CreateFilteredEnumerationChangeBatch (適用於 Unmanaged 程式碼),建立變更批次物件,藉此附加至變更批次。

如需如何使用變更單位篩選的詳細資訊,請參閱 HOW TO:篩選列舉變更單位

控制使用自訂篩選同步處理的項目

自訂篩選通常由提供者開發人員定義於 Sync Framework 外部,不過也可能會由協力廠商定義。Sync Framework 不知道篩選如何判斷要包含在同步處理範圍內的項目。您可以用一種讓項目隨著時間移入和移出篩選的方式定義自訂篩選。例如,在儲存媒體檔案的複寫上,可以將篩選定義為包含評比為三顆星以上的所有檔案。當使用者變更檔案的評比時,它可能會移入或移出篩選。

請注意,簡單提供者、報告條件約束衝突或使用變更套用服務的提供者,不可使用自訂篩選,否則可能會發生非預期的結果。

為了有效支援自訂篩選,Sync Framework 定義了許多新概念。

  • 篩選追蹤複寫」(Filter-tracking Replica) 是一種維護中繼資料的複寫,其中定義:目前位於追蹤篩選中的項目和變更單位、最近移入或移出追蹤篩選的項目和變更單位,以及涵蓋不在追蹤篩選中而且已經被遺忘之所有項目和變更單位的篩選被遺忘知識。追蹤篩選並不會影響複寫所儲存的項目。複寫可以追蹤多個篩選,同時儲存同步處理範圍中的所有項目。一般而言,篩選追蹤複寫可以針對任何追蹤篩選提供篩選的變更批次。

  • 篩選複寫」(Filtered Replica) 是一種複寫,其中儲存只有位於篩選中之項目和變更單位的項目和變更單位資料,以及原本位於篩選內但是已經移出之項目和變更單位的中繼資料。篩選複寫一定會追蹤它所使用篩選,而且可能也會追蹤其他篩選。篩選的目的地提供者可以向來源提供者要求篩選變更列舉,也可以要求完整變更列舉並且在變更套用期間自行篩選變更。

  • 準刪除項目」(Ghost) 是指篩選複寫中原本位於篩選內但是已經移出的項目或變更單位。雖然篩選複寫會儲存準刪除項目的中繼資料,不過它不會儲存項目或變更單位資料。

  • 篩選被遺忘知識」(Filter Forgotten Knowledge) 會定義篩選追蹤的起點。篩選追蹤複寫可以節省儲存空間,方法是移除準刪除項目並將篩選被遺忘知識往前移,以便包含已經移除之準刪除項目的最新版本。在同步處理社群中的其他複寫已經使用某個篩選之後,當複寫開始追蹤此篩選時,也會使用篩選被遺忘知識。

追蹤篩選

建議您讓同步處理社群中的所有複寫都追蹤該社群所使用的篩選。當篩選複寫從篩選追蹤複寫收到篩選變更列舉時,就會保持較小的篩選複寫知識。當篩選複寫從沒有追蹤篩選的複寫收到篩選變更列舉時,知識的大小成長比例將與所傳送的變更數目成正比。

如需追蹤篩選的詳細資訊,請參閱 HOW TO:追蹤篩選和列舉篩選變更

篩選中繼資料

若要追蹤篩選,複寫會將每個項目或變更單位的篩選中繼資料儲存在該複寫中。篩選中繼資料包含下表所列的元素:

是否位於篩選中 移動版本

指出項目或變更單位是否位於篩選中。

導致此項目以相對於篩選之方式移動的變更版本。當您建立某個項目而且此項目位於篩選中時,這個版本就會設定為項目的建立版本。如果某個項目不曾位於篩選中,這個版本就會設定為 (0,0)。

當複寫開始追蹤篩選時,就必須針對此篩選評估所有項目或變更單位。如果某個項目或變更單位位於篩選中,其篩選中繼資料就必須指出它位於篩選中,而且其移動版本必須設定為此項目或變更單位的最新變更版本。如果某個項目不在篩選中,其篩選中繼資料則必須指出它不在篩選中,而且其移動版本必須設定為 (0,0)。

篩選追蹤複寫也可以針對它所追蹤的每個篩選儲存篩選被遺忘知識。當篩選追蹤複寫從篩選一產生就追蹤篩選時,除非它從沒有追蹤篩選的複寫收到同步處理資料,否則它不會儲存篩選被遺忘知識。當篩選追蹤複寫在產生篩選之後一段時間才開始追蹤篩選時,它就必須將篩選被遺忘知識初始化成複寫目前的知識。當複寫已清除標記和篩選變更中繼資料時,就可以捨棄篩選被遺忘知識並改用被遺忘知識。

交涉追蹤篩選

篩選追蹤提供者必須實作 IFilterTrackingProvider (適用於 Managed 程式碼) 或 IFilterTrackingProvider (適用於 Unmanaged 程式碼)。這個介面可用來傳達同時在來源複寫和目的地複寫上追蹤的篩選。來源複寫會針對同時在來源複寫和目的地複寫上追蹤的篩選傳送篩選中繼資料。

當同步處理工作階段中的這兩個提供者都是篩選追蹤提供者時,Sync Framework 就會協調這兩個提供者所追蹤之篩選的交涉。追蹤篩選是使用下列步驟,在兩個篩選追蹤提供者之間交涉:

  1. 呼叫 BeginSession (適用於 Managed 程式碼) 或 IKnowledgeSyncProvider::BeginSession (適用於 Unmanaged 程式碼) 之後,Sync Framework 就會針對目的地提供者呼叫 SpecifyTrackedFilters (適用於 Managed 程式碼) 或 IFilterTrackingProvider::SpecifyTrackedFilters (適用於 Unmanaged 程式碼)。

  2. 目的地提供者會列舉其追蹤篩選的清單,並將每個篩選傳遞給 RequestTrackedFilterCallback 委派 (適用於 Managed 程式碼) 或在呼叫 SpecifyTrackedFilters 時指定之 IFilterRequestCallback 物件的 IFilterRequestCallback::RequestFilter 方法 (適用於 Unmanaged 程式碼)。

  3. 對於目的地提供者所指定的每個篩選,Sync Framework 會針對來源提供者呼叫 TryAddTrackedFilter (適用於 Managed 程式碼) 或 IFilterTrackingProvider::AddTrackedFilter (適用於 Unmanaged 程式碼)。

  4. 來源提供者會維護目的地提供者所追蹤的篩選清單,並且傳回一個值,指出它是否追蹤指定的篩選。

  5. Sync Framework 會將此值傳遞給目的地提供者。

傳送追蹤篩選的篩選中繼資料

當目的地提供者追蹤來源提供者同時追蹤的篩選時,來源提供者必須傳送相互追蹤篩選的篩選中繼資料。若要這樣做,請將下列變更新增至 GetChangeBatch (適用於 Managed 程式碼) 或 IKnowledgeSyncProvider::GetChangeBatch (適用於 Unmanaged 程式碼) 的來源提供者實作:

傳送篩選變更

一般而言,代表篩選追蹤複寫的來源提供者可以針對任何追蹤篩選列舉篩選變更批次。應用程式可以使用應用程式與來源提供者之間的自訂機制來識別篩選,也可以在來源提供者與目的地提供者之間交涉篩選。本文稍後將說明篩選交涉。

若要傳送篩選變更批次,請將下列元素新增至來源提供者的 GetChangeBatch 方法:

  • 建立包含用於同步處理之篩選的 CustomFilterInfo (適用於 Managed 程式碼) 或 ICustomFilterInfo (適用於 Unmanaged 程式碼) 物件。透過將篩選資訊物件傳遞給適當的變更批次建構函式 ChangeBatch (適用於 Managed 程式碼) 或呼叫 IProviderFilteredSyncServices::CreateFilteredEnumerationChangeBatch (適用於 Unmanaged 程式碼),建立篩選變更批次物件。此外,在建立變更批次物件時,傳遞篩選的篩選被遺忘知識,而非複寫的被遺忘知識。

  • 當某個項目或變更單位先前位於篩選中,但是目前不在篩選中時,請將 ChangeKind 屬性指定為 Ghost (適用於 Managed 程式碼) 或將 SYNC_CHANGE_FLAG_GHOST 旗標傳遞給 ISyncChangeBatchBase::AddItemMetadataToGroup (適用於 Unmanaged 程式碼)。

  • 如果目的地提供者的篩選類型是 CurrentItemsOnly (適用於 Managed 程式碼) 或 FT_CURRENT_ITEMS_ONLY (適用於 Unmanaged 程式碼),只有當某個項目位於篩選中時,才應該在變更批次中包含此項目。也就是說,請勿傳送準刪除項目。

  • 如果目的地提供者的篩選類型是 CurrentItemsAndVersionsForMovedOutItems (適用於 Managed 程式碼) 或 FT_CURRENT_ITEMS_AND_VERSIONS_FOR_MOVED_OUT_ITEMS (適用於 Unmanaged 程式碼),請包含位於篩選中的項目以及已經移出的項目。當某個項目或變更單位先前位於篩選中、此項目或變更單位目前不在篩選中,而且目的地知識沒有包含將此項目或變更單位移出篩選的變更版本時,就必須傳送移出資訊。

套用篩選中繼資料

當目的地提供者代表篩選追蹤提供者,並且使用變更套用者將變更套用至目的地複寫時,此目的地提供者就必須實作 IFilterTrackingNotifyingChangeApplierTarget (適用於 Managed 程式碼) 或 IFilterTrackingNotifyingChangeApplierTarget (適用於 Unmanaged 程式碼)。這個介面包含 Sync Framework 用來取得追蹤篩選之篩選機碼對應以及篩選被遺忘知識的方法。此外,它也包含 Sync Framework 所呼叫的 SaveKnowledgeWithFilterForgottenKnowledge (適用於 Managed 程式碼) 或 IFilterTrackingNotifyingChangeApplierTarget::SaveKnowledgeWithFilterForgottenKnowledges (適用於 Unmanaged 程式碼) 方法,而非篩選追蹤提供者的 StoreKnowledgeForScope (適用於 Managed 程式碼) 或 ISynchronousNotifyingChangeApplierTarget::SaveKnowledge (適用於 Unmanaged 程式碼)。套用變更批次之後,Sync Framework 會使用這個方法,將更新知識、被遺忘知識和篩選被遺忘知識傳送至提供者。

除了實作 IFilterTrackingNotifyingChangeApplierTarget 以外,還必須更新目的地提供者的 SaveItemChangeSaveChangeWithChangeUnits 方法 (適用於 Managed 程式碼),或是 ISynchronousNotifyingChangeApplierTarget::SaveChangeISynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits 方法 (適用於 Unmanaged 程式碼) 才能執行下列步驟:

  1. 針對變更物件呼叫 GetFilterChange (適用於 Managed 程式碼) 或 ISyncChangeWithFilterKeyMap::GetFilterChange (適用於 Unmanaged 程式碼),藉以取得每個追蹤篩選的篩選變更中繼資料。

  2. 當篩選變更中繼資料存在時,請檢查以確保它並未過時。當項目的目的地知識包含了篩選變更的移動版本時,篩選變更就已過時。如果使用了變更單位,只有當移動版本包含在所有變更單位的目的地知識中時,篩選變更才會過時。如果篩選變更已過時,請勿將它套用至目的地複寫。

  3. 如果篩選變更中繼資料存在而且未過時,請檢查以確保它沒有與已經存在目的地複寫中的篩選變更資訊發生衝突。若要檢查是否發生衝突,請執行下列步驟:

    1. 取得目前針對目的地複寫中之項目或變更單位儲存的移動版本。

    2. 檢查移動版本是包含在此項目的建立方式知識中,還是包含在與此項目相關聯之每個變更單位變更的建立方式知識中。

    3. 如果移動版本沒有包含在適當的建立方式知識中,表示篩選變更發生衝突。此時,目的地提供者必須依適當情況解決此衝突,並且針對變更指派新的移動版本。

    4. 如果未偵測到與移動版本有任何衝突,請針對目的地項目或變更單位的移入旗標檢查來源篩選變更的移入旗標。如果旗標的值不一致,則目的地提供者必須針對此篩選評估此項目或變更單位,並且指派正確的移入旗標值及新的移動版本。

    5. 如果沒有偵測到任何種類的衝突,請將篩選變更中繼資料與項目的中繼資料儲存在一起。

  4. 對於追蹤篩選或由目的地複寫而非來源複寫所追蹤的篩選而言,如果篩選變更中繼資料不存在,請針對目的地的篩選評估變更。請更新篩選中繼資料,以便包含項目是否位於篩選的資訊,並且將移動版本更新為變更的版本 (如果變更導致此項目以相對於篩選的方式移動的話)。如果某個篩選具有多個相關聯的變更單位,而且其中任何一個變更單位的變更導致此項目以相對於篩選的方式移動,請建立新的本機版本,並將新版本指派為項目的移動版本,以及與篩選相關聯之所有變更單位的變更版本。

篩選複寫

篩選複寫會儲存只有位於其篩選中之項目和變更單位的項目和變更單位資料,以及準刪除項目,也就是原本位於篩選內但是已經移出之項目和變更單位的中繼資料。此外,篩選複寫也會追蹤其篩選,而且可能還會追蹤其他篩選。篩選複寫可以與來源提供者交涉篩選,而在此情況下,來源提供者會產生篩選變更批次。如果來源提供者無法產生篩選變更批次,篩選提供者就可以自行篩選變更並且只套用位於其篩選中的變更。

如需實作篩選複寫的詳細資訊,請參閱 HOW TO:篩選複寫

列舉移入篩選的項目

篩選複寫會實作 IFilteredReplicaNotifyingChangeApplierTarget (適用於 Managed 程式碼) 或 IFilteredReplicaNotifyingChangeApplierTarget (適用於 Unmanaged 程式碼) 介面。這個介面包含 Sync Framework 在特定時間點之後用來取得已經移入篩選之項目的 GetNewMoveInItems (適用於 Managed 程式碼) 或 IFilteredReplicaNotifyingChangeApplierTarget::GetNewMoveins (適用於 Unmanaged 程式碼)。當某個項目在使用中、此項目位於篩選中,而且指定給這個方法的知識沒有包含此項目的移動版本時,此項目就會新增至這個方法所傳回的清單。

傳送未篩選變更

如果篩選複寫是來源複寫,而且目的地複寫沒有要求篩選變更列舉,或是在兩種複寫之間未能成功交涉篩選,則來源複寫便會如同未篩選一樣列舉變更。這與採用下列方式傳送篩選變更不同:

  • 建立未篩選變更批次。

  • 建立變更批次時會傳遞複寫的被遺忘知識,而非傳送篩選變更時所傳遞的篩選被遺忘知識。

套用篩選變更

當目的地提供者使用變更套用者來套用變更時,它必須在傳送目的地版本給變更套用者時,指出目的地項目或變更單位是否為準刪除項目。若要這樣做,請在此項目是目的地複寫中的準刪除項目時,針對 ChangeKind 屬性指定 Ghost (適用於 Managed 程式碼) 或將 SYNC_CHANGE_FLAG_GHOST 旗標傳遞給 IDestinationChangeVersionsBuilder::AddItemMetadata (適用於 Unmanaged 程式碼)。當某個項目的中繼資料存在目的地中繼資料存放區內、尚未刪除此項目,而且此項目沒有任何資料存在目的地存放區內時,此項目就是準刪除項目。

當來源提供者中的變更未經篩選時,目的地提供者就會針對目的地複寫的篩選評估來源提供者所傳送的所有變更。目的地提供者會套用通過篩選的變更,並且更新任何受到影響的準刪除項目。目的地提供者會從變更批次的知識中排除任何略過的變更。

此外,目的地提供者也必須對其 SaveItemChangeSaveChangeWithChangeUnits (適用於 Managed 程式碼) 或是 ISynchronousNotifyingChangeApplierTarget::SaveChangeISynchronousNotifyingChangeApplierTarget::SaveChangeWithChangeUnits (適用於 Unmanaged 程式碼) 方法進行下列變更:

  • 透過建立或更新準刪除項目的中繼資料,處理 CreateGhostUpdateGhost (適用於 Managed 程式碼) 或 SSA_CREATE_GHOSTSSA_UPDATE_GHOST (適用於 Unmanaged 程式碼) 動作。此外,您也必須更新篩選變更中繼資料 (如果適用的話)。

  • 透過移除項目或變更單位的資料並更新項目或變更單位的中繼資料以反映變更,處理 MarkItemAsGhost (適用於 Managed 程式碼) 或 SSA_GHOST_ITEM (適用於 Unmanaged 程式碼) 動作。

  • 透過擷取項目或變更單位的資料、將此資料儲存在目的地複寫中並更新中繼資料以反映變更,處理 UnmarkItemAsGhost (適用於 Managed 程式碼) 或 SSA_UNGHOST_ITEM (適用於 Unmanaged 程式碼) 動作。

  • 透過將準刪除項目的中繼資料標示為已刪除,處理 DeleteGhostAndStoreTombstone (適用於 Managed 程式碼) 或 SSA_DELETE_GHOST_AND_STORE_TOMBSTONE (適用於 Unmanaged 程式碼) 動作。

清除準刪除項目

若要釋放篩選複寫上的儲存空間,您可以移除準刪除項目。移除準刪除項目之後,您必須將準刪除項目的移動版本傳遞給篩選被遺忘知識的 ForgetTo (適用於 Managed 程式碼) 或 IForgottenKnowledge::ForgetToVersion (適用於 Unmanaged 程式碼) 方法,藉以更新篩選的篩選被遺忘知識。

交涉篩選

目的地提供者可以指定來源提供者在變更列舉期間所使用的篩選。來源提供者可以接受或拒絕目的地提供者要求的篩選。目的地提供者可以繼續要求篩選,直到來源提供者接受為止。此交涉是由 Sync Framework 居間協調。此篩選可以是最適合提供者的任意類型。

若要參與篩選交涉,來源提供者必須實作 ISupportFilteredSync (適用於 Managed 程式碼) 或 ISupportFilteredSync (適用於 Unmanaged 程式碼),而且目的地提供者必須實作 IRequestFilteredSync (適用於 Managed 程式碼) 或 IRequestFilteredSync (適用於 Unmanaged 程式碼)。

篩選交涉是使用下列步驟所達成:

  1. 在來源提供者開始列舉變更之前,以及呼叫 BeginSession (適用於 Managed 程式碼) 或 IKnowledgeSyncProvider::BeginSession (適用於 Unmanaged 程式碼) 之後,Sync Framework 會針對目的地提供者呼叫 SpecifyFilter 方法 (適用於 Managed 程式碼) 或 IRequestFilteredSync::SpecifyFilter (適用於 Unmanaged 程式碼),藉以啟動篩選交涉。

  2. 在處理 SpecifyFilter 期間,目的地提供者會將篩選傳遞給 Sync Framework 所指定的 FilterRequestCallback 委派 (適用於 Managed 程式碼) 或 IFilterRequestCallback::RequestFilter 方法 (適用於 Unmanaged 程式碼)。當目的地提供者沒有追蹤要求的篩選時,它就會將篩選類型指定為 CurrentItemsOnly (適用於 Managed 程式碼) 或 FT_CURRENT_ITEMS_ONLY (適用於 Unmanaged 程式碼)。當目的地提供者追蹤要求的篩選時,它則會將篩選類型指定為 CurrentItemsAndVersionsForMovedOutItems (適用於 Managed 程式碼) 或 FT_CURRENT_ITEMS_AND_VERSIONS_FOR_MOVED_OUT_ITEMS (適用於 Unmanaged 程式碼)。

  3. 在處理 FilterRequestCallback (適用於 Managed 程式碼) 或 RequestFilter (適用於 Unmanaged 程式碼) 期間,Sync Framework 會呼叫來源提供者的 TryAddFilter (適用於 Managed 程式碼) 或 ISupportFilteredSync::AddFilter (適用於 Unmanaged 程式碼) 方法。如果來源提供者不支援要求的篩選,目的地提供者就可以繼續要求篩選,直到它找到支援的篩選為止。

  4. 如果目的地提供者找不到來源提供者所接受的篩選,它可以透過擲回 SyncInvalidOperationException (適用於 Managed 程式碼) 或傳回錯誤碼,例如 SYNC_E_FILTER_NOT_SUPPORTED (適用於 Unmanaged 程式碼),終止同步處理。

成功交涉篩選之後,來源提供者就會用它來判斷要在變更列舉期間包含哪些項目。

如需如何交涉篩選的詳細資訊,請參閱 HOW TO:交涉篩選

請參閱

概念

實作標準的自訂提供者
實作同步處理應用程式
HOW TO:篩選列舉項目
HOW TO:篩選列舉變更單位
HOW TO:交涉篩選
HOW TO:追蹤篩選和列舉篩選變更
HOW TO:篩選複寫