マップのデバッグ

このセクションでは、マップのデバッグに関する次の内容について説明します。

関係のテスト方法については、"関係を含むマップのテスト"を参照してください。

ランタイム・エラーの解決

マップのコンパイルに成功しても、デバッガーでのマップの実行中にランタイム・エラーが発生することがあります。

例 1: 一方には汎用ビジネス・オブジェクトを持つアウトバウンド・マップがあり、もう一方にはアプリケーション固有のビジネス・オブジェクトがあります。このマップの内部には一致関係があるとします。

  1. 「テスト」タブに切り替えて、呼び出しのコンテキスト SERVICE_CALL_REQUEST を選択します。
  2. 動詞「Update」を選択します。
  3. テストを実行します。

    結果: 次のようなエラー・メッセージが表示されます。

    Exception at step 17, 
     attribute <attribute name>,
     java.lang.nullpointerexception
     

この例外は、元々作成されていないリポジトリー内のエントリーをマップが更新しようとしたために発生しました。理想的には、ステップの順序が正しいかを確認する必要があります。問題のマップに属する関係エントリーのデータベースを調べてください。そして、SERVICE_CALL_REQUEST が作動可能かどうかに基づいて、結論を導き出す必要があります。

例 2: Customer.CustomerId に対する次のマッピング・コード行があります。

_cw_CpBTBSourceValue = ObjSAP_CustomerMaster.get("CustomerIdd");
 

ここには、明らかに入力ミスがあります (属性名に余分な文字 d があります)。残念なことに、エラーはストリング定数であるため、コンパイラーはこのエラーを検出しません。コンパイラーでは、定数値が「正しい」かどうかを検査する方法がありません。しかし、マップを実行すると、次の ICS Express エラー・ダイアログが表示されます。

ICS Error: Exception at step 3, attribute CustomerId, Exception msg 
 number - 11030, Error11030 Attribute CustomerIdd doesn't exist in business 
 object SAP_CustomerMaster.
 

このランタイム・エラーを受け取った場合は、「テスト」タブを退出して、マップを修正する必要があります。

デバッグのヒント

このセクションでは、マップのデバッグに役立つ次のヒントについて説明します。

ロギング・メッセージの使用

マップの実行をトラッキングするには、logInfo() メソッドを使用します。 このメソッドは引き数として String をとり、InterChange Server Express ログに送信されます。このメソッドは、実行をトラッキングする必要がある属性を対象として、Activity Editor で入力する必要があります。サブマップが実行されたことを確認するには、カスタム変換規則を作成し、「Log Information」関数ブロックを使用してアクティビティーをカスタマイズするか、コードを直接書き込みます。

例: コードは、次のような単純な形式になります。

logInfo("in submap");
 

サブマップで宛先オブジェクトの最初の属性の先頭コード行に指定します。

例: SAP.CustomerName など、特定の属性の値をトラッキングする必要がある場合、次のように使用します。

logInfo(ObjSAP_CustomerMaster.getString("CustomerName"));
 

このメッセージの表示が必要ないこともあります。必要がない場合、マップの DataValidationLevel プロパティーを変更します。

DataValidationLevel を設定するには、Map Designer Express の「編集」メニューから「マップ・プロパティー」オプションを選択し、0 を 1 以上の数に変更します。 設定は次のとおりです。
0 データ検証なし
1 IBM データ検証レベル
2 以上 ユーザー定義のデータ検証

logInfo メッセージが表示されないようにするには、DataValidationLevel を 1 に設定します。ユーザーのコードで、logInfo() メソッドを呼び出す前に、データ検証レベルを検査してください。コードは次のとおりです。

if (dataValidationLevel > 1)
    logInfo(ObjSAP_CustomerMaster.getString("CustomerName"));
 

このコードを使用すると、データ検証レベルが 1 より大きい数値に設定されている場合にのみ logInfo は実行されるようになります。メッセージを表示する場合は、「マップ・プロパティー」でデータ検証レベル設定を 2 に変更します。

安全なマッピング・コードの作成

変換規則を Activity Editor でカスタマイズする場合や、独自のマッピング・コードを作成する場合、そのコードが実行時に正しく動作する保証はありません。エラーが発生してもマップの実行を継続し、エラーの通知を受け取るようにするには、Activity Editor で「Catch Error」関数ブロックを使用するか、Java の例外処理の方法に従ってください。

例: 次のように、try ブロック内にコードを入れます。

try
    {
    BusObj temp = new BusObj("SAP_Order");
 // rest of your code
    }
 

次に、catch ブロックを使用し、コードの実行時に発生するすべての例外をキャッチします。

catch (Exception e)
    {
    logInfo(e.toString());
    }
 

logInfo() メソッドを使用し、システムが生成したエラー・メッセージを InterChange Server Express ログに送信できます。

Copyright IBM Corp. 2004