参照関係の使用

参照関係 はビジネス・オブジェクト間で等価だが異なる方法で表現されることがあるデータを関連付けます。 次のセクションでは、参照関係を使用する手順について説明します。

注:
背景情報については、"参照関係"を参照してください。

参照関係定義の作成

参照関係定義は、参加者タイプがビジネス・オブジェクトでなくdata タイプであることが一致関係定義と異なります (参加者タイプ・リストでの最初の選択)。 参照関係の関係定義の作成方法については、"参照関係の定義"を参照してください。

例: AddressType 値について StatAdtp と呼ばれる参照関係を作成するとします。 図 117 では、各ボックスは StatAdtp 参照関係の参加者を表します。この関係の各参加者のタイプは、data タイプです。

図 117. StatAdtp 参照関係定義


参照関係では関連する属性は示さないので、複数の属性の変換に 1 つの関係定義を使用することができます。実際に、変換するビジネス・オブジェクトに関係なく、参照が必要なすべての属性に関して 1 つの参照関係定義を使用できます。しかし、各関係定義には 1 つの表セットしか作成されないので、すべての参照関係に 1 つの関係定義を使用すると、表が大きくなり維持が難しくなります。

適切な方法は、国別コードや状況などの共通のデータ単位について 1 つの参照関係定義を作成することです。この方法では、関係表セットのそれぞれに意味が関係する情報が含まれます。このように定義された関係はまたモジュール方式でもあります。つまり、新規のコラボレーションやアプリケーションをサポートする場合に新規の参加者を追加し、同じ関係定義を再使用できるからです。例えば、国別コードに関して参照関係定義を作成し、Clarify_Site ビジネス・オブジェクトを SAP_Customer に変換するとします。後で、新規コラボレーションまたは新規アプリケーションを追加する場合、国別コードに関係する各変換の同じ関係定義を再使用することができます。

参照表にデータを設定

「スキーマを作成」オプションを使用可能にして参照関係定義を配置すると、Interchange Server Express によって関係表 (参照表 とも呼ばれる) が参加者ごとに生成されます。各参照表には、次のような形式の名前が付いています。

RelationshipDefName _ParticipantDefName
 

「スキーマを作成」オプションを使用可能にして StatAdtp 関係定義を配置すると (図 117 を参照)、Interchange Server Express によって次の 2 つの参照表が生成されます。

参照表には、関係インスタンス ID の列 (INSTANCEID) と関連する参加者インスタンス・データ (data) が含まれます。図 118 に、StatAdtp 参照関係の PsftAdtp および SAPAdtp 参加者に関する参照表を示します。これらの 2 つの参照表は関係インスタンス ID を使用して参加者を相互に関連付けます。例えば、116 のインスタンス ID は、PsftAdtp の値 FiredSAPAdtp の値 04 と相互に関係します。

図 118. CustLkUp 参照関係の関係表


一致関係のデータを保持する関係表と異なり、参照表は自動的に設定されません。表の列にデータを挿入してこれらの表を設定する必要があります。次のいずれの方法でも、参照表にデータを設定できます。

SQL を使用した参加者インスタンスの挿入

SQL の INSERT ステートメントを使用して、参照表に参加者データを挿入することができます。 この方法は、参照表に多くの行データを追加する必要がある場合に便利です。1 つの INSERT ステートメントについての構文を作成し、その後エディターを使用して、行を挿入する回数だけこの行をコピーおよび貼り付けします。各行では、挿入されるデータ (通常は、INSERT ステートメントの VALUES 文節) の編集のみが必要です。

INSERT ステートメントを使用するには、参照関係表とその列の名前を知る必要があります。表 91 に、参照表の列名を示します。

表 91. 参照表の列
参照表の列 説明
INSTANCEID 関係インスタンス ID。
data 参加者データ。
STATUS 参加者がアクティブの場合、ゼロ (0) に設定されます。
LOGICAL_STATE 参加者インスタンスが論理的に削除されたかどうかを示します (ゼロは「削除されていない」を示します)。
TSTAMP 参加者インスタンスの最終変更日。

重要:
SQL ステートメントを使用して参加者データを参照表に挿入する場合は、STATUSLOGICAL_STATE、および TSTAMP 列の値を必ず指定してください。IBM WebSphere Business Integration ツールが正しく動作するには、すべての値が必要です。特に、TSTAMP 値が不足していると Relationship Manager が参加者データを検索できなくなります。タイム・スタンプ値が存在しないと、Relationship Manager により例外が発行されます。

例: アドレス・タイプの情報を持つ関係表に参加者データを追加する必要があるとします (表 92 を参照)。

表 92. PsftAdtp 参加者のアドレス・タイプのサンプル値
INSTANCEID STATUS LOGICAL_STATE TSTAMP データ
1 0 0 現在日付 Home
2 0 0 現在日付 Mailing

次の INSERT ステートメントは、PstfAdtp 参照表に表 92 の参加者データを作成します。

INSERT INTO StatAdtp_PsftAdtp_T 
  
    (INSTANCEID, STATUS, LOGICAL_STATE, TSTAMP, data)
    VALUES (1, 0, 0, getDate(), 'Home')
  
 INSERT INTO StatAdtp_PsftAdtp_T 
    (INSTANCEID, STATUS, LOGICAL_STATE, TSTAMP, data)
    VALUES (2, 0, 0, getDate(), 'Mailing')
 

注:
先行する INSERT 構文は MicroSoft SQL Server 7.0 と互換性があります。関係表に別のデータベース・サーバーを使用している場合は、そのサーバーと互換性のある INSERT 構文を使用してください。

Relationship Manager を使用した参加者インスタンスの挿入

Relationship Manager は IBM WebSphere Business Integration ツールで、関係表内のランタイム・データをグラフィックで表示します。Relationship Manager は、参照表に数行を追加するのみの場合などに便利です。

参照関係のマップ変換のカスタマイズ

参照関係に関連する関係定義と参加者定義の作成が完了すると、参照を実行できるようにマップの変換規則をカスタマイズすることができるようになります。Activity Editor での参照関係のカスタマイズについては、"例 3: 変換での Static Lookup の使用"を参照してください。

表 93 に、参照関係のインプリメントに必要なマッピング API メソッドを示します。この表では、API 呼び出しが必要なマップもリストします。

表 93. 参照関係のマッピング API メソッド
参照関係でのステップ マップ マッピング API メソッド
ソース・ビジネス・オブジェクトからの参加者データの関係インスタンス ID の取得。インスタンス ID は汎用ビジネス・オブジェクトに保管されます。 インバウンド・マップ
retrieveInstances()
汎用ビジネス・オブジェクトからの関係インスタンス ID の参加者インスタンスの取得。参加者データはアプリケーション固有のビジネス・オブジェクトに保管されます。 アウトバウンド・マップ
retrieveParticipants()

ヒント:
retrieveInstances()retrieveParticipants() メソッドは、参照表にデータを設定しません。参加者データはすでに表に存在していると想定します。参照関係を含むマップを実行する前に、参照表にデータが設定されていることを確認してください。詳細については、"参照表にデータを設定"を参照してください。

インバウンド・マップのコーディング

インバウンド・マップ内の retrieveInstances() メソッドを呼び出して、ソース・ビジネス・オブジェクト内の参加者データの関係インスタンス ID を検索できます。

次のコード例は、インバウンド・マップ内の参照を実行します。

String addrtype = ObjSrcObj.getString("SrcAttr");
 int[] generic_ids =
 Relationship.retrieveInstances(
    "RelationshipDefName", "ParticipantDefName", dataFromSrcObj);
 if (generic_ids != null && generic_ids.length > 0)
    {
    ObjDestObj.setWithCreate("DestAttr", generic_ids[0]);
    }
  
 else
    {
    throw new MapFailureException(
    logError("No generic instance ID for lookup found");
       "No generic instance ID for lookup found");
    }
 
 

ヒント: retrieveInstances() メソッドをコーディングする場合は、以下のヒントに留意してください。

アウトバウンド・マップのコーディング

アウトバウンド・マップ内の retrieveParticipants() メソッドを呼び出して、ソース・ビジネス・オブジェクト内の参加者データの関係インスタンス ID を検索できます。

次のコード例は、アウトバウンド・マップ内の参照を実行します。

int addrtype = ObjSrcObj.getInt("SrcAttr");
  
 if (addrtype != null)
    {
    Participant[] psft_part = Relationship.retrieveParticipants(
       "RelationshipDefName", "ParticipantDefName", addrtype);
    if (psft_part != null && psft_part.length > 0)
       ObjDestObj.setWithCreate("DestAttr", psft_part[0].getString());
    }
 

ヒント: retrieveParticipants() メソッドをコーディングする場合は、以下のヒントに留意してください。

Copyright IBM Corp. 2004