uCosminexus Interschema ユーザーズガイド
マップ式を定義する必要があるのは,出力フォーマットビューで,マップ式の定義が必須であることを示すマークが表示されているコンポーネント,可変回出現コンポーネント,及び省略できない型コンポーネントです。
ここでは,出力側のルート構造「MSG1」の子コポーネントすべてにマップ式を定義する必要があります。フォーマット「SEPA1」とフォーマット「FIX1」のコンポーネント間の対応を次に示します。
フォーマット「FIX1」の「注文日」以外の要素は,入力側のフォーマット「SEPA1」のコンポーネントを,出力側のフォーマット「FIX1」の同じ名前のコンポーネントに代入するマップ式を記述します。「注文日」は,入力側の同じ名前のコンポーネントを代入するのではなく,データ変換時の日付が出力されるように設定したいので,関数を使用したマップ式を記述します。
要素ごとにマップ式の記述について説明します。
出力フォーマットのコンポーネントに,対応する入力フォーマットのコンポーネントをドラッグ&ドロップし,代入のマップ式を定義します。
まず,要素「注文番号」に代入のマップ式を記述します。
= SEPA1@MSG1@注文番号 ;
要素「単価」「個数」「金額」は複数回出現するコンポーネントです。入力側と出力側のコンポーネントを対応付けて代入のマップ式を記述するときに,出現順序を対応付けるINDEX関数を使用します。
INDEX関数は,引数で指定したコンポーネントの現在の出現番号(インデクスと呼びます)を取り出し,コンポーネント間の出現順序を1対1で対応付けます。例えば,互いに4回出現する入力側のコンポーネント「A」と出力側のコンポーネント「D」を対応付けたいとします。
1回目に出現した「A」の値は1回目に出現した「D」の値として代入し,2回目に出現した「A」の値は2回目に出現した「D」の値に代入する,というようにコンポーネント間の値の代入を出現回数で対応付けます。
この場合,コンポーネント「D」に対してINDEX関数を使用したマップ式を記述します。入力側のコンポーネント「A」を出力側のコンポーネント「D」にドラッグ&ドロップで代入すると,次のようなマップ式が表示されます。
=IN@ROOT@A[INDEX( )] ;
INDEX関数の括弧内の引数は,式が記述されているコンポーネントの位置を起点として階層数を表すもので,インデクス値の参照先となるコンポーネントを指定します。「0」はマップ式を記述する自コンポーネント,「n」はマップ式を記述するコンポーネントからn階層分,上位に位置するコンポーネントを表します。INDEX関数の引数の指定例を図4-8に示します。
図4-8 INDEX関数の引数の指定例
コンポーネント「D」は自コンポーネントに複数回の出現回数が定義されているので,引数で「0」を指定して自コンポーネントのインデクスを取り出し,その同じインデクスのコンポーネント「A」の値を代入します。マップ式を次に示します。
=IN@ROOT@A[INDEX(0)] ;
INDEX関数で,自コンポーネントである「D」のインデクスを取り出します。インデクスが「1」の場合は,1回目に出現したコンポーネント「A」の値が1回目に出現したコンポーネント「D」に代入されます。同様に,インデクスに対応した値が代入されます。
「INDEX(0)」と記述する代わりに,入力側と出力側の出現順序を対応付ける略記法「?」も使用できます。その場合のマップ式を次に示します。
=IN@ROOT@A[?] ;
では,実際にINDEX関数を使用したマップ式を記述します。
まず,要素「単価」のマップ式を記述します。
= SEPA1@MSG1@単価 [INDEX( )] ;
= SEPA1@MSG1@単価 [INDEX(0)] ;
要素「注文日」は,入力フォーマットの「注文日」を代入するのではなく,データを変換したときの日付が出力されるように,関数を使用してマップ式を記述します。
図4-9 [関数名]ダイアログ
= CURRENTDATE();
以上ですべての要素にマップ式が定義できました。
マップ式の記述法として,マップ式左辺の先頭に代入式のイコール「=」,マップ式の最後にセミコロン「;」が必要です。マップ式を直接入力して記述する場合は,「=」,「;」の記述もれがないように注意してください。
各コンポーネントのマップ式を表4-3に示します。
表4-3 各コンポーネントのマップ式(簡単なマッピング例)
要素 | マップ式 |
---|---|
注文番号 | = SEPA1@MSG1@注文番号 ; |
単位 | = SEPA1@MSG1@単位 ; |
単価 [3] | = SEPA1@MSG1@単価 [INDEX(0)] ; |
個数 [3] | = SEPA1@MSG1@個数 [INDEX(0)] ; |
金額 [3] | = SEPA1@MSG1@金額 [INDEX(0)] ; |
注文日 | = CURRENTDATE() ; |
品名 | = SEPA1@MSG1@品名 ; |
All Rights Reserved, Copyright (C) 2000, Information-technology Promotion Agency, Japan.
All Rights Reserved. Copyright (C) 2005, 2008, Hitachi, Ltd.
All Rights Reserved, Copyright (C) 1985-1998, Microsoft Corporation.