ビジネス・オブジェクト構造

コネクターは、すべての個別ビジネス・オブジェクトが 1 つ以上のデータベース表によって表現されており、かつ、そのビジネス・オブジェクト内の各単純属性 (String または Integer または Date などの単一値を表す属性) が、データベース表のうち 1 つの中にある列によって表現されていることを想定しています。以下の状態は有効です。

SAP 用の WebSphere ビジネス・オブジェクトは、フラット (階層なし) または階層型にすることができます。フラットなビジネス・オブジェクトのすべてとの属性は単純属性で、単一の値を表します。

階層型ビジネス・オブジェクトは、1 つの子ビジネス・オブジェクト、子ビジネス・オブジェクトの配列、または両者の組み合わせを表す属性を持ちます。さらに、それぞれの子ビジネス・オブジェクトも、1 つの子ビジネス・オブジェクトやビジネス・オブジェクトの配列を格納できます。これらの子についても同様です。

ビジネス・オブジェクトの関係

子または配列を表す属性の Cardinality プロパティーは、親と子の関係のタイプを次のように決定します。

コネクターが単一カーディナリティー関係を処理する方法と、複数カーディナリティー関係を処理する方法には、違いはありません。ただし、データベース表が単一カーディナリティー関係を持つ場合と、複数カーディナリティー関係を持つ場合とでは、外部キー関係に構造的な相違があります。この相違は、Advanced Outbound Wizard が SAP Display Transaction からビジネス・オブジェクト定義を生成する際に重要になります。相違点を次に示します。

どちらの場合にも、親ビジネス・オブジェクトと子ビジネス・オブジェクトの外部キー関係は、子ビジネス・オブジェクトのキー属性のアプリケーション固有の情報によって指定されます。詳細については、ビジネス・オブジェクト属性のプロパティーおよび 単純属性のアプリケーション固有の情報を参照してください。 Advanced Outbound Wizard によるこれら 2 つのケースの処理方法については、Wizard によるテーブル間の関係の作成方法を参照してください。

単一カーディナリティー関係の例

図 30 に、SAP でカスタマー・オブジェクトを処理するために開発された、単純な WebSphere ビジネス・オブジェクトの例を示します。このサンプルの SAP_Customer は、それが格納するサンプルのアドレス・オブジェクトに対して、単一カーディナリティー関係を持ちます (addr_data[1] 属性がカーディナリティー 1 を持ちます)。子ビジネス・オブジェクトの基本キー属性 (address_id) は、親ビジネス・オブジェクトの非基本キー (address_id) を参照します。

図 30. カスタマーとアドレスの関係の例


次に示す 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 つのみ持つことができるようになります。

注:
簡潔にするために、本書に掲載されている図には、SAP アプリケーションのデータベース内のテーブルやフィールドを決定するためにコネクターが使用するアプリケーション固有の情報は表示されていません。

複数カーディナリティー関係の例

図 31 に、複数カーディナリティー関係を示します。この例では、ID=ABC は親の基本キーを持つ単純属性で、child[n] は子ビジネス・オブジェクトの配列を表す属性です。

図 31. 複数カーディナリティーのビジネス・オブジェクト関係


図 32 に、SAP でカスタマー・オブジェクトを処理するために開発された、別の WebSphere ビジネス・オブジェクトの例を示します。このサンプルの SAP_Customer は、それが格納するサンプルの販売ビュー・オブジェクトに対して、複数カーディナリティー関係を持ちます (sales_view_data[n] 属性がカーディナリティー n を持ちます)。子ビジネス・オブジェクトの基本キー属性 (customer_id) は、親ビジネス・オブジェクトの基本キー (customer_id) を参照します。

図 32. カスタマーと販売ビュー関係の例


次に示す 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 バイトを超える属性は含まれていません。

注:
ビジネス・オブジェクトが複数のデータベース表を表す場合、各テーブルを表す属性内の値の合計長は 512 バイトを超えることはできません。しかし、この制限はすべての属性の値の合計長には適用されません。例えば、あるビジネス・オブジェクトが Customers および CustomerPartners についての情報を格納しているテーブルのデータを表す場合、Customers を表す属性の値は 512 バイトを超えることができず、CustomerPartners を表す属性の値も 512 バイトを超えることはできませんが、これらの属性を結合した値は 512 バイトを超えることができます。
重要:
ビジネス・オブジェクト定義を作成するために Advanced Outbound Wizard を使用した場合、1 つのテーブルの 512 バイトを超えるデータを表すオブジェクトが検出されると、長さが 512 バイトを超える子ビジネス・オブジェクトには属性は追加されません。ビジネス処理で、ビジネス・オブジェクトが 1 つのテーブルの 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 という状況を戻します。

コネクターは、階層型ビジネス・オブジェクトを検索する際に、以下のステップを実行します。

  1. 統合ブローカーから受け取ったトップレベル・ビジネス・オブジェクトから、すべての子ビジネス・オブジェクトを除去します。
  2. RFC_READ_TABLE 関数を呼び出して、データベースでトップレベル・ビジネス・オブジェクトを検索します。

    コネクターは、要求ビジネス・オブジェクト内のキー値を使用して、SELECT ステートメントの WHERE 文節を作成します。検索の結果、次のいずれかのアクションが実行されます。

  3. すべての子ビジネス・オブジェクト (単一カーディナリティーまたは複数カーディナリティー) を再帰的に検索します。

    コネクターは RFC_READ_TABLE 機能を呼び出します。この機能は、適切な外部キー値を使用して SELECT ステートメントの WHERE 文節を作成します。コネクターは、Required としてマークされた属性を、次の方法で処理します。

    レコードが戻されるたびに、コネクターは以下のアクションを実行します。

    1. 正しいタイプの新しい個別ビジネス・オブジェクトを作成します。
    2. 現在のビジネス・オブジェクトのすべての属性を、戻された行内の値に基づいて設定します。
    3. 現在のビジネス・オブジェクトのすべての子を、再帰的に検索します。

      重要: 単一カーディナリティーの子の検索で複数のレコードが戻された場合、コネクターは最初のレコードのみを戻します。

    4. 現在のビジネス・オブジェクトとそのすべての子を、親の適切な単一カーディナリティー属性または配列属性に挿入します。

注:
ビジネス・オブジェクトには、データベース列に対応しないプレースホルダー属性などの属性が含まれている場合があります。検索の際には、コネクターはトップレベル・ビジネス・オブジェクトのそのような属性については変更せず、統合ブローカーから受け取ったときの値に設定されたままにします。これらの属性のアプリケーション固有の情報は、ブランクにしておく必要があります。

Copyright IBM Corp. 2004