# 引数

共通コンポーネント情報には、引数を指定できます。引数は最大5個指定できます。

引数には文字型または数値型を指定します。

注意

「,（カンマ）」「{（始めの中かっこ）」「}（終わりの中かっこ）」を使用するときでも「\（円）」でエスケープしないでください。エスケープすると、データ加工が正常に実行されません（なお、「/（スラッシュ）」にはエスケープが必要です）。

(1) 動的指定型の引数と静的指定型の引数

実行時に値を参照している引数を動的指定型、参照していない引数を静的指定型といいます。

動的指定型で引数を指定する場合、引数は入力データを処理するごとに値が変わります。入力設定、マッチング設定、変数で引数を指定する場合が該当します。

静的指定型の引数は、実行時に値が確定しているため、データが変わることはありません。

固定値、文字列（$DSTR）、数値（$DNUM）をutledコマンドの引数に指定する場合が該当します。

(2) 引数で使用できる文字列

引数として指定する文字列は、固定文字列と参照値です。

使用できる参照値は、基本的に仮想テーブルへのクエリ実行で使用できる値と同じです。

表5.3 引数で使用できる参照値

参照値 | 意味
--- | ---
$VAR | 変数
$INUM | 項目番号
$INAME | 項目名
$DNUM | 数値
$DSTR | 文字列
$MINUM | マッチング番号
$RCOUNT | レコード数

(3) 引数の指定例

引数は複数指定できます。数値型および文字型の引数の指定例を次に示します。

数値型の例

  複数の変数、定数を演算記号とともに使うと、計算された結果がそのまま引数になります。

  例：

  $INUM(3) + 4 * $DNUM10

  $INUM(3)が2、$DNUM10が3の場合、2+4*3=14となる

  SQLiteのselectで使用できる演算子を使用できます。

文字型の例

  変数がそのまま文字列として置き換わります。

  例：

  $INUM(3) + 4 * $DNUM10

  $INUM(3)が2、$DNUM10が3の場合、‘2 + 4 * 3’となる

注意

型によって、異なる文字列になります。

(4) 引数のコンポーネントの使用可否

入力データがマッピングされている場合は、共通コンポーネントにマッピングされたデータが引き渡されます。

関数の場合は、通常の関数と同じようにマッピングされたデータに対して処理を実行します。

仮想クエリ($ARG0)、Lua(av0)についても、マッピングされたデータを使用できます。

ARG0～ARG5が共通コンポーネントに設定されていて、マッピング/指定が省略された場合は、型ごとの初期値になります。

引数のコンポーネントでの使用可否を次に示します。

表5.4 引数のコンポーネントの使用可否

コンポーネント型 | 引数(ARG0) | 引数(ARG1～5)
--- | --- | ---
日付 | 使用不可(*1) | 使用不可(*1)
時間 | 使用不可(*1) | 使用不可(*1)
固定文字列 | 使用不可(*1) | 使用不可(*1)
固定数字文字列 | 使用不可(*1) | 使用不可(*1)
関数 | 実際に処理するデータとして使用される。 | $ARG[1-5]として設定可能 動的指定できない引数に動的指定型を使用した場合は空文字として処理される。
仮想クエリ | $ARG0として使用可能 | $ARG[1-5]として使用可能
仮想クエリ(初期処理) | $ARG0として使用可能だが、参照するとNULL（Mタイプの空文字）で使用される。設定しても引き継がれない。 | $ARG[1-5]として使用可能 動的指定型を使用している場合に参照すると、参照値の部分はその項目の初期値として扱う。また、設定した場合に引き継がれない。 静的文字列型の場合は参照可能。設定した場合は引き継がれる。
Luaスクリプト | av0として使用可能 | av[1-5]として使用可能
Luaスクリプト(初期処理) | av0として使用可能だが、参照するとNULL（Mタイプの空文字）で使用される。設定しても引き継がれない。 | av[1-5]として使用可能 動的指定型を使用している場合に参照すると、参照値の部分はその項目の初期値として扱う。また、設定した場合に引き継がれない。 静的文字列型の場合は参照可能。設定した場合は引き継がれる。

*1 | : | 設定した場合、引数としては解釈されず文字列として解釈されます。 (例:"$ARG0"を設定した場合、文字列の"$ARG0"として処理されます)

関数の引数にARG[1-5]を指定できますが、ARG[1-5]が$INUMなどの参照値を使用している場合、関数の引数が参照値を指定できるかどうかチェックし、できない場合はエラーになります。

参照値を指定できる関数を次に示します。

- COALESCE

- CALC_MONTHS

- IF

(5) 初期処理用コンポーネント

仮想クエリ、Luaスクリプトには、実処理前に1回だけ実行できる処理があります。これを初期処理用コンポーネントといいます。初期処理用コンポーネントの目的を次に示します。

表5.5 初期処理用コンポーネント

コンポーネント種別 | 目的 | 使用例
--- | --- | ---
Luaスクリプト（初期処理用） | 引数(ARG1-5)に対して、特殊な処理をする。処理した結果を新しい引数とする。 | 本日の日付を取得し、演算してフォーマット化し、引数として設定する。 環境変数を取得し、引数として設定する。 データ加工内で変動のない為替レートを作成し、引数として設定する。
DataMagic使用ユーザの初期処理を行う。 | 標準出力にメッセージを出力する。 環境変数に設定する。
仮想クエリ（初期処理用） | 引数(ARG1-5)に対して、特殊な処理をする。処理した結果を新しい引数とする。 | 本日の日付を取得し、演算してフォーマット化し、引数として設定する。
コンポーネントID固有のテーブルを作成する。 | 共通コンポーネントの実行時の仮想クエリで使用する変換用の仮想テーブルを作成する。

初期処理用コンポーネントを実行する場合の注意を次に示します。

- 関数の処理対象となるデータはありません。関数の処理対象となるデータを参照すると空文字になります。

- 引数ARGxを参照できますが、動的指定型を参照できません。動的指定型を参照しようとすると、型ごとの初期値になります。

- 返却を0番目（関数の処理対象となるデータ）にしても、後続には引き継がれません。0番目以外を返却した場合にARGxが静的指定型であれば、返却した値に置き換わります。

仮想クエリでリスト返却用のテンポラリテーブルを作成する例

  仮想クエリで初期処理用コンポーネントを作成する場合、リスト返却用のテンポラリテーブルを作成する例を次に示します。

  例：

       create table 県リスト(name, no);
      insert into 県リスト values ('北海道', 1);
      insert into 県リスト values ('青森', 2);
      insert into 県リスト values ('岩手', 3);
      ...

  仮想クエリの初期処理用コンポーネントと仮想クエリは同じステートメントハンドルを共有しているので、仮想クエリの初期処理用コンポーネントで作成したテーブルを仮想クエリから参照できます。

(6) 戻り値として使用できるLuaデータ型

Lua言語で、戻り値として使用できるLuaデータ型を次に示します。

使用できないLuaデータ型を戻り値に設定したデータ加工を実行すると、エラーになります。

表5.6 Luaデータ型の戻り値としての使用可否

Luaデータ型 | 戻り値として使用
--- | ---
Nil(LUA_TNIL) | 可
ブーリアン(LUA_TBOOLEAN) | 不可
数値(LUA_TNUMBER) | 可
文字列(LUA_TSTRING) | 可
関数(LUA_TFUNCTION) | 不可
ユーザーデータ(LUA_TLIGHTUSERDATA、LUA_TUSERDATA) | 不可
スレッド(LUA_TTHREAD) | 不可
テーブル(LUA_TTABLE) | 不可

(7) 引数の処理の例

共通コンポーネントに指定した引数を参照および設定した場合の動作と、引数の流れについて説明します。

例示する処理

  売掛金の加算。

  注文国と為替レートは、データ加工の処理では変動はありません。

初期処理用コンポーネントの処理

  環境変数から注文国を取得し、為替レートを求める。

通常コンポーネントの処理

  1. 現在の売掛金を処理対象となるデータとして取得

  2. 注文国から国名を取得

  3. 製品名に“単品”と半角カッコ付きで“言語”を付与

  4. 製品マスタから単価を取得

  既存売掛金+(数量*単価/為替レート)を新売掛金とし、返却値とする。

また、次に示す特殊仕様があるとします。

- 注文国がCN以外の会社に対しては、予備として数量を+1とする

- 注文国を日本語変換し“中国”の場合は為替レートを+1とする

この例題で設定する引数を次に示します。

次に示す処理は、引数を設定しても引き継がれないことを説明するために追加しています。本来は不要な処理です。

初期処理用コンポーネント(3)

初期処理用コンポーネント(4)

初期処理用コンポーネント(5)

引数設定

  引数 | 引数の内容 | 引数表記 | 引数のタイプ | 引数指定
  --- | --- | --- | --- | ---
  Lua以外 | Lua
  処理対象となるデータ | 売掛金 | $ARG0 | av0 | 文字列 | 指定不可(動的)
  引数1 | 商品名 | $ARG1 | av1 | 文字列 | 動的
  引数2 | 数量 | $ARG2 | av2 | 数字 | 動的
  引数3 | 注文国 | $ARG3 | av3 | 文字列 | 静的
  引数4 | 為替レート | $ARG4 | av4 | 数字 | 静的

通常コンポーネントで処理するデータ（実際に処理するデータ）

  引数 | 引数の内容 | 引数指定
  --- | --- | ---
  処理対象となるデータ | 売掛金 | 10(数値)
  $MINUM(2,4) | 商品名 | "Product"(文字)
  $INAME(数量) | 数量 | 3

引数を参照・設定した場合の動作と流れの例

図5.1 共通コンポーネントの引数の処理の例(1)（初期処理用コンポーネント）

図5.2 共通コンポーネントの引数の処理の例(2)（コンポーネント）