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 の下限です。変更が pFilterInfo に指定されたフィルター条件を満たす場合、このメソッドは、ID がこの ID 値以上である変更を返します。
  • pSyncKnowledge
    [in] 同期先レプリカのナレッジです。
  • ppChangeBatch
    [out] 変更のバッチを返します。

戻り値

  • S_OK

  • E_POINTER

  • E_INVALIDARG (dwBatchSize が 0 の場合)

解説

項目のフィルター選択を使用する場合、このメソッドを使用すると、同期プロバイダーがその IKnowledgeSyncProvider::GetFullEnumerationChangeBatch メソッドを実装できるようになります。このメソッドは、忘れられたナレッジの復旧時に呼び出されます。

プロバイダーは、このメソッドを呼び出す前に、メタデータ ストア内のバージョンにローカルの変更 (削除など) がすべて反映されていることを確認する必要があります。これを行うには、メタデータを明示的にメンテナンスすることによって、項目を列挙し、そのメタデータを更新します。

ISqlSyncMetadataStore によって可能になるこのクラスの実装では、次の処理が行われます。

  • グローバル ID の順に、変更を変更バッチに追加します。

  • pSyncKnowledge に含まれていない項目をすべて返します。ただし、ID が pbLowerEnumerationBound の値より小さく、pFilterInfo に指定されているフィルター条件を満たしている項目に限ります。

  • 送信する変更がなくなったら、返された変更バッチで SetLastBatch を呼び出します。

実装に関するメモ

このメソッドは、項目 ID が pbLowerEnumerationBound 以上で、pFilterInfo に指定されたフィルター条件を満たす変更を、項目 ID の順に列挙する必要があります。これにより、Sync Framework は、同期先プロバイダーのどの項目が同期元プロバイダーによって削除され、忘れられているかを特定できます。

このバッチの後で送信する変更がない場合は、返される変更バッチに対して SetLastBatch を呼び出す必要があります。そうしないと、次の変更バッチを取得するために、Sync Framework によって IKnowledgeSyncProvider::GetFullEnumerationChangeBatch が再度呼び出されます。

項目変更に関するメタデータと共に項目データを送信するプロバイダーの場合は、pSyncKnowledge を使用すると、項目データを送信する必要があるかどうかを判断できます。項目の変更が pSyncKnowledge に含まれている場合は、項目データを送信する必要はありません。

参照

リファレンス

IReplicaMetadata2 インターフェイス