このセクションでは、マップのデバッグに関する次の内容について説明します。
関係のテスト方法については、"関係を含むマップのテスト"を参照してください。
マップのコンパイルに成功しても、デバッガーでのマップの実行中にランタイム・エラーが発生することがあります。
例 1: 一方には汎用ビジネス・オブジェクトを持つアウトバウンド・マップがあり、もう一方にはアプリケーション固有のビジネス・オブジェクトがあります。このマップの内部には一致関係があるとします。
結果: 次のようなエラー・メッセージが表示されます。
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 { BusObj temp = new BusObj("SAP_Order"); // rest of your code }
次に、catch ブロックを使用し、コードの実行時に発生するすべての例外をキャッチします。
catch (Exception e) { logInfo(e.toString()); }
logInfo() メソッドを使用し、システムが生成したエラー・メッセージを InterChange Server Express ログに送信できます。