uCosminexus Interschema ユーザーズガイド

[目次][用語][索引][前へ][次へ]

3.3.1 固定長形式フォーマットの定義

「3.2 簡単なデータ構造のフォーマット定義例」では,簡単な構造を持つ固定長形式のフォーマットを定義しました。ここでは少し複雑な構造を持つ固定長形式のフォーマット定義について説明します。説明するのは次の固定長フォーマットです。

次に,各固定長形式のフォーマットの定義について説明します。

<この項の構成>
(1) 繰り返し構造を持つメッセージのフォーマット(フォーマット「FIX2」)
(2) 複数種類のメッセージを持つ固定長形式のフォーマット(フォーマット「FIX」)

(1) 繰り返し構造を持つメッセージのフォーマット(フォーマット「FIX2」)

ここでは,繰り返し構造を持つメッセージのフォーマットを定義します。複数でまとまった意味を持つ要素で構成された構造が,繰り返し現れます。また,繰り返し現れる構造の下にも構造がネストしています。メッセージのデータ構造を図3-19に示します。

図3-19 メッセージのデータ構造

[図データ]

「単価」「個数」「金額」は三つの要素でまとまって意味を持ち,「分納」と同様に,構造「明細」の子コンポーネントです。構造「明細」の子コンポーネントである「分納」は,1回のデータ中に2度出現します。そして,「分納」は「納入数」「納入番号」というコンポーネントの親の構造でもあります。

このメッセージデータのフォーマットを定義します。フォーマット名は,「FIX2」とします。ここでは,フォーマットの定義や型の定義についての説明を省略し,構造の定義について説明します。

(a) 構造の定義

構造を作成し,構造の下にコンポーネントをドラッグ&ドロップし,構造を作成します。フォーマット「FIX2」の構造を図3-20に示します。

図3-20 フォーマット「FIX2」の構造

[図データ]

フォーマット「FIX2」の構造を定義します。

  1. ルート構造「MSG2」を作成します

    [図データ]

    ルート構造「MSG2」は,「注文番号」「単位」「注文日」「注文総額」という四つの要素と,要素「単価」「個数」「金額」「分納」を持つ構造「明細」で構成されています。
  2. ルート構造の下の構造「明細」を作成します
    ルート構造「MSG2」下に構造「明細」を作成します。既にルート構造は定義してあるので,作成される構造「明細」は普通の構造になります。構造「明細」下のコンポーネントは,定義した順序で出現する逐次構造です。構造「明細」には特別な条件はないので,[構造のプロパティ]ダイアログ以外の設定は必要ありません。

    [図データ]

    次に,ルート構造「MSG2」の子コンポーネントを定義します。
  3. 要素「注文番号」をルート構造「MSG2」にドラッグ&ドロップします
    出現回数は,1を設定します。
    型定義フォルダアイテムを選択し,リストビューからツリービューにデータをドラッグ&ドロップすると容易に定義できます。

    [図データ]

  4. 要素「単位」をルート構造「MSG2」にドラッグ&ドロップします
    出現回数は,1を設定します。

    [図データ]

  5. 作成した構造「明細」をルート構造「MSG2」にドラッグ&ドロップします
    構造定義フォルダアイテムを選択し,リストビューからツリービューにデータをドラッグ&ドロップすると容易に定義できます。

    [図データ]

    ドラッグ&ドロップしたいアイテムの挿入位置を問い合わせる[操作選択]ダイアログが表示されます。

    [図データ]

    ここでは,構造「明細」をルート構造「MSG2」の子コンポーネントとして挿入したいので,「選択アイテムの最後の子アイテムとして挿入する」を選択します。また,出現回数は,3を設定します。

    [図データ]

    FDLファイルでは,定義した構造やコンポーネントをルート構造の下にドラッグ&ドロップし,データの構造をツリーで作成します。ただし,構造の実体は,構造定義フォルダの直下にあります。構造の下の構造は,実体の構造を参照する構造(サブコンポーネントと呼びます)になります。例えば,構造「明細」はルート構造「MSG2」の下のサブコンポーネントです。

    [図データ]

    ルート構造の下の構造「明細」は,構造定義フォルダの下の実体の構造「明細」を参照しているサブコンポーネントです。コンポーネント間は,自コンポーネントの上位構造から下位構造までを数箇所で参照できます。
    次に,ルート構造「MSG2」のほかの子コンポーネントを定義します。
  6. 要素「注文日」「注文総額」をルート構造「MSG2」にドラッグ&ドロップします
    出現回数は,すべて1を設定します。

    [図データ]

    以上でルート構造の子コンポーネントの定義が完成しました。
    次に,構造「明細」の子コンポーネントを定義します。構造「明細」の下には三つの要素と,「納入数」と「納入番号」を構造化した構造があります。まず,子の構造である構造「分納」を作成します。
  7. 構造「分納」を作成します

    [図データ]

    構造の種類は,逐次構造とします。
    次に,構造「分納」のコンポーネントを定義します。
  8. 「納入数」と「納入番号」を型定義からドラッグ&ドロップします
    出現回数は,すべて1を設定します。

    [図データ]

    次に,構造「明細」の子コンポーネントを定義します。
  9. 要素「単価」「個数」「金額」を構造「明細」にドラッグ&ドロップします
    出現回数は,すべて1を設定します。
    最後に,構造「分納」を構造「明細」の子コンポーネントとして定義します。
  10. 構造「明細」の下に構造「分納」をドラッグ&ドロップします
    出現回数は,2を設定します。
    これでフォーマット「FIX2」の定義が完成しました。

    [図データ]

コンポーネントの作成順序には特に規定はありません。あらかじめ構造をすべて作成してから,最後に全体を組み立ててもかまいません。ただし,最終的にできたコンポーネントの順序が,実際のデータの順序と一致していることを確認してください。実際のデータの順序と一致していない場合は,ドラッグ&ドロップでコンポーネントの順序を変更してください。

なお,サブコンポーネントには,直接ドラッグ&ドロップして子コンポーネントを挿入できません。構造定義フォルダの直下にある実体の構造コンポーネントに子コンポーネントをドラッグ&ドロップして挿入する必要があります。

次に,複数のメッセージデータが変換できるフォーマットの定義について説明します。

(2) 複数種類のメッセージを持つ固定長形式のフォーマット(フォーマット「FIX」)

これまでの例題のメッセージのフォーマット定義例では,1回の変換で1メッセージ中の1データしか変換できませんでした。ここでは,複数のメッセージデータが変換できるフォーマットの定義について説明します。

一般的にEDIデータのメッセージには,そのメッセージの意味を示すヘッダ情報が付けられます。あるメッセージに対して,ヘッダ情報として処理番号,メッセージの種類を表すメッセージ区分,発信者,受信者情報を追加します。ヘッダ情報を追加したメッセージの構造を図3-21に示します。

図3-21 複数種類のメッセージを持つフォーマットの構造

[図データ]

構造「MESSAGE」は,仮に配置したメッセージ用の構造で,メッセージ部分のルート構造に相当します。

ヘッダ情報を追加したメッセージの構造を使用して,複数種類のメッセージを持つフォーマットの定義について説明します。

(a) 複数データを変換するフォーマットの定義

ヘッダ情報が付けられたメッセージが複数連続しているデータのフォーマットを定義します。データの構造を図3-22に示します。

図3-22 複数データを変換するフォーマットの構造

[図データ]

ヘッダ情報を追加したメッセージが複数連続しているデータを変換するには,構造「TRANS」の階層を一つ下げて,ルート構造の下へ置きます。同時に,構造「TRANS」の出現回数は最小を1とし,最大を省略します。最大出現回数を省略すると出現回数はn回となるので,データ数が増えてもデータを変換できるようになります。最大出現回数を省略する構造の定義は,その構造をルート構造の直下に置いて,1単位の変換がn回実行される構造を定義する以外には使用しないようにしてください。

[図データ]

複数のメッセージを一つのフォーマットの中で定義し,データの値によって対応するメッセージ構造を選択するフォーマットの定義について説明します。

(b) 複数種類のメッセージを変換するフォーマットの定義(選択構造の定義)

構造中にメッセージ構造が二つあり,データの値によって,対応するメッセージ構造を選択してデータを変換するフォーマットを作成します。データの構造を図3-23に示します。フォーマット名は,「FIX」とします。

図3-23 フォーマット「FIX」の構造

[図データ]

構造「MESSAGE」下の二つのメッセージには,フォーマット「FIX1」で定義したメッセージ「MSG1」,フォーマット「FIX2」で定義したメッセージ「MSG2」を使用します。「MSG1」「MSG2」のデータ構造を図3-24に示します。

図3-24 「MSG1」「MSG2」のデータ構造

[図データ]

図3-24の定義について次に説明します。

まず,「FIX1」から「MSG1」をコピーします。

  1. 型定義フォルダ内の要素の型をコピーします
    「FIX1」の要素の型をすべてコピーします。
  2. 構造定義フォルダ内の構造をコピーします
    「FIX1」から「MSG1」をコピーします。
    次に,「FIX2」から「MSG2」をコピーします。
  3. 型定義フォルダ内の要素の型をコピーします
    「FIX1」と同一名で定義の同じ要素の型はコピーしません。
    「FIX2」だけで定義されている要素「納入数」「納入番号」「注文総額」をコピーします。また,要素「単位」は,「FIX1」の要素「単位」とは異なる値の定義を持つ型であるという想定でコピーします。ただし,同一名で異なる定義はできないので,「MSG2」の要素「単位」には異なる名前を付ける必要があります。「MSG1」の要素「単価」をコピーした後に,「MSG2」の要素「単位」をコピーしようとすると,コピー先の名前を指定するダイアログが表示されます。

    図3-25 [コピー]ダイアログ

    [図データ]

    この例では,「MSG2」の要素「単位」には,新しい要素名「単位2」を付けてコピーします。
  4. 構造定義フォルダ内の構造をコピーします
    「MSG2」をコピーします。コンポーネントとして使用されている「分納」「明細」も同時にコピーされます。
    「MSG2」の要素「単位」に新しい要素名「単位2」を付けたことに伴い,「MSG2」の子コンポーネント「単位」もコンポーネント「単位2」とする必要があります。「MSG2」の子コンポーネント「単位」を削除してから,型定義フォルダから「単位2」を「MSG2」の下にドラッグ&ドロップし,コンポーネントを「単位2」に置き換えてください。

    [図データ]

    以上でデータがコピーできました。
  1. 構造「MESSAGE」の[構造のプロパティ]ダイアログで[順序決定式]ボタンをクリックします
    [順序決定式]ダイアログが表示されます。

    図3-26 [順序決定式]ダイアログ

    [図データ]

  2. 順序決定式を記述します
    ここでは,メッセージ区分の値によって振り分けるようにするので,メッセージ区分のコンポーネント名を記述しますコンポーネント名は,フォーマット名,ルート構造から対象コンポーネントまでを「@」でつないだもので指定します。
     
    FIX@TRANS@HEAD@メッセージ区分
     
    略記法を使用して上記の式を記述すると,次のようになります。
     
    \1@HEAD@メッセージ区分
     
    「\n」はn階層上のコンポーネントを意味する略記法です。「MESSAGE」の直接の親,つまり1階層上のコンポーネント「TRANS」を指定したいので「\1」と記述します。

    [図データ]

    構造「TRANS」の下の構造「HEAD」の子コンポーネントである「メッセージ区分」の値によって,順序を決定することになります。
    次に,コンポーネントに対して順序決定式に対応する値を定義します。コンポーネント「MSG1」「MSG2」に対して,メッセージ区分の値を設定します。
    順序決定値は,[順序決定値]ダイアログに記述します。
  3. 各コンポーネントの[コンポーネントのプロパティ]ダイアログで[順序決定値]ボタンをクリックします
    [順序決定値]ダイアログが表示されます。
  4. 順序決定式に対応する値を記述します

    図3-27 [順序決定値]ダイアログ

    [図データ]

    順序決定式に対応する値と値の属性を設定します。選択構造の選択条件の値は,親の選択構造の順序決定式で記述した内容と同じ型の値を設定する必要があります。
    この例では,「MSG1」に対しては「M1」,「MSG2」に対しては「M2」という,メッセージ区分の値を設定します。要素「メッセージ区分」と同じ型「文字列2バイト」として記述するので,値の属性に「文字列」を指定します。メッセージ区分の値が「M1」のときはメッセージ「MSG1」が,値が「M2」のときはメッセージ「MSG2」が選択されます。
    これで,変換するデータの値によって,選択構造「MESSAGE」の子コンポーネント「MSG1」又は「MSG2」が選択できるようになりました。

以上で,複数種類のメッセージを持ち,複数データを変換できる固定長データのフォーマット「FIX」が定義できました。

[図データ]

次に,レングスタグ形式のフォーマットの定義について説明します。