ビジネス・オブジェクト定義内のアプリケーション固有の情報では、ビジネス・オブジェクトの処理方法に関する、アプリケーション依存の指示がコネクターに提供されます。コネクターは、ビジネス・オブジェクトの属性または動詞からの、またはビジネス・オブジェクト自体からの アプリケーション固有の情報を解析して、Create、Update、Retrieve、および Delete 操作に関するクエリーを生成します。
コネクターは、ビジネス・オブジェクトのアプリケーション固有の情報の一部をキャッシュに格納し、この情報を使用してすべての動詞に関するクエリーを作成します。
アプリケーション固有のビジネス・オブジェクトを拡張または変更する場合には、ビジネス・オブジェクト定義内のアプリケーション固有の情報が、コネクターの予期する構文と一致することを確認する必要があります。
このセクションでは、コネクターによってサポートされるビジネス・オブジェクトの、オブジェクト・レベル、属性、および動詞に関するアプリケーション固有情報の形式について 説明します。
表 11 に、ビジネス・オブジェクトのアプリケーション固有の情報で使用可能な機能の概要を示します。
アプリケーション固有情報の有効範囲 | 機能性 |
---|---|
ビジネス・オブジェクト全体 | 次を指定します。
|
基本属性 | 次を指定します。
|
子ビジネス・オブジェクトまたは子ビジネス・オブジェクトの配列が含まれている属性 | 単一カーディナリティーの子が親によって所有されるかどうかを指定します。
データがソース・ビジネス・オブジェクトに表されていない場合に、コネクターが Update 操作時に子を削除するかどうかを指定します。 |
ビジネス・オブジェクト動詞 | このテキストは、Retrieve 動詞でのみ使用され、検索対象の WHERE 文節に組み込まれる属性を指定します。また、演算子と属性値を指定することもできます。 |
次の各節では、上記の機能性について詳細に説明します。
ビジネス・オブジェクト・レベルでのアプリケーション固有情報では、以下の情報を指定できます。
ビジネス・オブジェクト・レベルで、アプリケーション固有の情報のフォーマットは、コロン (:) またはセミコロン (;) 区切り文字で区切られたパラメーターで構成されます。
TN=TableName; SCN=StatusColumnName:StatusValue; WRAPPER=true|false
ここで、TableName は、データベース表を示し、StatusColumnName は、論理的削除の実行に使用されるデータベースの列名を示し、StatusValue は、ビジネス・オブジェクトが非アクティブな状態にあるか削除されているかを示す値です。また、true|false はトップレベル・ビジネス・オブジェクトがラッパー・オブジェクトかどうかを示します。
例えば、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 のカーデ ィナリティーを持つエンティティー、あるいはその両方を含めることができます。
属性に関するアプリケーション固有の情報は、属性が基本属性であるか、または子ビジネス・オブジェクトあるいは 子ビジネス・オブジェクトの配列を表す属性であるかによって異なります。また、子を表す属性に関するアプリケーション固有の情報も、親/子関係が子に格納されているか、または親に格納されているかによって異なります。子ビジネス・オブジェクト または子ビジネス・オブジェクトの配列を表す属性に関するアプリケーション固有の情報に ついては、属性の外部キーの指定を参照してください。
単純属性では、アプリケーション固有情報の形式は、名前と値のペアを表す複数のパラメーターで構成されています。どのパラメーターにも、パラメーター名とその値が含まれます。各パラメーター・セットは、次のパラメーター・セットとコロン (:) 区切り文字によって区切られます。
属性のアプリケーション固有の情報の形式を次に示します。オプショナル・パラメーターは、大括弧 ([ ]) で囲まれます。一組のオプションのメンバーは、垂直バー (|) で区切られます。コロンは区切り文字として予約されています。
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 [TS=true|false]]
コネクターに処理させる、基本属性のための唯一の必須パラメーターは 列名です。例えば、列名のみを指定するには、次の形式を使用します。
CN=customer_id
表 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 文節内の属性の値を使用します。
コネクターは子ビジネス・オブジェクトを昇順または降順に検索することができます。
アプリケーション固有の情報にこのパラメーターを組み込まない場合には、コネクターは、検索順序の指定時にこの属性を使用しません。 |
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 が使用されます。この値は負以外の任意の数値、NONE、BEGIN、END、または BOTH に設定できます。例えば、BEGIN を使用すると、ワイルドカード文字がストリングの先頭に置かれま す (%string)。END を使用すると、ワイルドカード文字がストリングの末尾に置かれます (string%)。BOTH を使用すると、ワイルドカード文字がストリングの先頭と末尾の両方に置 かれます (%string%)。 |
CLOB=true |
String 属性タイプにのみ適用可能。この属性に対応するデータベース列が CLOB データ型であることを指定します。
注:
CLOB データ型については、以下のように定義されています。
通常の String 型の属性は CLOB 対応の属性とほぼ同じですが、ASI に CLOB が使用されていません。CLOB データ型を使用する場合、4 KB 以上のサイズのデータを挿入または更新することができます。ただし、このデータ型を使用できるのは Oracle に限られており、また、Oracle でこのデータ型を使用するためには CLOB をサポートするシン・ドライバーが必要です。それ以外のドライバーを使用すると、エラーが発生する可能性があります。 |
TS=true|false |
DATE 属性タイプで、TS=false が属性のアプリケーション固有情報に指定されている場合は、属性は DATE タイプとして処理されます。TS=true が指定されている場合は、属性は TIMESTAMP タイプとして処理されます。TS のデフォルト値は true です。 |
このプロパティーの値は、親/子関係が親ビジネス・オブジェクトに格納されるか、子ビジネス・オブジェクトに格納されるかによって異なります。
fk_object_name の値が子ビジネス・オブジェクトのタイプと 一致しないで、fk_attribute_name の値が 親または子 (該当する場合) の属性の名前と一致しない場合には、コネクターはこの属性を外部キーとして処理できません。ビジネス・オブジェクトの名前および 属性の名前の大文字小文字は区別されます。
例えば、Customer ビジネス・オブジェクトに、Address 子ビジネス・オブジェクトを表す Addr[1] 属性と、子ビジネス・オブジェクトの基本キーを外部キーとして格納する AID 属性が含まれていると想定します。このケースでは、親の外部キーのアプリケーション固有の情報には、子ビジネス・オブジェクト (Address) のタイプと、その基本キー属性 (ID) の名前が含まれている必要があります。この例では、AID 属性のアプリケーション 固有の情報は、FK=Address.ID を組み込むことになります。
子が単一カーディナリティーまたは複数カーディナリティーで格納されているかどうかに関係なく、および親/子関係が親に格納されているか、子に格納されているかに関係なく、複数の親ビジネス・オブジェクトに同じ子ビジネス・オブジェクトを含めることができます。ただし、親/子関係を格納するすべての親ビジネス・オブジェクトは、子の基本キーを含めるのに同じ名前の属性を使用する必要があります。また、親/子関係を格納するすべての子ビジネス・オブジェクトは、親の基本キーを含めるのに同じ名前の属性を使用する必要があります。図 5 に、上記の関係を示します。
図 5 に、次の関係を示します。
ORGS 属性のアプリケーション固有の情報は次のようになります。
KEEP_RELATIONSHIP=true
KEEP_RELATIONSHIP パラメーターの詳細については、子を表す属性のアプリケーション固有情報を参照してください。
Organization の配列内のそれぞれの子の parentID 属性のアプリケーション固有の情報には、現在の属性に対応する、データベース内の列の名前が含まれており、親の基本キー属性の名前を含めることによって 現在の属性の外部キーを指定します。例えば、次のようになります。
CN=ORG_ID:FK=ID
Addr 属性のアプリケーション固有の情報は次のようになります。
CONTAINMENT=OWNERSHIP
AID 属性のアプリケーション固有の情報には、現在の属性に対応する、データベース内の列の名前が含まれており、子ビジネス・オブジェクトのタイプおよびその基本キー属性の名前を含めることによって 現在の属性の外部キーを指定します。例えば、次のようになります。
CN=FK_AD:FK=Address.ID
子の基本キー属性のアプリケーション固有の情報は次のようになります。
CN=pk
SPID 属性のアプリケーション固有の情報は次のようになります。
CONTAINMENT=NOOWNERSHIP
CONTAINMENT パラメーターの詳細については、子を表す属性のアプリケーション固有情報を参照してください。
SPID 属性のアプリケーション固有の情報には、現在の属性に対応する、データベース内の列の名前が含まれており、子ビジネス・オブジェクトのタイプおよびその基本キー属性の名前を含めることによって 現在の属性の外部キーを指定します。例えば、次のようになります。
CN=FK_SP:FK=StateProvince.ID
子の基本キー属性のアプリケーション固有の情報は次のようになります。
CN=SP_ID
子の parentID 属性のアプリケーション固有の情報には、現在の属性に対応する、データベース内の列の名前が含まれており、その親の基本キー属性の名前を含めることによって 現在の属性の外部キーを指定します。例えば、次のようになります。
CN=SD_ID:FK=ID
コネクターは UID パラメーターを使用して、ビジネス・オブジェクトの固有の ID を生成します。コネクターは、シーケンス (Oracle の場合と同様)、またはカウンター (テーブルとして構造化された) を使用して固有の ID を生成し、続いて INSERT ステートメントを発行します。
テーブル名の構成については、UniqueIDTableName を参照してください。このテーブルをインストールするためのスクリプトは次のようになります。
¥connectors¥OracleApps¥dependencies¥uid_table_oracle.sql
処理時の固有 ID の保持については、PreserveUIDSeqプロパティーを参照してください。
単一カーディナリティーの子ビジネス・オブジェクトを表す属性は、子が親に所有されるか、複数の親に共有されるかを指定することができます。
単一カーディナリティーの子ビジネス・オブジェクトまたは子ビジネス・オブジェクトの配列を表す属性は、親および子のサブセットの更新時のコネクターの振る舞いを指定することができます。
単一カーディナリティーの子ビジネス・オブジェクトを表す属性のアプリケーション固有の情報の形式は、次のようになります。
CONTAINMENT= [OWNERSHIP|NO_OWNERSHIP]
親が子ビジネス・オブジェクトを所有する、単一カーディナリティー関係を 表すには、CONTAINMENT を OWNERSHIP に設定します。親が子ビジネス・オブジェクトを共有する、単一カーディナリティー関係を表すには、CONTAINMENT を NO_OWNERSHIP に設定します。関係を親にではなく子に格納する、単一カーディナリティー関係を表すとき、CONTAINMENT パラメーターを含めません。
詳細については、単一カーディナリティー関係および所有権のないデータおよび 関係を子に格納する単一カーディナリティー関係を参照してください。
親/子関係を子に格納するビジネス・オブジェクトの配列での Update 操作では、子を表す属性のための特別な値があります。すなわち、KEEP_RELATIONSHIP を true に設定して、ソース・ビジネス・オブジェクトで表されない既存の子データをコネクターが削除できないようにすることができます。
例えば、既存の契約が既存のサイト (例: New York) に関連付けられていると想定します。さらに、コネクターが、サイトとして San Francisco が関連付けられている単一の子ビジネス・オブジェクトが 含まれている、Contract ビジネス・オブジェクトを更新する要求を受け取ると想定します。KEEP_RELATIONSHIP が サイト・データを表す属性に対して true に評価する場合には、コネクターは契約を更新して、San Francisco とのその関連付けを追加し、New York とのその関連付けを削除しません。
ただし、KEEP_RELATIONSHIP が false に評価する場合には、ソース・ビジネス・オブジェクトに含まれていない、すべての既存の子データを削除します。そのようなケースでは、契約は 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 | データベースによってサポートされる演算子は、例えば、=、>、OR、AND、および 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 文節に、解析によって得られたテキストを追加します。コネクターは、先行する AND を WHERE 文節に追加します。アプリケーション固有の情報の値は有効な SQL 構文でなければなりません。RetrieveByContent の場合、アプリケーション固有情報は、値が取り込まれたビ ジネス・オブジェクトの属性に基づいて構成した RETRIEVE ステートメントの WHERE 文節に追加されます。
また、WHERE 文節は、親ビジネス・オブジェクトの実属性の代わりに、プレースホルダー属性も参照します。これらのプレースホルダーには、アプリケーション固有の情報はありません。属性が ASI について以下のいずれかの条件を満たしている場合は、属性をプレースホルダーにすることができます。
例えば、ある 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 文節を作成できます。