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
)
パラメーター
- filterRequest
型 : Microsoft.Synchronization. . :: . .FilterRequestCallback
同期先プロバイダーが、変更の列挙時に同期元プロバイダーが使用するフィルターを要求するために使用するデリゲート。
説明
フィルターのネゴシエーションは、次の手順で行われます。
同期元プロバイダーが変更の列挙を開始する前に、Sync Framework が同期先プロバイダーに実装されている IRequestFilteredSync インターフェイスの SpecifyFilter メソッドを呼び出して、フィルターのネゴシエーションを開始します。
SpecifyFilter の処理中に、同期先プロバイダーは、Sync Framework で指定されている FilterRequestCallback にフィルターを渡します。
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.");
}
}