IKnowledgeSyncProvider
COM公式ドキュメント
ナレッジを使用して同期を実行する同期プロバイダーを表します。
解説(Remarks)
通常、同期セッションによって最初に呼び出されるメソッドは BeginSession です。最後のメソッドは EndSession です。その他のすべての IKnowledgeSyncProvider メソッドは、これら 2 つのメソッドの間に呼び出されます。
同期セッションの概要については、トピック Windows Sync Overview を参照してください。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
同期セッションに参加することをプロバイダーに通知します。
| role | SYNC_PROVIDER_ROLE | in | セッション内のもう一方のプロバイダーに対する、このプロバイダーの役割。 |
| pSessionState | ISyncSessionState* | in | 対応するセッションの現在の状態。 |
戻り値
返される可能性のあるコードには、次の表に示す値が含まれます (ただし、これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
解説(Remarks)
セッションを開始できない場合、プロバイダーはエラーを返す必要があります。これは、プロバイダーが初期化されていない場合、構成が無効な場合、または既にアクティブなセッションに参加している場合に発生することがあります。
変更バッチに含める項目変更の要求数と、同期スコープの現在のナレッジを取得します。
| ppSyncKnowledge | ISyncKnowledge** | out | 同期スコープの現在のナレッジを返します。現在のナレッジが存在しない場合は、新しく作成されたナレッジオブジェクトを返します。 |
| pdwRequestedBatchSize | DWORD* | inout | ソースプロバイダーが返す変更バッチに含める項目変更の要求数を返します。 |
戻り値
返される可能性のあるコードには、次の表に示す値が含まれます (ただし、これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
宛先プロバイダーから渡された指定のナレッジに含まれていない項目について、その項目メタデータを格納した変更バッチを取得します。
| dwBatchSize | DWORD | in | 変更バッチに含める変更の要求数。 |
| pSyncKnowledge | ISyncKnowledge* | in | 宛先プロバイダーからのナレッジ。変更の列挙に使用する前に、ソース側のナレッジに対して ISyncKnowledge::MapRemoteToLocal を呼び出して、このナレッジをマップする必要があります。 |
| ppSyncChangeBatch | ISyncChangeBatch** | out | pSyncKnowledge に含まれていない項目の項目メタデータを格納した変更バッチを返します。 |
| ppUnkDataRetriever | IUnknown** | out | 変更データの取得に使用できるオブジェクトを返します。これは ISynchronousDataRetriever オブジェクト、またはプロバイダー固有のオブジェクトです。 |
戻り値
返される可能性のあるコードには、次の表に示す値が含まれます (ただし、これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
解説(Remarks)
dwBatchSize は要求される数にすぎない点に注意してください。これより少ない、または多いバッチが返されることがあります。
完全列挙の一環として、指定された下限より大きい ID を持つ項目の項目メタデータを格納した変更バッチを取得します。
| dwBatchSize | DWORD | in | 変更バッチに含める変更の数。 |
| pbLowerEnumerationBound | BYTE* | in | 項目 ID の下限。このメソッドは、この ID 値以上の ID を持つ変更を返します。 |
| pSyncKnowledge | ISyncKnowledge* | in | 項目の変更がこのナレッジオブジェクトに含まれている場合、その項目のデータは宛先レプリカに既に存在します。 |
| ppSyncChangeBatch | ISyncFullEnumerationChangeBatch** | out | 指定された下限より大きい ID を持つ項目の項目メタデータを格納した変更バッチを返します。 |
| ppUnkDataRetriever | IUnknown** | out | 変更データの取得に使用できるオブジェクトを返します。これは ISynchronousDataRetriever オブジェクト、またはプロバイダー固有のオブジェクトです。 |
戻り値
返される可能性のあるコードには、次の表に示す値が含まれます (ただし、これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
解説(Remarks)
このメソッドは、項目 ID が pbLowerEnumerationBound 以上である変更を、項目 ID の昇順で列挙します。これにより同期セッションは、宛先プロバイダー上のどの項目が削除されたにもかかわらずソースプロバイダーで忘却されたのかを判断できます。必要に応じて、このメソッドは、項目 ID が pbLowerEnumerationBound より小さく、かつ宛先のナレッジに含まれていない変更を、項目 ID 順にバッチへ追加することもできます。
項目データを項目の変更メタデータと一緒に送信するプロバイダーの場合、pSyncKnowledge を使用して項目データを送信する必要があるかどうかを判断できます。項目の変更が pSyncKnowledge に含まれている場合、項目データを送信する必要はありません。項目が含まれているかどうかを確認するために使用する前に、現在のプロバイダーが保持するナレッジオブジェクトに対して ISyncKnowledge::MapRemoteToLocal メソッドを使用して pSyncKnowledge をマップする必要がある点に注意してください。
競合を検出し、項目ストアに変更を適用することで、一連の変更を処理します。
| resolutionPolicy | CONFLICT_RESOLUTION_POLICY | in | このメソッドが変更を適用するときに使用する競合解決ポリシー。 |
| pSourceChangeBatch | ISyncChangeBatch* | in | ローカルに適用する、ソースプロバイダーからの変更のバッチ。 |
| pUnkDataRetriever | IUnknown* | in | 変更データの取得に使用できるオブジェクト。これは ISynchronousDataRetriever オブジェクト、またはプロバイダー固有のオブジェクトです。 |
| pCallback | ISyncCallback* | in | 変更の適用中にイベント通知を受け取るオブジェクト。 |
| pSyncSessionStatistics | SYNC_SESSION_STATISTICS* | inout | 変更に関する統計情報を追跡します。カスタムの変更適用を使用するプロバイダーでは、このオブジェクトを変更適用の結果で更新する必要があります。 |
戻り値
返される可能性のあるコードには、次の表に示す値が含まれます (ただし、これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
解説(Remarks)
ソース側の変更に変更単位 (change unit) の変更が含まれている場合、宛先プロバイダーは、変更適用側に送信する宛先バージョンのバッチにどの変更単位のバージョンを含めるか (含めるものがあるかどうかを含めて) を判断する必要があります。この判断は、ソースプロバイダーからの変更の種類と、その項目が宛先レプリカ上で削除済みとしてマークされているかどうかによって決まります。
項目ストアに変更を適用することで、完全列挙のための一連の変更を処理します。
| resolutionPolicy | CONFLICT_RESOLUTION_POLICY | in | このメソッドが変更を適用するときに使用する競合解決ポリシー。 |
| pSourceChangeBatch | ISyncFullEnumerationChangeBatch* | in | ローカルに適用する、ソースプロバイダーからの変更のバッチ。 |
| pUnkDataRetriever | IUnknown* | in | 変更データの取得に使用できるオブジェクト。これは ISynchronousDataRetriever オブジェクト、またはプロバイダー固有のオブジェクトです。 |
| pCallback | ISyncCallback* | in | 変更の適用中にイベント通知を受け取るオブジェクト。 |
| pSyncSessionStatistics | SYNC_SESSION_STATISTICS* | inout | 変更に関する統計情報を追跡します。カスタムの変更適用を使用するプロバイダーでは、このオブジェクトを変更適用の結果で更新する必要があります。 |
戻り値
返される可能性のあるコードには、次の表に示す値が含まれます (ただし、これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
解説(Remarks)
このメソッドは、忘却されたナレッジの回復処理中に呼び出されます。
参加していた同期セッションが終了したことをプロバイダーに通知します。
| pSessionState | ISyncSessionState* | in | 対応するセッションの現在の状態。 |
戻り値
返される可能性のあるコードには、次の表に示す値が含まれます (ただし、これらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
解説(Remarks)
pSessionState は、対応する直前の IKnowledgeSyncProvider::BeginSession の呼び出しで渡された ISyncSessionState オブジェクトと同じものになります。
このメソッドが呼び出された時点で、プロバイダーは pSessionState で指定された ISyncSessionState オブジェクトへの参照をすべて解放する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IKnowledgeSyncProvider "{43434A49-8DA4-47F2-8172-AD7B8B024978}" #usecom global IKnowledgeSyncProvider IID_IKnowledgeSyncProvider "{}" #comfunc global IKnowledgeSyncProvider_BeginSession 4 int,sptr #comfunc global IKnowledgeSyncProvider_GetSyncBatchParameters 5 sptr,var #comfunc global IKnowledgeSyncProvider_GetChangeBatch 6 int,sptr,sptr,sptr #comfunc global IKnowledgeSyncProvider_GetFullEnumerationChangeBatch 7 int,var,sptr,sptr,sptr #comfunc global IKnowledgeSyncProvider_ProcessChangeBatch 8 int,sptr,sptr,sptr,var #comfunc global IKnowledgeSyncProvider_ProcessFullEnumerationChangeBatch 9 int,sptr,sptr,sptr,var #comfunc global IKnowledgeSyncProvider_EndSession 10 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IKnowledgeSyncProvider "{43434A49-8DA4-47F2-8172-AD7B8B024978}" #usecom global IKnowledgeSyncProvider IID_IKnowledgeSyncProvider "{}" #comfunc global IKnowledgeSyncProvider_BeginSession 4 int,sptr #comfunc global IKnowledgeSyncProvider_GetSyncBatchParameters 5 sptr,sptr #comfunc global IKnowledgeSyncProvider_GetChangeBatch 6 int,sptr,sptr,sptr #comfunc global IKnowledgeSyncProvider_GetFullEnumerationChangeBatch 7 int,sptr,sptr,sptr,sptr #comfunc global IKnowledgeSyncProvider_ProcessChangeBatch 8 int,sptr,sptr,sptr,sptr #comfunc global IKnowledgeSyncProvider_ProcessFullEnumerationChangeBatch 9 int,sptr,sptr,sptr,sptr #comfunc global IKnowledgeSyncProvider_EndSession 10 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。