例外 とは、マップ内で明示的に処理されない場合に、マップの実行を停止する事象の発生です。
マップの実行中に、実行時例外が発生することがあります。カスタム変換規則を定義する場合は、「Catch Error」関数ブロックを使用すれば、実行時例外をトラップできます。 特定の例外をキャッチすると、この例外の処理方法を判別できます。
マップに関係を使用すると、いくつかの例外が発生することがあります。これらの例外はすべて RelationshipRuntimeException のサブクラスです。
例外の種類は特に考慮せず、単にすべてをキャッチする場合は、RelationshipRuntimeException をキャッチします。あるいは、特定クラスの次のいずれの例外でもキャッチできます。
例: 間違ったタイプのビジネス・オブジェクトを create() メソッドに渡すとスローされます。
図 86
に、関係の実行時例外の階層を示します。キャッチするどの例外も、下位の階層の例外を自動的にキャッチします。しかし、下位の階層の例外がスローされた場合、特別にそれをキャッチしないと、どの例外がスローされたかを正確に識別することはできません。
例: RelationshipRuntimeUserErrorException をキャッチすると、RelationshipRuntimeMetaDataErrorException と RelationshipRuntimeGeneralUserErrorException も自動的にキャッチします。しかし、例外を演算子 instanceof でテストしない限り、これらのうちのどれが実際にスローされたのかは簡単に認識できません。キャッチする例外は、例外をどのように処理するかにより異なります。
addMyChildren() または create() メソッドを使用して参加者を一致関係に追加する場合、すでに存在する関係インスタンス ID を渡すと、RelationshipRuntimeDuplicateIdentityEntryException がスローされます。 この例外では、重複を発生させた関係インスタンス ID を検索する getInstanceId() メソッドも使用します。
例: 次の例で、この例外をキャッチして ID を検索する方法を示します。
int instanceId; try { instanceId = Relationship.create(myParticipantObj); } catch (RelationshipRuntimeDuplicateIdentityEntryException rrdiee) { /* ** There already is a relationship instance with this ** entry, grab the instanceId from the exception */ instanceId = rrdiee.getInstanceId(); }