TryAddFilter メソッド

派生クラス内でオーバーライドされた場合は、同期元プロバイダーによって変更の列挙に使用されるフィルターを設定します。

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

構文

'宣言
Function TryAddFilter ( _
    filter As Object, _
    filteringType As FilteringType _
) As Boolean
'使用
Dim instance As ISupportFilteredSync
Dim filter As Object
Dim filteringType As FilteringType
Dim returnValue As Boolean

returnValue = instance.TryAddFilter(filter, _
    filteringType)
bool TryAddFilter(
    Object filter,
    FilteringType filteringType
)
bool TryAddFilter(
    Object^ filter, 
    FilteringType filteringType
)
abstract TryAddFilter : 
        filter:Object * 
        filteringType:FilteringType -> bool 
function TryAddFilter(
    filter : Object, 
    filteringType : FilteringType
) : boolean

パラメーター

  • filter
    型 : System. . :: . .Object
    同期元プロバイダーによって変更の列挙で使用されるフィルターです。

戻り値

型 : System. . :: . .Boolean
filter で指定されたフィルターがサポートされている場合は True、それ以外の場合は false です。

説明

フィルターのネゴシエーションは、次の手順を使用して行われます。

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

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

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

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

実装に関するメモ

このメソッドの実装では、filter および filteringType によって指定されたフィルターを調べ、そのフィルターがサポートされていないことを示す false を返すことができます。同期先プロバイダーは、サポートされているフィルターが見つかるまで、異なるフィルターを要求できます。

次の例では、TryAddFilter を実装します。フィルターは、レプリカによって追跡されるフィルターの場合にのみ、同期に使用されます。

Public Function TryAddFilter(ByVal filter As Object, ByVal filteringType As FilteringType) As Boolean Implements ISupportFilteredSync.TryAddFilter
    _filterForSync = Nothing

    ' The filter must be tracked by both replicas.
    For filterKey As Integer = 0 To _filterKeyMap.Count - 1
        If _filterKeyMap(filterKey).IsIdentical(DirectCast(filter, ISyncFilter)) Then
            _filterForSync = DirectCast(_filterKeyMap(filterKey), AddressFilter)
            _filteringType = filteringType
            Exit For
        End If
    Next

    Return (_filterForSync IsNot Nothing)
End Function
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);
}

参照

参照

ISupportFilteredSyncインターフェイス

ISupportFilteredSync メンバー

Microsoft.Synchronization 名前空間