SpecifyFilter メソッド

派生クラス内でオーバーライドされた場合は、変更の列挙時に同期元プロバイダーが使用するフィルターのネゴシエーションを行います。

名前空間:  Microsoft.Synchronization
アセンブリ:  Microsoft.Synchronization (Microsoft.Synchronization.dll 内)

構文

'宣言
Sub SpecifyFilter ( _
    filterRequest As FilterRequestCallback _
)
'使用
Dim instance As IRequestFilteredSync
Dim filterRequest As FilterRequestCallback

instance.SpecifyFilter(filterRequest)
void SpecifyFilter(
    FilterRequestCallback filterRequest
)
void SpecifyFilter(
    FilterRequestCallback^ filterRequest
)
abstract SpecifyFilter : 
        filterRequest:FilterRequestCallback -> unit 
function SpecifyFilter(
    filterRequest : FilterRequestCallback
)

パラメーター

説明

フィルターのネゴシエーションは、次の手順で行われます。

  1. 同期元プロバイダーが変更の列挙を開始する前に、Sync Framework が同期先プロバイダーに実装されている IRequestFilteredSync インターフェイスの SpecifyFilter メソッドを呼び出して、フィルターのネゴシエーションを開始します。

  2. SpecifyFilter の処理中に、同期先プロバイダーは、Sync Framework で指定されている FilterRequestCallback にフィルターを渡します。

  3. FilterRequestCallback の処理中に、Sync Framework は、同期元プロバイダーによって実装されている ISupportFilteredSync インターフェイスの TryAddFilter(Object) メソッドを呼び出します。要求されたフィルターが同期元プロバイダーでサポートされていない場合、同期先プロバイダーは、サポートされているフィルターが見つかるまで、フィルターを要求し続けることができます。

フィルターのネゴシエーションが正常に終了すると、同期元プロバイダーは、このフィルターを使用して、変更の列挙時に含める項目を決定します。

実装に関するメモ

このメソッドの実装は、同期先プロバイダーと同期元プロバイダーの両方でサポートされているフィルターが見つかるまで、異なるフィルターで FilterRequestCallback を繰り返し呼び出すことができます。同期元プロバイダーは、フィルターをサポートしていない場合、TryAddFilter(Object) 呼び出しに対する応答で false を返します。

次の例では、SpecifyFilter を実装します。同期用のフィルターとして要求された、最初に追跡されるフィルターです。要求されたフィルターが同期元プロバイダーで拒否された場合、例外がスローされます。

Public Sub SpecifyFilter(ByVal filterRequest As FilterRequestCallback) Implements IRequestFilteredSync.SpecifyFilter
    ' Use the first tracked filter as the filter for sync.
    If 0 < _ContactStore.TrackedFilters.Count Then
        _filterForSync = _ContactStore.TrackedFilters(0)
    End If

    ' The source provider must agree to send a filtered change batch.
    If Not filterRequest(_filterForSync, FilteringType.CurrentItemsAndVersionsForMovedOutItems) Then
        Throw New SyncInvalidOperationException("Filter specified by SpecifyFilter was rejected.")
    End If
End Sub
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.");
    }
}

参照

参照

IRequestFilteredSyncインターフェイス

IRequestFilteredSync メンバー

Microsoft.Synchronization 名前空間