ビジネス・オブジェクトのアプリケーション固有の情報

ビジネス・オブジェクト定義内のアプリケーション固有の情報では、ビジネス・オブジェクトの処理方法に関する、アプリケーション依存の指示がコネクターに提供されます。コネクターは、ビジネス・オブジェクトの属性または動詞からの、またはビジネス・オブジェクト自体からのアプリケーション固有の情報を解析して、Create、Update、Retrieve、および Delete 操作に関するクエリーを生成します。

コネクターは、ビジネス・オブジェクトのアプリケーション固有の情報の一部をキャッシュに格納し、この情報を使用してすべての動詞に関するクエリーを作成します。

アプリケーション固有のビジネス・オブジェクトを拡張または変更する場合には、ビジネス・オブジェクト定義内のアプリケーション固有の情報が、コネクターの予期する構文と一致することを確認する必要があります。

このセクションでは、コネクターによってサポートされるビジネス・オブジェクトの、オブジェクト・レベル、属性、および動詞に関するアプリケーション固有情報の形式について説明します。

表 11 に、ビジネス・オブジェクトのアプリケーション固有の情報で使用可能な機能の概要を示します。

表 11. サポートされているビジネス・オブジェクトのアプリケーション固有情報の概説
アプリケーション固有情報の有効範囲 機能性
ビジネス・オブジェクト全体 次を指定します。
  • 対応するデータベース表の名前。
  • 論理 (またはソフト) 削除を実行するために WHERE 文節でコネクターが使用する値を持つ列の定義。
  • トップレベルのビジネス・オブジェクトがラッパーであること。
基本属性 次を指定します。
  • 属性のための、データベース列名。
  • 現在のビジネス・オブジェクトの属性と親または子ビジネス・オブジェクトの属性間の外部キー関係。
  • 固有 ID 値の自動生成。
  • 現在の属性の値を設定するためにコネクターが使用しなければならない値を持つ、同じビジネス・オブジェクト内の別の属性の名前。
  • 検索のソート時に現在の属性を使用するかどうか。
  • 現在の属性がヌルのときに使用する値。
  • ストリング置換の振る舞い。
  • ストリングの比較時に LIKE 演算子または = 演算子のどちらを使用するか。
  • LIKE 演算子の使用時に、ワイルドカード位置として使用する値。
子ビジネス・オブジェクトまたは子ビジネス・オブジェクトの配列が含まれている属性 単一カーディナリティーの子が親によって所有されるかどうかを指定します。

データがソース・ビジネス・オブジェクトに表されていない場合に、コネクターが Update 操作時に子を削除するかどうかを指定します。

ビジネス・オブジェクト動詞 このテキストは、Retrieve 動詞でのみ使用され、検索対象の WHERE 文節に組み込まれる属性を指定します。また、演算子と属性値を指定することもできます。

次の各節では、上記の機能性について詳細に説明します。

ビジネス・オブジェクト・レベルのアプリケーション固有情報

ビジネス・オブジェクト・レベルでのアプリケーション固有情報では、以下の情報を指定できます。

ビジネス・オブジェクト・レベルで、アプリケーション固有の情報のフォーマットは、コロン (:) またはセミコロン (;) 区切り文字で区切られたパラメーターで構成されます。

TN=TableName; SCN=StatusColumnName:StatusValue
 

ここで、TableName は、データベース表を示し、StatusColumnName は、論理的削除の実行に使用されるデータベース・カラムの名前を示し、StatusValue は、ビジネス・オブジェクトが非アクティブな状態にあるか削除されているかを示す値です。

例えば、Customer ビジネス・オブジェクトは、そのビジネス・オブジェクトのアプリケーション固有の情報に指定された、次の値を持つと想定します。

TN=CUSTOMER; SCN=CUSTSTATUS:DELETED
 

また、コネクターはこのカスタマーを削除する要求を受け取ると想定します。そのような値は、コネクターに次の SQL ステートメントを発行させます。

UPDATE CUSTOMER SET CUSTSTATUS = 'DELETED' WHERE CUSTOMER_ID = 2345
 

コネクターに対して SCN パラメーターが組み込まれていない、または値が指定されていない場合には、コネクターはビジネス・オブジェクトをデータベースから物理的に削除します。すなわち、Delete 動詞を持つビジネス・オブジェクトがそのアプリケーション固有の情報に SCN パラメーターを組み込む場合には、コネクターは論理削除を実行します。Delete 動詞を持つビジネス・オブジェクトがそのアプリケーション固有の情報に SCN パラメーターを組み込まない場合には、コネクターは物理削除を実行します。

Update および Delete 操作の両方とも、SCN プロパティーの値を使用する場合があります。

ビジネス・オブジェクト・レベルでは、アプリケーション固有情報はラッパーの指定に使用される場合があります。

WRAPPER=true|false
 

wrapper パラメーターが true に設定されている場合、トップレベルのビジネス・オブジェクトはラッパー・オブジェクトです。ラッパー・オブジェクトはデータベース表やビューによって表されません。ラッパーは関連のないビジネス・オブジェクトのコンテナーとして使用されます。コネクターはトップレベルのオブジェクトを無視し、子のみを処理します。ラッパー・オブジェクトには N のカーディナリティーを持つエンティティーまたは N-1 のカーディナリティーを持つエンティティー、あるいはその両方を含めることができます。

属性レベルのアプリケーション固有情報

属性に関するアプリケーション固有の情報は、属性が基本属性であるか、または子ビジネス・オブジェクトあるいは子ビジネス・オブジェクトの配列を表す属性であるかによって異なります。また、子を表す属性に関するアプリケーション固有の情報も、親/子関係が子に格納されているか、または親に格納されているかによって異なります。子ビジネス・オブジェクトまたは子ビジネス・オブジェクトの配列を表す属性に関するアプリケーション固有の情報については、属性の外部キーの指定を参照してください。

単純属性のアプリケーション固有情報

単純属性では、アプリケーション固有情報の形式は、名前と値のペアを表す 11 個のパラメーターで構成されています。どのパラメーターにも、パラメーター名とその値が含まれます。各パラメーター・セットは、次のパラメーター・セットとコロン (:) 区切り文字によって区切られます。

属性のアプリケーション固有の情報の形式を次に示します。オプショナル・パラメーターは、大括弧 ([ ]) で囲まれます。一組のオプションのメンバーは、垂直バー (|) で区切られます。コロンは区切り文字として予約されています。

CN=col_name:[FK=[fk_object_name.]fk_attribute_name]:
 [UID=[AUTO|uid_name|schema_name.uid_name
 [=UseIfMissing]|CW.uidcolumnname [=UseIfMissing]]]:
 [PH=true|false]:[CA=set_attr_name | ..set_attr_name]:[OB=[ASC|DESC]]:[UNVL=value]:
 [ESC =true|false]:[FIXEDCHAR=true|false]:
 [BYTEARRAY=true|false]:[USE_LIKE=true|false:
 [WILDCARD_POSITION=non-negative number|NONE|BEGIN|END|BOTH]]:
 [CLOB]=true
 

コネクターに処理させる、基本属性のための唯一の必須パラメーターは列名です。例えば、列名のみを指定するには、次の形式を使用します。

CN=customer_id
 

表 12 で、それぞれの名前値パラメーターについて説明します。

表 12. 属性アプリケーション固有情報内の名前値パラメーター
パラメーター 説明
CN=col_name この属性のためのデータベース列の名前です。
FK=[fk_object_name.] fk_attribute_name このプロパティーの値は、親/子関係が親ビジネス・オブジェクトに格納されるか、子ビジネス・オブジェクトに格納されるかによって異なります。

属性が外部キーではない場合には、このパラメーターをアプリケーション固有の情報に組み込みません。

詳細については、"属性の外部キーの指定"を参照してください。

UID=uid_name |schema_name.uid_name[=UseIfMissing] UID=CW.uidcolumnname[=UseIfMissing] コネクターはこのパラメーターを使用して、ビジネス・オブジェクトの固有の ID を生成します。

属性が固有の ID の生成を必要としない場合には、このパラメーターをアプリケーション固有の情報に組み込みません。

ビジネス・オブジェクト処理時の固有の ID の保持の詳細については、PreserveUIDSeqのプロパティーの説明を参照してください。

詳細については、"ビジネス・オブジェクトの固有 ID の生成"を参照してください。

PH=true|false
 
PH=true の場合、対応する単純属性はプレースホルダー属性です。単純属性は、アプリケーション固有の情報 (ASI) がブランクまたはヌルの場合も、プレースホルダーとなります。
CA=set_attr_name | ..set_attr_name set_attr_name が現在のビジネス・オブジェクト内の別の属性の名前に設定されている場合には、コネクターは、Create 操作時にビジネス・オブジェクトをデータベースに追加する前に、指定された属性の値を使用してこの属性の値を設定します。set_attr_name の値は子ビジネス・オブジェクトの属性を参照できませんが、set_attr_name の前にピリオドが 2 つある場合は親ビジネス・オブジェクトの属性を参照できます。

アプリケーション固有の情報にこのパラメーターを組み込まない場合には、コネクターは、属性の値 (CA) を別の属性からコピーしないで、現在の属性の値を使用します。

OB=[ASC|DESC] このパラメーターに値が指定されていて、属性が子ビジネス・オブジェクトにある場合、コネクターは、検索照会の ORDER BY 文節内の属性の値を使用します。

コネクターは子ビジネス・オブジェクトを昇順または降順に検索することができます。

  • 昇順の検索を指定するには ASC を使用します。
  • 降順の検索を指定するには DESC を使用します。

アプリケーション固有の情報にこのパラメーターを組み込まない場合には、コネクターは、検索順序の指定時にこの属性を使用しません。

UNVL=value ヌル値属性を持つビジネス・オブジェクトの検索時にヌルを表すためにコネクターが使用する値を指定します。

アプリケーション固有の情報にこのパラメーターを組み込まない場合には、コネクターは属性の値に対して CxIgnore を挿入します。

ESC=[true|false] コネクターが、ReplaceAllStr プロパティー内で示された各文字のすべてのインスタンスを、ReplaceStrList プロパティー内で指定された置換ストリングで置き換えるかどうかを決定します。このパラメーターに値が含まれていない場合には、コネクターは ReplaceStrList プロパティーの値を使用して、この決定を行います。
注:
ESC パラメーターと ReplaceAllStr および ReplaceStrList プロパティーでは、データベース・エスケープ文字機能 (例えば、単一引用符など) が使用できます。JDBC ドライバーによって提供される Prepared Statements でも同じ機能が利用できるため、今後リリースされるコネクターでは、こうしたプロパティーは推奨されません。現在、コネクターは、JDBC Prepared Statements の使用をサポートしています。
FIXEDCHAR=true|false テーブル内の列がタイプ VARCHAR ではなくタイプ CHAR であるときに、属性を固定長にするかどうかを指定します。例えば、タイプ CHAR の列に特定の属性がリンクされている場合、コネクターは長さで FIXEDCHAR を予期します。その属性のアプリケーション固有の情報が FIXEDCHAR=true を指定するからです。属性の MaxLength プロパティーが CHAR 長であることを確認してください。これは、データベース内で指定されます。デフォルトでは、FIXEDCHAR=false です。
BYTEARRAY=true|false
 
BYTEARRAY=true の場合、コネクターはデータベースに対するバイナリー・データの読み取りおよび書き込みを実行し、そのデータをストリングとして InterChange Server Express に送信します。BYTEARRAY=false がデフォルトです。詳細については、"バイナリー・データを使用した作業"を参照してください。
USE_LIKE=true|false
 
コネクターがストリングを比較する時に = 演算子または LIKE 演算子のどちらを使用するかを指定します。USE_LIKE が true に設定されている場合、ワイルドカード照会を実行するには WILDCARD_POSITION を設定します。USE_LIKE が false に設定されている場合は、= 演算子が使用されます。
WILDCARD_POSITION=non-negative
 

number|NONE|BEGIN|END|BOTH
 
USE_LIKE が true の場合、ワイルドカードの位置を指定するために WILDCARD_POSITION が使用されます。この値は負以外の任意の数値、NONEBEGINEND、または BOTH に設定できます。例えば、BEGIN を使用すると、ワイルドカード文字がストリングの先頭に置かれます (%string)。END を使用すると、ワイルドカード文字がストリングの末尾に置かれます (string%)。BOTH を使用すると、ワイルドカード文字がストリングの先頭と末尾の両方に置かれます (%string%)。
CLOB=true
 
String 属性タイプにのみ適用可能。この属性に対応するデータベース列が CLOB データ型であることを指定します。
注:
CLOB データ型については、以下のように定義されています。
  • CLOB に対応する属性は String 型に設定されており、長さを示す値は CLOB の長さを規定するために使用されています。
  • CLOB に対応する属性では、ASI=CN=xyz; CLOB=true と指定されています。
  • その他のタイプの属性の ASI で CLOB を使用すると、エラーが発生します。
  • CLOB=false と指定すると、エラーが発生します。

通常の String 型の属性は CLOB 対応の属性とほぼ同じですが、ASI に CLOB が使用されていません。CLOB データ型を使用する場合、4 KB 以上のサイズのデータを挿入または更新することができます。ただし、このデータ型を使用できるのは Oracle に限られており、また、Oracle でこのデータ型を使用するためには CLOB をサポートするシン・ドライバーが必要です。それ以外のドライバーを使用すると、エラーが発生する可能性があります。

注:
ビジネス・オブジェクトの属性のアプリケーション固有の情報がいずれも、コネクターに照会を作成または実行させない場合には、コネクターは警告をログに記録し、操作を続行します。コネクターは、例外をスローしたり、失敗を戻したりしません。

属性の外部キーの指定

このプロパティーの値は、親/子関係が親ビジネス・オブジェクトに格納されるか、子ビジネス・オブジェクトに格納されるかによって異なります。

fk_object_name の値が子ビジネス・オブジェクトのタイプと一致しないで、fk_attribute_name の値が親または子 (該当する場合) の属性の名前と一致しない場合には、コネクターはこの属性を外部キーとして処理できません。ビジネス・オブジェクトの名前および属性の名前の大文字小文字は区別されます。

例えば、Customer ビジネス・オブジェクトに、Address 子ビジネス・オブジェクトを表す Addr[1] 属性と、子ビジネス・オブジェクトの基本キーを外部キーとして格納する AID 属性が含まれていると想定します。このケースでは、親の外部キーのアプリケーション固有の情報には、子ビジネス・オブジェクト (Address) のタイプと、その基本キー属性 (ID) の名前が含まれている必要があります。この例では、AID 属性のアプリケーション固有の情報は、FK=Address.ID を組み込むことになります。

外部キー属性の命名

子が単一カーディナリティーまたは複数カーディナリティーで格納されているかどうかに関係なく、および親/子関係が親に格納されているか、子に格納されているかに関係なく、複数の親ビジネス・オブジェクトに同じ子ビジネス・オブジェクトを含めることができます。ただし、親/子関係を格納するすべての親ビジネス・オブジェクトは、子の基本キーを含めるのに同じ名前の属性を使用する必要があります。また、親/子関係を格納するすべての子ビジネス・オブジェクトは、親の基本キーを含めるのに同じ名前の属性を使用する必要があります。図 5 に、上記の関係を示します。

図 5. ビジネス・オブジェクト間の関係の例


図 5 に、次の関係を示します。

注:
同じ子が含まれる複数のビジネス・オブジェクトの場合 (親/子関係が子に格納されている)、すべての親ビジネス・オブジェクトは、子の外部キーを含めるのに同じ名前の属性を使用する必要があります。その子のアプリケーション固有の情報の外部キー・パラメーターは、属性の名前のみを示し、親ビジネス・オブジェクトのタイプは示しません。コネクターは、直接の親がそれぞれの子の所有者であると想定します。
注:
同じ子が含まれる複数のビジネス・オブジェクトの場合 (親/子関係が親に格納されている)、すべての子ビジネス・オブジェクトは、親の外部キーを含めるのに同じ名前の属性を使用する必要があります。

ビジネス・オブジェクトの固有 ID の生成

コネクターは UID パラメーターを使用して、ビジネス・オブジェクトの固有の ID を生成します。コネクターは、シーケンス (Oracle の場合と同様)、またはカウンター (テーブルとして構造化された) を使用して固有の ID を生成し、続いて INSERT ステートメントを発行します。

処理時の固有 ID の保持については、PreserveUIDSeqプロパティーを参照してください。

子を表す属性のアプリケーション固有情報

単一カーディナリティーの子ビジネス・オブジェクトを表す属性は、子が親に所有されるか、複数の親に共有されるかを指定することができます。

単一カーディナリティーの子ビジネス・オブジェクトまたは子ビジネス・オブジェクトの配列を表す属性は、親および子のサブセットの更新時のコネクターの振る舞いを指定することができます。

単一カーディナリティーの子ビジネス・オブジェクトを表す属性

単一カーディナリティーの子ビジネス・オブジェクトを表す属性のアプリケーション固有の情報の形式は、次のようになります。

CONTAINMENT= [OWNERSHIP|NO_OWNERSHIP]
 

親が子ビジネス・オブジェクトを所有する、単一カーディナリティー関係を表すには、CONTAINMENTOWNERSHIP に設定します。親が子ビジネス・オブジェクトを共有する、単一カーディナリティー関係を表すには、CONTAINMENTNO_OWNERSHIP に設定します。関係を親にではなく子に格納する、単一カーディナリティー関係を表すとき、CONTAINMENT パラメーターを含めません。

詳細については、単一カーディナリティー関係および所有権のないデータおよび 関係を子に格納する単一カーディナリティー関係を参照してください。

親のキーを保管する子を表す属性

親/子関係を子に格納するビジネス・オブジェクトの配列での Update 操作では、子を表す属性のための特別な値があります。すなわち、KEEP_RELATIONSHIPtrue に設定して、ソース・ビジネス・オブジェクトで表されない既存の子データをコネクターが削除できないようにすることができます。

例えば、既存の契約が既存のサイト (例: New York) に関連付けられていると想定します。さらに、コネクターが、サイトとして San Francisco が関連付けられている単一の子ビジネス・オブジェクトが含まれている、Contract ビジネス・オブジェクトを更新する要求を受け取ると想定します。KEEP_RELATIONSHIP がサイト・データを表す属性に対して true に評価する場合には、コネクターは契約を更新して、San Francisco とのその関連付けを追加し、New York とのその関連付けを削除しません。

ただし、KEEP_RELATIONSHIPfalse に評価する場合には、ソース・ビジネス・オブジェクトに含まれていない、すべての既存の子データを削除します。そのようなケースでは、契約は San Francisco のみに関連付けられます。

上記のアプリケーション固有の情報の形式は次のようになります。

KEEP_RELATIONSHIP=[true|false]
 

上記のアプリケーション固有の情報の検査では、大文字小文字は無視されます。

バイナリー・データを使用した作業

BYTEARRAY=true の場合、コネクターはデータベースに対するバイナリー・データの読み取りおよび書き込みを実行します。WebSphere Business Integration システム・フレームワークの現行バージョンではバイナリー・データがサポートされないため、バイナリー・データは String に変換されてから統合ブローカーに送信されます。このストリングの形式は、1 バイトにつき 2 文字を使用した 16 進数になります。例えば、データベース内のバイナリー・データが 3 バイトで (10 進数の) 値が (1, 65, 255) の場合、ストリングは「0141ff」となります。

動詞のアプリケーション固有情報形式

コネクターは、Retrieve 動詞および RetrieveByContent 動詞でのみ、動詞に関するアプリケーション固有情報を使用します。このテキストでは、検索対象の WHERE 文節に組み込まれる属性を指定することができます。また、演算子と属性値を指定することもできます。

Retrieve 動詞および RetrieveByContent 動詞に関するアプリケーション固有情報の構文

[condition_variable conditional_operator @ [...]:[..]attribute_name [, ...]]
 

ここで、
condition_variable データベース列の名前。
conditonal_operator データベースによってサポートされる演算子は、例えば、=>ORAND、および IN (value1, value2) です。
@ getAttrValue(attribute_name) によって検索された値で置換される変数。置換は定位置置換式です。すなわち、コネクターは、: 区切り文字の後に指定されている最初の attribute_name 変数の値で、最初の @ を置換します。
.. attribute_name 変数で指定されている属性は、直接の親のビジネス・オブジェクトに属します。この値が欠落している場合には、属性は現在のビジネス・オブジェクトに属します。
attribute_name コネクターが @ と置換する値を持つ属性の名前。

このプロパティーの構文を理解するため、値 XY45 の item_id 属性、および値 RED の Color 属性を Item ビジネス・オブジェクトが持つと想定します。さらに、Retrieve 動詞の AppSpecificInfo プロパティーを次のように指定すると想定します。

Color='RED'
 

上記のアプリケーション固有の情報の値によって、コネクターは検索対象の次の where 文節を作成します。

where item_id=XY45 and Color = 'RED'
 

より複雑な例を示すために、値 1234 の customer_id 属性、および値 01/01/90 の creation_date 属性を Customer ビジネス・オブジェクトが持つと想定します。さらに、このビジネス・オブジェクトの親は値 20 の数量属性を持つと想定します。

さらに、Retrieve 動詞の AppSpecificInfo プロパティーを次のように指定すると想定します。

creation_date > @ OR quantity = @ AND customer_status IN 
 ('GOLD', 'PLATINUM') : creation_date, ..quantity
 

上記のアプリケーション固有の情報の値によって、コネクターは検索対象の次の where 文節を作成します。

where customer_id=1234 and creation_date > '01/01/90' OR quantity = 20 
 AND customer_status IN ('GOLD', 'PLATINUM') 
 

コネクターは、現在のビジネス・オブジェクトの creation_date 属性から日付値 ('01/01/90') を取得します。コネクターは、親ビジネス・オブジェクトの数量属性 (アプリケーション固有の情報で ..quantity よって表されている) から数量値 (20) を取得します。

コネクターは、Retrieve 動詞に関するアプリケーション固有情報の解析を完了すると、ビジネス・オブジェクトの基本キーまたは外部キーに基づいて構成した RETRIEVE ステートメントの WHERE 文節に、解析によって得られたテキストを追加します。コネクターは、先行する ANDWHERE 文節に追加します。アプリケーション固有の情報の値は有効な SQL 構文でなければなりません。RetrieveByContent の場合、アプリケーション固有情報は、値が取り込まれたビジネス・オブジェクトの属性に基づいて構成した RETRIEVE ステートメントの WHERE 文節に追加されます。

また、WHERE 文節は、親ビジネス・オブジェクトの実属性の代わりに、プレースホルダー属性も参照します。これらのプレースホルダーには、アプリケーション固有の情報はありません。属性が ASI について以下のいずれかの条件を満たしている場合は、属性をプレースホルダーにすることができます。

  1. ASI=null or '' を持つ単純属性
  2. ASI=PH=TRUE を持つ単純属性

例えば、ある Order ビジネス・オブジェクトでは、複数カーディナリティーの勘定項目ビジネス・オブジェクトが含まれ、特定の勘定項目のみの検索が必要です。この検索は、Order ビジネス・オブジェクトのプレースホルダー属性を介して処理できます。このプレースホルダーは、子オブジェクトがすべて枝取りされているため、親オブジェクトで必要です。このプレースホルダー属性は、コンマ (,) で区切られた、特定の勘定項目のリストを持つ統合ブローカーによって実行時に取り込むことができます。

上記の例では、子の勘定項目ビジネス・オブジェクト上の Retrieve 動詞で、次の情報を where 文節に追加することになります。

line_item_id in(@):..placeholder

ここで、line_item_id in は、子ビジネス・オブジェクトの ID であり、placeholder は親の属性です。placeholder に値 12,13,14 が含まれる場合、照会は where 文節から次を選択することになります。

line_item_id in(12,13,14)

ここで、SELECT:..FROM:..WHEREx in (1,2,3) は、標準のデータベース SQL 構文です。

RetrieveByContent 動詞で、WHERE 文節の長さが 0 の場合、コネクターは RETRIEVE ステートメントの WHERE 文節内のアプリケーション固有情報を使用します。この機能を使用すると、ユーザーは属性値が取り込まれていないビジネス・オブジェクトを送信し、RetrieveByContent に動詞に関するアプリケーション固有情報を指定できます。また、コネクターは動詞に関するアプリケーション固有情報のみに指定された情報に基づいて WHERE 文節を作成できます。

Copyright IBM Corp. 2004