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.");
}
}