ISupportFilteredSync::AddFilter
Sets the filter that is used for change enumeration by the source provider, when implemented by a derived class.
HRESULT AddFilter(
IUnknown * pFilter,
FILTERING_TYPE filteringType);
Parameters
Term |
Definition |
pFilter |
[in] The filter that is used for change enumeration by the source provider. |
filteringType |
[in] Indicates the type of information that is included in a change batch during filtered synchronization. |
Return Value
S_OK.
SYNC_E_FILTER_NOT_SUPPORTED when the type of filter that is specified by pFilter is not supported.
Provider-determined error codes.
Remarks
Filter negotiation is achieved by using the following steps:
Before the source provider begins enumerating changes, Sync Framework starts filter negotiation by calling IRequestFilteredSync::SpecifyFilter on the destination provider.
During processing of IRequestFilteredSync::SpecifyFilter, the destination provider passes filters to IFilterRequestCallback::RequestFilter.
During processing of IFilterRequestCallback::RequestFilter, Sync Framework calls ISupportFilteredSync::AddFilter on the source provider. If the source provider does not support the requested filter, the destination provider can continue to request filters until it finds one that is supported.
When a filter has been successfully negotiated, the source provider uses it to determine which items to include during change enumeration.
Notes for Implementers
An implementation of this method can examine the filter specified by pFilter and filteringType, and return SYNC_E_FILTER_NOT_SUPPORTED to indicate that the filter is not supported. The destination provider can then request different filters until one is found that is supported.
The destination provider will typically end the synchronization session when an error other than SYNC_E_FILTER_NOT_SUPPORTED is returned from ISupportFilteredSync::AddFilter.