このセクションでは、Delimited
データ・ハンドラーが区切りデータをビジネス・オブジェクトへ変換する方法に関する以下の情報を提供します。
ストリングまたはストリームを変換するときには、Delimited
データ・ハンドラーは以下のことを前提とします。
- データには、Delimiter
メタオブジェクト属性に指定された区切り文字が含まれている。
- ビジネス・オブジェクト名は、データの最初のフィールドに含まれている。
- 動詞は、データの 2 番目のフィールドとして現れる。
- 属性は、ビジネス・オブジェクト定義内での出現順になっている。
- 子コンテナー内のすべてのオブジェクトが同じタイプである。
- データには、カーディナリティー n
の各コンテナー内の子オブジェクトの数を表すトークンが含まれている。
- 各ビジネス・オブジェクトには、ObjectEventId
属性が存在する。CxIgnore
の値が設定されている場合にも、ビジネス・オブジェクトには
ObjectEventId
のエントリーが必要です。実行時にビジネス・オブジェクトのインスタンスを区別するため、データ・ハンドラーが使用するからです。
データ内に複数のオブジェクトがある場合は、オブジェクト間に新しい文字
(例えば、スペース、タブ、改行、または復帰など) を挿入しないでください。
Delimited データ・ハンドラーは、Delimited
形式のファイルを読み取る際、以下のような特別な処理ステップを使用して、ビジネス・オブジェクト属性に CxIgnore または CxBlank 属性値を割り当てます。
- データ・ハンドラーは、Delimited
データで以下のいずれかの条件が検出されると必ず、それに対応する属性値としてこの
CxIgnore 定数 (null) を割り当てます。
- CxIgnore メタオブジェクト属性の値 (その Default Value
プロパティーに構成 されている値)
- 空ストリングの値 (" ")
- データ・ハンドラーは、CxBlank
メタオブジェクト属性が構成されていて、しかもこの構成済みの値を対応する
Delimited データで検出した場合に のみ、CxBlank
定数を属性値として割り当てます。
- 注:
- エスケープ・ストリングと区切り文字は、必ず異なる値にしてください。これらは、Delimiter
データ・ハンドラーの子メタオブジェクト内の Escape および
Delimiter メタオブジェクト属性で構成されます。
次の行には、区切り形式のストリングの例を示してあります。構文は次のとおりです。
Bus_Obj_Name<delimiter >Verb<delimiter >Attr1<delimiter >Attr2<delimiter >
Number_of_child_object_instances<delimiter >Child_Object_Name<delimiter >
Verb<delimiter >Attr1<delimiter >Attr2<EndBO:Bus_Obj_Name>
次のサンプルでは、波形記号 (~) の区切り文字を使用しています。
Customer~Create~p1~p2~p3~1~CustomerAddress~Create~q1~q2~q3~q4~q5~q6~q7~q8~q9~q10~3~
PhoneInfo~Create~r1~r2~r3~r4~r5~r6~r7~PhoneInfo~Create~r1~r2~r3~r4~r5~r6~r7~
PhoneInfo~Create~r1~r2~r3~r4~r5~r6~r7
Delimited
データ・ハンドラーは、次のように区切りデータを処理して、ビジネス・オブジェクトに変換します。
- データ・ハンドラーは、データの最初のトークンからビジネス・オブジェクト名を取得し、データを格納するビジネス・オブジェクトを作成する。
- データ・ハンドラーは、ビジネス・オブジェクトに動詞を設定します。データ・ハンドラーは、トップレベル・ビジネス・オブジェクトの動詞が、区切りデータの
2
番目のトークンに含まれていると想定します。子ビジネス・オブジェクトには動詞が設定されていない可能性があることに注意してください。
- データ・ハンドラーは、子メタオブジェクト
(ビジネス・オブジェクトのアプリケーション固有情報の cw_mo_
タグに名前がリストされているもの)
があるかどうかを判別します。データ・ハンドラーは、ビジネス・オブジェクトのこれらの属性を設定する処理を実行しません。cw_mo_
タグの詳細については、ビジネス・オブジェクトからの変換のインプリメントを参照してください。
- データ・ハンドラーは、OmitObjectEventId
という名前のメタオブジェクト属性を調べる。この属性が true
に設定されている場合、データ・ハンドラーは ObjectEventId
属性にデータを取り込む処理を実行しません。
- データ・ハンドラーは、データを解析し、データからのトークン値を使用して、ビジネス・オブジェクトに残りの単純属性の値を取り込む。データ・ハンドラーは、次のようにコンテナー属性を処理します。
- 属性が単一カーディナリティーである場合は、データ・ハンドラーがストリング内の属性トークンを再帰的に解析し、ビジネス・オブジェクトに属性値を設定し、子ビジネス・オブジェクト・コンテナーを親ビジネス・オブジェクトに追加する。
- 属性が複数カーディナリティーである場合は、データ・ハンドラーが各子オブジェクトの属性トークンを再帰的に解析し、子ビジネス・オブジェクトに属性値を設定し、子ビジネス・オブジェクト・コンテナーを親ビジネス・オブジェクトに追加する。
