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

ビジネス・オブジェクト定義内のアプリケーション固有情報は、コネクターに対し、ビジネス・オブジェクトの処理方法に関するアプリケーション依存の指示を与えるものです。コネクターでは、ビジネス・オブジェクトの属性または動詞、あるいはビジネス・オブジェクト自体から取得したアプリケーション固有情報を解析して、作成、更新、検索、および削除操作のための照会を生成します。

コネクターは、ビジネス・オブジェクトのアプリケーション固有情報の一部については、キャッシュに保管し、その情報をすべての動詞の照会をビルドするために使用します。

アプリケーション固有のビジネス・オブジェクトを拡張、または変更する場合は、ビジネス・オブジェクト定義のアプリケーション固有情報が、コネクターの予期する構文に必ず合致するよう確認してください。

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

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

表 11. サポートされているビジネス・オブジェクトのアプリケーション固有情報の概説
アプリケーション固有情報の有効範囲 機能
ビジネス・オブジェクト全体 以下のものを指定します。
  • 対応するデータベース表の名前。
  • コネクターが論理 (ソフト) 削除実行のために WHERE 文節内に使用する値が含まれる列を定義します。
  • 最上位ビジネス・オブジェクトがラッパーであることを指定します。
単純属性 以下のものを指定します。
  • 属性に対応するデータベース列名。
  • 現在のビジネス・オブジェクトの属性と親 (または子) ビジネス・オブジェクトの間の外部キー関係。
  • 固有 ID 値の自動生成。
  • コネクターが現在の属性の値を設定するために必要とする値が含まれる、同一ビジネス・オブジェクト内の別の属性の名前。
  • 検索のソート時に現在の属性を使用するかどうか。
  • 現在の属性の値が null の場合に使用する値。
  • ストリング置換時の動作。
  • ストリングの比較時に LIKE 演算子または = 演算子のどちらを使用するか。
  • LIKE 演算子の使用時に、ワイルドカード位置として使用する値。
子または子ビジネス・オブジェクト配列を含む属性 単一カーディナリティーの子が親に所有されているかどうかを指定します。更新操作において、子データがソース・ビジネス・オブジェクトにない場合、コネクターがその子データを削除するかどうかを指定します。
ビジネス・オブジェクト動詞 動詞 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 パラメーターをアプリケーション固有情報内に含まない場合、コネクターは物理削除を実行します。

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=AUTO
 

UID=uid_name|schema_name.uid_name
 [=UseIfMissing]
 

UID=CW.uidcolumnname[=UseIfMissing]
 
コネクターでは、ビジネス・オブジェクトの固有 ID の生成に、このパラメーターを使用します。属性で固有 ID の生成が必要とされていない場合には、このパラメーターをアプリケーション固有情報に含めないでください。ビジネス・オブジェクトの処理中に固有の ID を保存する方法の詳細は、PreserveUIDSeq プロパティー記述を参照してください。詳細については、"ビジネス・オブジェクトの固有 ID の生成"を参照してください。
注:
CW は、UID の型を示すために使用されるキーワードであり、表名を示すものではありません。
PH=true|false
 
PH=true の場合、対応する単純属性はプレースホルダー属性です。単純属性は、アプリケーション固有の情報 (ASI) がブランクまたはヌルの場合も、プレースホルダーとなります。
CA=set_attr_name| ..set_attr_name 
 
set_attr_name が、現在の個別ビジネス・オブジェクトに含まれる別の属性の名前に設定されている場合、コネクターは、作成操作の際に、その指定されている属性の値を使用して、このパラメーターが指定されている属性の値を設定します。この属性値の設定は、ビジネス・オブジェクトがデータベースに追加される前に行われます。set_attr_name の値は子ビジネス・オブジェクトの属性を参照できませんが、set_attr_name の前にピリオドが 2 つある場合は親ビジネス・オブジェクトの属性を参照できます。このパラメーターがアプリケーション固有情報に含まれていない場合、コネクターは、別の属性の属性値をコピー (CA) せずに、現在の属性の値を使用します。
OB=[ASC|DESC] 
 
このパラメーターに値が指定されている場合、このパラメーターが指定されている属性が子ビジネス・オブジェクト内に存在するものであれば、コネクターでは、検索照会の ORDER BY 文節に、その属性の値を使用します。コネクターは、子ビジネス・オブジェクトを昇順または降順で検索することができます。昇順での検索を指定するには ASC を使用します。降順での検索を指定するには DESC を使用します。このパラメーターがアプリケーション固有情報に含まれていない場合、コネクターは、検索順序を指定するときに、このパラメーターが指定されている属性を使用しません。
UNVL=value
 
値が null の属性を含むビジネス・オブジェクトが検索された場合に、null 表現用としてコネクターに使用させる値を指定します。このパラメーターがアプリケーション固有情報に含まれていない場合、コネクターは、その属性の値として CxIgnore を挿入します。
ESC=[true|false]
 
コネクターが、ReplaceAllStr プロパティーで特定された各文字のすべてのインスタンスを、ReplaceStrList プロパティーで指定された置換ストリングに置き換えるかどうかを決定します。このパラメーターが値を含んでいなければ、コネクターは ReplaceStrList プロパティーの値を使用して決定します。
注:
ESC パラメーター、ReplaceAllStr プロパティー、および ReplaceStrList プロパティーは、データベース・エスケープ文字機能 (単一引用符のエスケープなど) のサポートも提供します。JDBC ドライバーによって提供される Prepared Statements でも同じ機能が利用できるため、今後リリースされるコネクターでは、こうしたプロパティーのサポートが廃止される予定です。現在、コネクターは JDBC 準備済みステートメントの使用をサポートしています。
FIXEDCHAR=true|false
 
表内の列が (VARCHAR 型ではなく) CHAR 型である場合に、このパラメーターが指定されている属性を固定長とするかどうかを指定します。例えば、ある特定の属性が CHAR 型の列にリンクされている場合は、その属性のアプリケーション固有の情報では FIXEDCHAR=true が指定されるため、コネクターはその属性の値を固定長と見なします。このパラメーターが指定されている属性の MaxLength プロパティーの指定値は、データベース内に指定されている CHAR の長さと一致するようにしてください。デフォルトでは FIXEDCHAR=false です。
BYTEARRAY=true|false
 
BYTEARRAY=true の場合、コネクターはデータベースに対するバイナリー・データの読み取りおよび書き込みを実行し、そのデータをストリングとして InterChange Server Express Broker に送信します。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 に対応する属性では Type が String に設定されており、長さを示す値は CLOB の長さを規定するために使用されています。
  • CLOB に対応する属性では、AppSpecificInfo=CN=xyz; CLOB=true と指定されています。
  • その他のタイプの属性の ASI で CLOB を使用すると、エラーが発生します。
  • CLOB=false と指定すると、エラーが発生します。

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

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

属性の外部キーの指定

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

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 ステートメントを発行します。

IBM DB2 および Microsoft SQL Server では、INSERT ステートメントで ID を渡す必要はありません。その代わりに、作成時に ID を生成します。ビジネス・オブジェクトの作成が正常に完了すると、コネクターでこの値を検索および使用することができます。

コネクターは、シーケンスまたはカウンターを使用して ID 値を生成し、その後で INSERT ステートメントを発行します。

処理中に固有 ID シーケンスを保持する方法については、PreserveUIDSeqプロパティーを参照してください。

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

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

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

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

単一カーディナリティーの子を表す属性の、アプリケーション固有情報の形式は、次のとおりです。

CONTAINMENT= [OWNERSHIP|NO_OWNERSHIP]
 

親ビジネス・オブジェクトが子ビジネス・オブジェクトを所有する単一カーディナリティーの関係を表すには、CONTAINMENTOWNERSHIP に設定します。親ビジネス・オブジェクトが子ビジネス・オブジェクトを共用する単一カーディナリティーの関係を表すには、CONTAINMENTNO_OWNERSHIP に設定します。関係が親ではなく子に保管される単一カーディナリティーの関係を表す場合は、CONTAINMENT パラメーターを含めないでください。

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

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

親/子関係を子に保管するビジネス・オブジェクトの配列に対する更新操作に関しては、その子を表す属性でのみ使用できる、KEEP_RELATIONSHIPが用意されています。これを true に設定すると、既存の子のデータがソース・ビジネス・オブジェクト内に表されていない場合に、コネクターがそのデータを削除するのを防ぐことができます。

例えば、ある既存の契約が、既存サイトである New York に関連付けられているとします。また、コネクターで Contract ビジネス・オブジェクトの更新要求を受信し、その要求には San Francisco をサイトとして関連付けるための子ビジネス・オブジェクトが 1 つだけ含まれているとします。サイト・データを表す属性の KEEP_RELATIONSHIPtrue である場合、コネクターは、既存の契約を更新してその契約に 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
 
データベースによってサポートされている演算子 (例: =>ORANDIN (value1,value2)
@
 
getAttrValue(attribute_name) によって取得した値で置換される変数。置換は定位置形式です。このため、コネクターは、: 区切り文字の後に指定された最初の attribute_name 変数 の値で最初の @ を置換します。
..
 
attribute_name 変数に指定されている属性は、直接の親にあたるビジネス・オブジェクトに属すると見なされます。この値が欠落している場合は、現在のビジネス・オブジェクトに属すると見なされます。
attribute_name
 
@ を置換するための値が含まれる属性の名前。

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

Color='RED'
 

このようにアプリケーション固有情報の値が指定されている場合、コネクターは次の WHERE 文節を検索用に作成します。

where item_id=XY45 and Color = 'RED'
 

さらに複雑な例としては、Customer ビジネス・オブジェクトに、値が 1234 の customer_id 属性と、値が 01/01/90 の creation_date 属性が含まれていると考えてみます。また、このビジネス・オブジェクトの親には、値が 20 の quantity 属性が含まれているとします。

さらに、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 と指定されているので、親ビジネス・オブジェクトの 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(@,@,@):..placeholder1,..placeholder2,..placeholder3
 

ここで、line_item_id は子ビジネス・オブジェクトの 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