IReplicaMetadata2::GetFilteredFullEnumerationChangeBatch
作为完全枚举的一部分,获取一个已筛选的变更批,该变更批包含 ID 大于或等于指定下限的项的项元数据。
HRESULT GetFilteredFullEnumerationChangeBatch(
DWORD dwBatchSize,
ISyncFilterInfo * pFilterInfo,
IChangeBatchCallback * pCallback,
const BYTE * pbLowerFullEnumerationBound,
ISyncKnowledge * pSyncKnowledge,
ISyncFullEnumerationChangeBatch ** ppChangeBatch);
参数
- dwBatchSize
[in] 要返回的变更批的大小。
- pFilterInfo
[in] 一个 ISyncFilterInfo 对象,该对象表示有关可用于控制变更批中包含哪些变更的筛选器的信息。
- pCallback
[in, unique] 一个 IChangeBatchCallback 对象,该对象用于确定是否在变更批中包含项。
- pbLowerFullEnumerationBound
[in] 项 ID 的下限。此方法返回 ID 大于或等于此 ID 值的变更(只要这些变更符合 pFilterInfo 中指定的筛选条件)。
- pSyncKnowledge
[in] 目标副本的知识。
- ppChangeBatch
[out] 返回变更批。
返回值
S_OK。
E_POINTER。
如果 dwBatchSize 为 0,则返回值为 E_INVALIDARG。
备注
此方法可帮助同步提供程序在使用项筛选时实现其 IKnowledgeSyncProvider::GetFullEnumerationChangeBatch 方法。此方法在遗忘知识恢复期间调用。
在提供程序调用此方法之前,它们必须确保元数据存储区中的版本反映了包括删除在内的所有本地变更。其实现方法为通过显式元数据维护传递来枚举项并更新其元数据。
通过 ISqlSyncMetadataStore 执行以下功能,可以实现此类:
按照全局 ID 顺序将变更添加到变更批中。
如果 pSyncKnowledge 中未包含的所有项具有的 ID 小于 pbLowerEnumerationBound,并且这些项符合 pFilterInfo 中指定的筛选条件,则返回这些项。
当没有更多变更需要发送时,为返回的变更批调用 SetLastBatch。
实施者注意事项
此方法必须按照项 ID 的排序顺序枚举其 ID 大于或等于 pbLowerEnumerationBound 并且它们自身符合 pFilterInfo 中指定的筛选条件的项。这使 Sync Framework 能够确定目标提供程序中的哪些项已被删除但又被源提供程序遗忘。
如果此批之后没有更多要发送的变更,则必须对返回的变更批调用 SetLastBatch;否则 Sync Framework 将再次调用 IKnowledgeSyncProvider::GetFullEnumerationChangeBatch 以检索其他变更批。
对于将项数据和项变更元数据一起发送的提供程序,可以使用 pSyncKnowledge 来确定是否有必要发送项数据。当项变更包含在 pSyncKnowledge 中时,不必发送项数据。