IReplicaMetadata::GetFilteredChangeBatch
获取一个包含某些项的项元数据的变更批,这些项为不包含在来自目标提供程序的指定知识中的项和指定的筛选器所接受的项。
HRESULT GetFilteredChangeBatch(
DWORD dwBatchSize,
ISyncKnowledge *pSyncKnowledge,
ISyncFilterInfo * pFilterInfo,
IChangeBatchCallback *pCallback,
ISyncChangeBatch ** ppSyncChangeBatch);
参数
- dwBatchSize
[in] 要创建的批的大小。
- pSyncKnowledge
[in] 来自目标提供程序的知识。
- pFilterInfo
[in] 有关控制将哪些项包含在变更批中的筛选器的信息。
- pCallback
[in, unique] 为确定是否应将项添加到批中而调用的一个回调接口。
- ppSyncChangeBatch
[out] 返回后续变更批。
返回值
S_OK
E_POINTER
如果 dwBatchSize 为 0,则返回值为 E_INVALIDARG。
备注
此方法可帮助同步提供程序在指定了筛选同步的情况下实现其 IKnowledgeSyncProvider::GetChangeBatch 方法。
在将每一个项添加到批之前,都将调用 pCallback 的 IChangeBatchCallback::OnAddingItemToBatch 方法。如果此方法在其 pfShouldIncludeInBatch 参数中返回 TRUE,项则添加到批中;否则不添加该项。
在提供程序调用此方法之前,它们必须确保元数据存储区中的版本反映了包括删除在内的所有本地变更。其实现方法为通过显式元数据维护传递来枚举项并更新其元数据。
通过 ISqlSyncMetadataStore 获得的此类的实现按照全局 ID 顺序添加对变更批的变更。
通过 ISqlSyncMetadataStore 获得的此类的实现在没有更多要发送的变更时对返回的变更批调用 SetLastBatch。
实施者注意事项
若要帮助使用全局 ID 排序且能够使用范围的提供程序,则应枚举变更,并按照全局 ID 的顺序将变更添加到变更批中。返回的变更批中的第一个变更会开始一个新范围。
如果此批之后没有更多要发送的变更,则必须对返回的变更批调用 SetLastBatch;否则 Sync Framework 将再次调用 IKnowledgeSyncProvider::GetChangeBatch 以检索其他变更批。