複数の値の候補から、値を選択したいときってありますよね。例えば、入力のコードに対応した名称を出力したい場合など。この記事では、Choice関数を使って複数の値の候補から値を選択する方法を説明します。
出力する値を選択する
次の表のように、「地域区分コード」に対応する「名称」の対応関係があるとします。いわゆるマスターデータみたいなものですね。
地域区分コード | 名称 |
---|---|
1 | 北海道 |
2 | 東日本 |
3 | 西日本 |
4 | 九州・沖縄 |
例えば、入力レコードの「地域区分コード」 の値”3”に対応する名称”西日本”を出力する設定をしてみます。まず、「地域区分コード」をChoice関数の入力に接続します。
Choice関数の「リンク」プロパティの「入力1」に”地域区分コード”が設定されています。「入力1」の値は、入力2以降の値のいずれかを選択するためのインデックスとなります。
選択する値となる「地域区分名」を、Const関数を使ってChoice関数につなぎます。
インスペクターの「リンク」プロパティは、接続されたインデックスである「入力1」と接続された選択値である「入力2」から「入力5」となっています。
この例では、「入力1」が"1"の場合、「入力2」を出力します。「入力1」が"2"の場合、「入力3」を出力します。それでは、次のようなレコードをMapperコンポーネントに接続してフローを実行してみましょう。
注文番号 | 地域区分コード | |
---|---|---|
SO51252 | 3 |
フローを実行すると、「地域区分コード」"3"に対して、「入力4」”西日本"が出力されます。
ベースプロパティを変更する
先ほどのようにChoice関数の「入力1」の値が"1"から始まる場合は問題ありませんが、場合によっては"2"から始まることもあるかもしれませんね。このように「入力1」の最初の値が"1"以外の場合は、「ベース」プロパティに「入力1」の最初の値を指定します。例えば「ベース」プロパティに"2"を指定した場合、「入力1」の値が"2"の時にChoiceされる値として最初につなげた"北海道"が出力されます。「入力1」の値が"3"の時にChoiceされる値として2番目につなげた"東日本"が出力されます。「ベース」プロパティが"1"の場合とは出力される値が1つずれていることが分かります。
これで、Choice関数を使って複数の値の候補から値を選択できるようになりました。今回のように、値の候補が変わることがない決められた値で、その候補数が少ない場合はChoice関数とConst関数を組み合わせると簡単に値の選択ロジックを作ることができます。候補数が多くなる場合はTable関数の方が便利なのでTable関数の使用を考えてください。ただ、値の候補が決まった値ではなく、フロー変数に入っている値とか実行時に決まる値の場合は、Table関数では実現できないのでChoice関数がとても役立つでしょう。
応用例:比較結果を利用した値の選択
値の比較を行った結果を使って、Choice関数で出力する値を選択したい場合は、If関数と組み合わせることで実現できます。例えば、下記の様な条件の場合を考えてみましょう。
条件 | 出力する値 |
---|---|
「販売経路」フィールドの値が"間接販売"の場合 | 「間接販売種類」フィールドの値 |
上記以外の場合 | 「販売経路」フィールドの値 |
上記のような入力値を出力する必要があるときは、If関数をChoice関数に接続します。
Choice関数の「入力1」はIf関数の出力です。「販売経路」フィールドの値が "間接販売"の場合、If関数は"1"を出力し、次のChoice関数は「入力2」を出力します。このマッピングでは、「入力2」は「間接販売種類」フィールドです。
「販売経路」フィールドの値が ”間接販売”ではない場合、If関数は"2"を出力し、Choice関数は「入力3」を出力します。このマッピングでは、「入力3」は「販売経路」フィールドです。
今回の例では、「販売経路」フィールドがIf関数とChoice関数の両方につなげられている点がポイントです。この例は、一見、If関数だけで出来そうなのですが実は出来ません。If関数とChoice関数を組み合わせるパターンとしてよく出てくる処理なので覚えておきましょう!