共用方式為


HOW TO:交涉篩選

本主題描述如何使用 Managed 語言來交涉用於同步處理的篩選。Sync Framework 是用來協調兩個提供者之間的交涉。

本主題假設您對於 C# 和 Microsoft .NET Framework 概念有基本的了解。

本主題的範例將重點放在下列 Sync Framework 介面和成員:

了解篩選交涉

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

Sync Framework 會在呼叫 BeginSession 之後啟動篩選交涉。當目的地提供者實作 IRequestFilteredSync 時,Sync Framework 就會呼叫其 SpecifyFilter 方法。在這個方法中,目的地提供者會將篩選傳遞給 FilterRequestCallback 委派,直到接受其中一個篩選為止。這個委派會透過呼叫其 TryAddFilter 方法,將此篩選傳遞給來源提供者。在這個方法中,來源提供者會接受或拒絕要求的篩選。如果接受了篩選,來源提供者就必須用它來產生僅包含通過篩選之項目或變更單位的篩選變更批次。

組建需求

範例

本主題的範例程式碼將示範如何在追蹤篩選的兩個提供者之間交涉自訂篩選。

要求篩選

由於目的地提供者會實作 IRequestFilteredSync,所以 Sync Framework 會呼叫其 SpecifyFilter 方法。在這個方法中,目的地提供者會使用 FilterRequestCallback 委派來要求來源提供者必須使用其追蹤篩選清單中的第一個篩選來產生篩選變更批次。因為目的地提供者會追蹤此篩選,所以它會將篩選類型指定為 CurrentItemsAndVersionsForMovedOutItems。如果來源提供者拒絕此篩選,目的地提供者就會擲回 SyncInvalidOperationException,表示沒有一致同意任何篩選,而且它無法與來源提供者同步處理。

public void SpecifyFilter(FilterRequestCallback filterRequest)
{
    // Use the first tracked filter as the filter for sync.
    if (0 < _ContactStore.TrackedFilters.Count)
    {
        _filterForSync = _ContactStore.TrackedFilters[0];
    }

    // The source provider must agree to send a filtered change batch.
    if (!filterRequest(_filterForSync, FilteringType.CurrentItemsAndVersionsForMovedOutItems))
    {
        throw new SyncInvalidOperationException("Filter specified by SpecifyFilter was rejected.");
    }
}

接受篩選

由於來源提供者會實作 ISupportFilteredSync,所以每次目的地提供者呼叫 FilterRequestCallback 委派時,Sync Framework 都會呼叫其 TryAddFilter 方法一次。在這個方法中,來源提供者會列舉其追蹤篩選清單,而且如果其中一個篩選與要求的篩選相同,它就會接受此篩選。

public bool TryAddFilter(object filter, FilteringType filteringType)
{
    _filterForSync = null;

    // The filter must be tracked by both replicas.
    for (int filterKey = 0; filterKey < _filterKeyMap.Count; filterKey++)
    {
        if (_filterKeyMap[filterKey].IsIdentical((ISyncFilter)filter))
        {
            _filterForSync = (AddressFilter)_filterKeyMap[filterKey];
            _filteringType = filteringType;
            break;
        }
    }

    return (null != _filterForSync);
}

後續的步驟

接著,您可能會想要深入了解如何使用 Sync Framework 所提供的各種篩選,例如項目篩選、變更單位篩選和自訂篩選。如需篩選的詳細資訊,請參閱篩選同步處理資料

請參閱

概念

程式設計一般標準的自訂提供者工作
篩選同步處理資料