手順4. モジュールの構築のInformaticaエクスターナルプロシージャTxINF_BankSoft::FVのインプリメンテーションには以下のコードが含まれています。
ostrstream ss;
char* s;
...
ss << "The calculated future value is: " << FV->GetDouble() << ends;
s = ss.str();
(*m_pfnMessageCallback)(E_MSG_TYPE_LOG, 0, s);
(*m_pfnMessageCallback)(E_MSG_TYPE_ERR, 0, s);
delete [] s;
統合サービスがTx<MODNAME>型のオブジェクトを作成するときは、そのコンストラクタに対して、エラーやデバッグのメッセージをセッションログに書き込む際に使用できるコールバック関数へのポインタを渡します。(Tx<MODNAME>コンストラクタ用のコードは、Tx.cppファイルにあります。)このポインタはTx<MODNAME>メンバ変数m_pfnMessageCallbackに格納されています。このポインタの型は、$PMExtProcDir/include/infemmsg.hファイルのtypedefに定義されています。
typedef void (*PFN_MESSAGE_CALLBACK)(
enum E_MSG_TYPE eMsgType,
unsigned long Code,
char* Message
);
また、このファイルには、列挙型E_MSG_TYPEが定義されています。
enum E_MSG_TYPE {
E_MSG_TYPE_LOG = 0,
E_MSG_TYPE_WARNING,
E_MSG_TYPE_ERR
};
コールバック関数のeMsgTypeを「E_MSG_TYPE_LOG」と指定すると、このコールバック関数は
ログ
メッセージをセッションログに書き込みます。「E_MSG_TYPE_ERR」を指定すると、このコールバック関数は
エラー
メッセージをセッションログに書き込みます。「E_MSG_TYPE_WARNING」を指定すると、このコールバック関数は
警告
メッセージをセッションログに書き込みます。これらのメッセージを使用して、Informaticaエクスターナルプロシージャを容易にデバッグできます。
COMエクスターナルプロシージャのデバッグにあたっては、Visual BasicまたはC++クラス内から使用できる出力機能を利用できます。たとえばVisual Basicでは、MsgBoxを使用して、各行の計算結果を印刷できます。言うまでもなく、デバッグ中にこれを行うのは小さなサンプルデータについてです。実稼動に移る前に、必ずMsgBoxを削除してください。
Visual BasicまたはC++のクラス内から出力機能を使用する場合は、その前に以下の値を必ずレジストリに追加してください。
Windowsレジストリに以下のエントリを追加します。
\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\PowerMart\Parameters\MiscInfo\RunInDebugMode=Yes
このオプションは、統合サービスをサービスではなく通常のアプリケーションとして起動します。統合サービスのデバッグは、実行中の統合サービスサービスに対するデバッグ特権を変更することなく行えます。
PMSERVER.EXEコマンドを使用して、統合サービスをコマンドラインから起動します。
これで、統合サービスがデバッグモードで動作します。
デバッグが終了したら、必ずこのエントリをレジストリから削除するか、「RunInDebugMode」を「No」に設定してください。そうしないと、
PowerCenter
をサービスとして起動しようとしても、起動しません。
統合サービスを停止し、前に追加したレジストリエントリを以下の設定に変更します。
\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\PowerMart\Parameters\MiscInfo\RunInDebugMode=No
統合サービスをWindowsサービスとして再起動します。