IRequestFilteredSync.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
)
void SpecifyFilter (
    FilterRequestCallback filterRequest
)
function SpecifyFilter (
    filterRequest : FilterRequestCallback
)

参数

  • filterRequest
    目标提供程序使用的委托,用于请求源提供程序在变更枚举期间使用的筛选器。

备注

筛选器协商的实现步骤如下:

  1. 在源提供程序开始枚举变更之前,Sync Framework 通过调用目标提供程序实现的 IRequestFilteredSync 接口的 SpecifyFilter 方法启动筛选器协商。

  2. 在处理 SpecifyFilter 的过程中,目标提供程序会将筛选器传递给 Sync Framework 指定的 FilterRequestCallback

  3. 在处理 FilterRequestCallback 的过程中,Sync Framework 调用源提供程序实现的 ISupportFilteredSync 接口的 TryAddFilter 方法。如果源提供程序不支持请求的筛选器,则目标提供程序会继续请求筛选器,直到找到一个受支持的筛选器。

成功协商筛选器后,源提供程序使用该筛选器来确定在变更枚举的过程中要包含哪些项。

实施者注意事项: 此方法的实现可对不同筛选器重复调用 FilterRequestCallback,直到找到目标提供程序和源提供程序均支持的筛选器。源提供程序通过在响应 TryAddFilter 调用时返回 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 命名空间