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 が再度呼び出されます。