コネクターは、すべての個別ビジネス・オブジェクトが 1 つ以上のデータベース表によって表現されており、かつ、そのビジネス・オブジェクト内の各単純属性 (String または Integer または Date などの単一値を表す属性) が、データベース表のうち 1 つの中にある列によって表現されていることを想定しています。以下の状態は有効です。
SAP 用の WebSphere ビジネス・オブジェクトは、フラット (階層なし) または階層型にすることができます。フラットなビジネス・オブジェクトのすべてとの属性は単純属性で、単一の値を表します。
階層型ビジネス・オブジェクトは、1 つの子ビジネス・オブジェクト、子ビジネス・オブジェクトの配列、または両者の組み合わせを表す属性を持ちます。さらに、それぞれの子ビジネス・オブジェクトも、1 つの子ビジネス・オブジェクトやビジネス・オブジェクトの配列を格納できます。これらの子についても同様です。
子または配列を表す属性の Cardinality プロパティーは、親と子の関係のタイプを次のように決定します。
コネクターが単一カーディナリティー関係を処理する方法と、複数カーディナリティー関係を処理する方法には、違いはありません。ただし、データベース表が単一カーディナリティー関係を持つ場合と、複数カーディナリティー関係を持つ場合とでは、外部キー関係に構造的な相違があります。この相違は、次の理由で重要です。
どちらの場合にも、親ビジネス・オブジェクトと子ビジネス・オブジェクトの外部キー関係は、子ビジネス・オブジェクトのキー属性のアプリケーション固有の情報によって指定されます。 詳細については、ビジネス・オブジェクト属性のプロパティーおよび 単純属性のアプリケーション固有の情報を参照してくださ い。
図 60 に、SAP でカスタマ ー・オブジェクトを処理するために開発された、単純な WebSphere ビジネス・オ ブジェクトの例を示します。このサンプルの SAP_Customer は、それが格納するサンプルのアドレス・オブジェクトに対して、単一カーディナリティー関係を持ちます (addr_data[1] 属性がカーディナリティー 1 を持ちます)。子ビジネス・オブジェクトの基本キー属性 (address_id) は、親ビジネス・オブジェクトの非基本キー (address_id) を参照します。
次に示す SELECT ステートメントとそれらの出力は、上に示したビジネス・オブジェクトによって表されるテーブルでのデータ検索を示したものです。
SELECT * FROM KNA1 KUNNR NAME1 ADRNR ----- ------------- ---------- 10254 JOE'S PIZZA 2208 10255 LARRY'S HARDWARE 2209 SELECT * FROM ADRC ADDRNUMBER CITY1 REGION ---------- ---- ----- 2208 BURLINGAME CA 2209 SAN FRANCISCO CA
上の例では、各カスタマー (Joe's Pizza および Larry's Hardware) は単一アドレスを持ちます。KUNNR 列および ADDRNUMBER 列がそれぞれのテーブルに対する基本キー制約として定義されている場合には、上に示した構造によって、各カスタマーは関連するアドレスを 1 つのみ持つことができるようになります。
図 61 に、複数カーディナリティー 関係を示します。この例では、ID=ABC は親の基本キーを持つ単純属性で、child[n] は子ビジネス・オブジェクトの配列を表す属性です。
図 62 に、SAP でカスタマー・オブ ジェクトを処理するために開発された、別の WebSphere ビジネス・オブジェクト の例を示します。このサンプルの SAP_Customer は、それが格納するサンプルの販売ビュー・オブジェクトに対して、複数カーディナリティー関係を持ちます (sales_view_data[n] 属性がカーディナリティー n を持ちます)。子ビジネス・オブジェクトの基本キー属性 (customer_id) は、親ビジネス・オブジェクトの基本キー (customer_id) を参照します。
次に示す SELECT ステートメントとそれらの出力は、それぞれのテーブルでのデータ検索を示したものです。
SELECT * FROM KNA1 KUNNR NAME1 ----- ------------- 10254 JOE'S PIZZA 10255 LARRY'S HARDWARE SELECT * FROM KNVV KUNNR VKORG VTWEG SPART ---------- ----- ----- ----- 10254 EURP 01 12 10255 EURP 01 09 10255 USA 01 13 10255 USA 01 14
この例では、Joe's Pizza に関連付けられた販売ビュー・レコードが 1 件あるのに対して、Larry's Hardware に関連付けられた販売ビュー・レコードは 3 件あります。上に示した構造により、各カスタマーは関連付けられた販売ビュー・レコードを 0 件以上持つことができます。
SAP の RFC_READ_TABLE 機能では、データ検索は 1 データ行当たり 512 バイトに制限されています。多くの SAP テーブルには、1 行当たり 512 バイトを超えるデータが格納されています。しかし、ほとんどのビジネス・オブジェクトは、すべてのデータベース・フィールドの小さな一部を表しています。そのため、ビジネス・オブジェクト内のすべての属性の合計長が、最大値の 512 バイトを超えることはほとんどありません。
コネクターが 1 つのデータベース表で 512 バイトを超えるデータを検索しなければならない場合、追加のフィールドは、別個の単一カーディナリティー子ビジネス・オブジェクトとして表される必要があります。例えば、あるビジネス・オブジェクトが 1 つのテーブルの 1500 バイトのデータを表す必要がある場合、トップレベル・ビジネス・オブジェクトには、少なくとも 2 つの単一カーディナリティー子ビジネス・オブジェクトが含まれています。親にも、またどちらの子にも、全長 (つまり属性の最大長の合計) が 512 バイトを超える属性は含まれていません。
このセクションでは、Retrieve 動詞を使用するビジネス・オブジェクト要求を処理するためにコネクターが実行するステップの概要を説明します。コネクターは階層型ビジネス・オブジェクトを再帰的に処理します。つまり、すべての個別ビジネス・オブジェクトを処理するまで、各子ビジネス・オブジェクトに対して同じステップを実行します。
統合ブローカーからの検索要求を処理する場合、コネクターは、そのオブジェクトの現在のデータベース表現に一致するビジネス・オブジェクトの返送を試行します。詳細については、次のようになります。
したがって、Hierarchical Dynamic Retrieve Module が Retrieve 動詞を使用するビジネス・オブジェクト要求を受け取ると、アプリケーションのオブジェクト全体を再帰的に降順にたどり、現在のデータベース表現を検索することによって、応答ビジネス・オブジェクトを作成します。検索を行うために、コネクターは要求の際のトップレベル・ビジネス・オブジェクトで指定されたキー値を使用します。そのため、そのトップレベル親のすべての子を含んだ応答ビジネス・オブジェクトは、要求ビジネス・オブジェクトとは異なる単純属性の値や、異なる子ビジネス・オブジェクトを持つ場合があります。
例えば、統合ブローカーが次に示すような SAP_Customer ビジネス・オブジェクトを Hierarchical Dynamic Retrieve Module に渡したとします。
現在のデータベース表現で、SAP_Customer 2345 に格納されている SAP_SalesView 子ビジネス・オブジェクトの配列に sales_org A が含まれていない場合、コネクターの応答ビジネス・オブジェクトには、この子は含まれません。また、SAP_Customer 2345 の現在のデータベース表現に sales_org D および sales_org E が含まれている場合、コネクターはこれらの子を応答ビジネス・オブジェクトに含めます。SAP Hierarchical Dynamic Retrieve Module が Retrieve 処理の最後に 統合ブローカーに戻すビジネス・オブジェクトは、次のようになります。
ビジネス・オブジェクトを検索すると、コネクターは、操作が成功した場合には (操作によってビジネス・オブジェクトが変更されたかどうかには関係なく) VALCHANGE という状況を、操作が失敗した場合には FAIL という状況を戻します。
コネクターは、階層型ビジネス・オブジェクトを検索する際に、以下のステップを実行します。
コネクターは、要求ビジネス・オブジェクト内のキー値を使用して、SELECT ステートメントの WHERE 文節を作成します。検索の結果、次のいずれかのアクションが実行されます。
コネクターは RFC_READ_TABLE 機能を呼び出します。この機能は、適切な外部キー値を使用して SELECT ステートメントの WHERE 文節を作成します。コネクターは、Required としてマークされた属性を、次の方法で処理します。
レコードが戻されるたびに、コネクターは以下のアクションを実行します。