ICrmCompensatorVariants
COM公式ドキュメント
Microsoft Visual Basic を使用する際に、構造化されたログレコードを CRM コンペンセーターに配信します。
解説(Remarks)
CRM クラークは、ICrmLogControl::RegisterCompensator メソッドを使用して CRM コンペンセーターの CLSID を判別します。次に、この CRM コンペンセーターの CLSID を指定して CoCreateInstance を呼び出し、続いて ICrmCompensator インターフェースと ICrmCompensatorVariants インターフェースの両方に対して QueryInterface を呼び出します。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ICrmLogControl インターフェースを CRM コンペンセーターに配信します。
| pLogControl | ICrmLogControl* | inoptional | CRM クラークの ICrmLogControl インターフェースへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
追加のログレコードを書き込むには、ICrmLogControl インターフェースを使用します。
トランザクション完了の準備フェーズであること、およびレコードが配信されようとしていることを CRM コンペンセーターに通知します。(ICrmCompensatorVariants.BeginPrepareVariants)
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
準備フェーズ中に、ログレコードを CRM コンペンセーターに配信します。
| pLogRecord | VARIANT* | in | ログレコード(Variant の Variant 配列として)。 |
| pbForget | VARIANT_BOOL* | out | 配信されたレコードを破棄すべきかどうかを示します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、書き込まれた各ログレコードごとに 1 回ずつ、CRM コンペンセーターによって複数回受信される場合があります。
ICrmCompensatorVariants インターフェースでは、ログレコードは書き込まれたときと同じ方法で配信されます。CRM フラグとシーケンス番号が、配列の末尾の 2 つの要素として追加されます。(ICrmCompensator::PrepareRecord を参照してください。)
CRM ワーカーによってログレコードが書き込まれない場合、BeginPrepareVariants メソッドと EndPrepareVariants メソッドは CRM コンペンセーターによって受信されますが、PrepareRecordVariants メソッドの呼び出しは行われません。これは、準備時にのみログレコードを書き込む CRM コンペンセーターに対応するためです。
CRM コンペンセーターは、このメソッドからの戻り時に破棄フラグを設定することで、このフェーズ中に配信されたレコードを破棄することを選択できます。
準備フェーズ中に利用可能なすべてのログレコードを受け取ったことを CRM コンペンセーターに通知します。(ICrmCompensatorVariants.EndPrepareVariants)
| pbOkToPrepare | VARIANT_BOOL* | out | 準備フェーズが成功したかどうかを示します。成功した場合、このトランザクションをコミットしてもよいことを意味します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
トランザクション完了のコミットフェーズ(フェーズ 2)であること、およびレコードが配信されようとしていることを CRM コンペンセーターに通知します。
| bRecovery | VARIANT_BOOL | in | このメソッドがリカバリー中に呼び出されているかどうかを示します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
CRM コンペンセーターは、準備フェーズとコミットフェーズの間で状態が保持されることに依存すべきではありません。CRM インフラストラクチャは、必要であればこれら 2 つのフェーズの間で CRM コンペンセーターを解放してかまいません。ただし、Begin-Record-End の呼び出しの間では状態が保持され、CRM コンペンセーターはトランザクション結果メソッドが配信される前に必ず ICrmLogControl インターフェースを取得します。
コミットフェーズ中に、ログレコードを CRM コンペンセーターに配信します。
| pLogRecord | VARIANT* | in | ログレコード(Variant の Variant 配列として)。 |
| pbForget | VARIANT_BOOL* | out | 配信されたレコードを破棄すべきかどうかを示します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、書き込まれた各ログレコードごとに 1 回ずつ、CRM コンペンセーターによって複数回受信される場合があります。ログレコードが書き込まれない場合、BeginCommitVariants メソッドと EndCommitVariants メソッドは受信されますが、CommitRecordVariants メソッドの呼び出しは行われません。
CRM コンペンセーターは、このメソッドからの戻り時に破棄フラグを設定することで、このメソッド中に配信されたレコードを破棄することを選択できます。
コミットフェーズ中に利用可能なすべてのログレコードを配信し終えたことを CRM コンペンセーターに通知します。(ICrmCompensatorVariants.EndCommitVariants)
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
トランザクション完了の中止(アボート)フェーズであること、およびレコードが配信されようとしていることを CRM コンペンセーターに通知します。(ICrmCompensatorVariants.BeginAbortVariants)
| bRecovery | VARIANT_BOOL | in | このメソッドがリカバリー中に呼び出されているかどうかを示します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
CRM コンペンセーターは、準備フェーズと中止フェーズの間で状態が保持されることに依存すべきではありません。CRM インフラストラクチャは、必要であればこれら 2 つのフェーズの間で CRM コンペンセーターを解放してかまいません。ただし、Begin-Record-End の呼び出しの間では状態が保持され、CRM コンペンセーターはトランザクション結果メソッドが配信される前に必ず ICrmLogControl インターフェースを取得します。
中止(アボート)フェーズ中に、ログレコードを CRM コンペンセーターに配信します。(ICrmCompensatorVariants.AbortRecordVariants)
| pLogRecord | VARIANT* | in | ログレコード(Variant の Variant 配列として)。 |
| pbForget | VARIANT_BOOL* | out | 配信されたレコードを破棄すべきかどうかを示します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、書き込まれた各ログレコードごとに 1 回ずつ、CRM コンペンセーターによって複数回受信される場合があります。ログレコードが書き込まれない場合、BeginAbortVariants メソッドと EndAbortVariants メソッドは受信されますが、AbortRecordVariants メソッドの呼び出しは行われません。
CRM コンペンセーターは、このメソッドからの戻り時に破棄フラグを設定することで、このフェーズ中に配信されたレコードを破棄することを選択できます。
中止(アボート)フェーズ中に利用可能なすべてのログレコードを受け取ったことを CRM コンペンセーターに通知します。(ICrmCompensatorVariants.EndAbortVariants)
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICrmCompensatorVariants "{F0BAF8E4-7804-11D1-82E9-00A0C91EEDE9}" #usecom global ICrmCompensatorVariants IID_ICrmCompensatorVariants "{}" #comfunc global ICrmCompensatorVariants_SetLogControlVariants 3 sptr #comfunc global ICrmCompensatorVariants_BeginPrepareVariants 4 #comfunc global ICrmCompensatorVariants_PrepareRecordVariants 5 var,var #comfunc global ICrmCompensatorVariants_EndPrepareVariants 6 var #comfunc global ICrmCompensatorVariants_BeginCommitVariants 7 int #comfunc global ICrmCompensatorVariants_CommitRecordVariants 8 var,var #comfunc global ICrmCompensatorVariants_EndCommitVariants 9 #comfunc global ICrmCompensatorVariants_BeginAbortVariants 10 int #comfunc global ICrmCompensatorVariants_AbortRecordVariants 11 var,var #comfunc global ICrmCompensatorVariants_EndAbortVariants 12 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ICrmCompensatorVariants "{F0BAF8E4-7804-11D1-82E9-00A0C91EEDE9}" #usecom global ICrmCompensatorVariants IID_ICrmCompensatorVariants "{}" #comfunc global ICrmCompensatorVariants_SetLogControlVariants 3 sptr #comfunc global ICrmCompensatorVariants_BeginPrepareVariants 4 #comfunc global ICrmCompensatorVariants_PrepareRecordVariants 5 sptr,sptr #comfunc global ICrmCompensatorVariants_EndPrepareVariants 6 sptr #comfunc global ICrmCompensatorVariants_BeginCommitVariants 7 int #comfunc global ICrmCompensatorVariants_CommitRecordVariants 8 sptr,sptr #comfunc global ICrmCompensatorVariants_EndCommitVariants 9 #comfunc global ICrmCompensatorVariants_BeginAbortVariants 10 int #comfunc global ICrmCompensatorVariants_AbortRecordVariants 11 sptr,sptr #comfunc global ICrmCompensatorVariants_EndAbortVariants 12 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。