こんにちは。インフォテリアのキクチです。
先日、AUG(ASTERIA User Group)のTipsWGが開催されました。
このブログでおなじみのHさんと、サポートからKさんが講師を勤め、ASTERIA Warpの便利機能や開発・運用でつまづきがちなポイント、その回避方法を面白おかしく解説してくれました。
ご参加いただいた皆さん、ありがとうございました!
このTipsWGの様子はFacebookなどでも紹介されているので、ご興味のある方はぜひご覧ください。
ちなみにぼくはその後に開催された懇親会にも参加したのですが、ASTERIA Warpをご利用になられているユーザーの皆さんで活発な意見交換が行われていました。お酒も入っていたので脱線しがちではありましたが、ASTERIA Warpを愛してどんな使い方が出来るのか、真剣に考えてくださっているユーザーの生の声に触れさせていただけたのは、とてもいい経験になりました。
あ、うちの営業Sさんも負けてませんよ!
ユーザーのみなさんに楽しんでいただけるように自らのプロポーズ秘話で場を盛り上げてくれました。みなさんに楽しんでいただくために、鉄板ネタを惜し気もなく披露するSさん、さすがです!
今回ご参加いただけなかった皆さんも次回はぜひご参加ください。ASTERIA Warpの便利な使い方と、Sさんの鉄板ネタでおもてなしさせていただきます!
目次
と、前置きが長くなりましたが、今回の体験記では「条件付レイヤー」の機能をご紹介します。
これも便利機能の一つである「レイヤー」でなんと条件分岐まで出来てしまうようです。
この機能を知っていると、複雑になりがちな分岐処理がすっきりすると思いますので、ぜひご活用ください!
さて、前回はMapper関数を使用して、簡単なデータ変換/計算処理を行いました。
ですが、実際の開発ではフィールド数がとても多かったり、たくさんのフィールドがそれぞれ関数にマッピングしていたりとごちゃごちゃしがちだと思います。
ASTERIA Warpでは複雑になりがちなマッピング処理の可読性を高めるために、「レイヤー」という機能をご用意しています。
ひとつの画面だと見づらくなりがちなMapper処理ですが、この「レイヤー」を使用すれば、フィールドごとに処理を見やすく整理することが出来ます。
そんな表示整理を出来る「レイヤー」ですが、実は条件をつけてマッピング処理を分けることが出来るんです。どうも言葉だけでは伝わりづらいですね。
画面ショットつきでご紹介したいと思いますので、どうぞご覧ください!
とあるお客様向けにサンプルのフローを作成していたときのことでした。
ファイルから取得してきたレコードの値に応じてマッピングする内容を変える、という処理に悪戦苦闘していたのですが…
ちなみに、そのときはこんなマッピングをしていました。
一見すると何をしているのかよく分かりませんね(汗)
一応、支店名のデータ(東京・大阪・仙台)に応じて「値引き後単価」の列への出力データを変えています。
東京⇒値引率:0
大阪⇒値引率:0.8
仙台⇒値引率:0.5
みたいな感じです。
プログラム言語的に書くと…
if(支店名="大阪"){
値引き後単価=単価×0.8
}else if(支店名="仙台"){
値引き後単価=単価×0.5
}else{
値引き後単価=単価
}
というところでしょうか。
このマッピングを見たHさんが、教えてくれたのが「条件付レイヤー」でした。
Hさん「あー頑張ったねぇ~もっと簡単に出来る方法あったのになぁ…」
キクチ「なんですと!?もっと簡単に出来るんですか??」
Hさん「うん。『条件付レイヤー』って知ってる?特定の条件のときだけマッピングするレイヤーなんだけど。」
キクチ「『条件付レイヤー』?初めて聞きました!それ使えばマッパーの中で条件分岐しなくてもいいですかね?」
Hさん「それは要件によるけどね。一度マニュアル見てみたら?」
キクチ「はい。ありがとうございます。」
そんなわけで、マニュアルを見てみました。
ふむふむ…
とのこと。なんと…
論理値を使いながらマッピングする必要がないということでしょうか…?
何はともあれ、「条件付レイヤー」を試してみたいと思います。
フローの流れは簡単にファイルからファイルへの連携です。
ちなみに連携するのはこんなファイルです。
「支店名」列の値に応じて値引率を変えて出力したいのです。
マッピングは未着手です。マッピングはどうやるのか…
ひとまず、「東京」のつもりでデフォルトのレイヤーにマッピングしてみます。
「支店名」列が「東京」の時には値引きは行わないので、「単価」列のデータをそのまま「値引き後単価」列へマッピングしています。
さあ、ここからが本番です。
「支店名」列の値が「大阪」・「仙台」のときのマッピングをレイヤーを追加して行いたいと思います。
まずはレイヤーを追加します。レイヤーを追加するにはマッピング画面の下部にある+ボタンを押下します。
立ち上がってくるレイヤー追加画面には「レイヤー名」の入力欄の他にも「条件式」の入力欄があります。
ここに「大阪」、「仙台」に合致する条件を設定してあげるようですね。
ひとまず、「フィールド名=値」の形で入力してみます。
んーコンパイルに失敗してしまいますね。
条件文はどんな感じで作ればいいんでしょう…?先ほどのマニュアルを見返してみます。
「入力ストリームの判定」の項目にそれっぽい記述を見つけました。
どうも、「RQL」(ASTERIA独自の条件式記述の言語)と「XPath」(W3C勧告のXPath仕様)が使えるみたいです。
各フィールドを評価する場合には「$record.」というプレフィックスをつけた上でフィールド名か、フィールドのインデックスでアクセスできるようなので、「支店名」列の値を判定したい場合には
「$record.支店名 = "大阪"」
と記載する感じでしょうか。
早速試してみます。…と、「$」と入力すると候補が表示されました!
入力補完機能があるんですね。これならどんなフィールドや変数を評価したいのか迷わず、間違えずに条件の設定が出来そうです。
ちなみに、「$」を入力するとまずプレフィックスを選択できますが、ほかのプレフィックスが何を表しているかは以下になります。
この辺りは使用例と合わせてマニュアルに記載があるので、一読してから始めるといいかもしれません。
さて、評価するフィールドは候補の中から選択して、後は比較する値を入力すれば…
条件付レイヤーの完成です!
条件がついているレイヤーはタブに色がついています。
同じように「支店名」が「仙台」のときのレイヤーも追加します。
ここまで来れば、もう簡単ですね。大阪、仙台それぞれで「単価」を計算して「値引き後単価」へマッピングするだけです。
こんな感じになりました。
分かりやすいようにデフォルトのレイヤー「レイヤー1」も「支店名=東京」にレイヤー名を変更して…
完成です!コンパイルを通してみると…
コンパイルも無事通りました!早速実行してみると…
無事成功です!ファイルを確認してみると…
しっかり、「支店名」列のデータに応じて「値引き後単価」の値引率が変わっています。
おー簡単に分岐処理が作れてしまいました。。。
複雑になりがちな分岐処理も、「条件付レイヤー」を使えば見た目もすっきりさせることが出来ますね。
また、プログラムだとスペルひとつ間違えただけでエラーになってしまいますが、入力補完機能もあるので安心して設定することが出来ます。
ただ、「条件付レイヤー」を使うときは条件の評価の順番や、マッピングされる順番など注意する点があるようなので、マニュアルの「マッピングと条件の評価の順序」の項目を確認した方がいいですね。
と、いうことで今回はここまでにしたいと思います。
どうですか?分岐処理も簡単に設定できそうな気がしてきませんか?
もちろん、分岐処理用のコンポーネントもたくさんあるんですが、そちらの体験はまた今度試してみたいと思います。
ここまでファイルの連携処理を行ってきましたが、次回からRDBとの連携処理にチャレンジしていきたいと思います。
DBからデータをファイルに出力する。実業務でもよくある使われ方かと思います。
次回はまず、RDBとの接続とデータの取得に焦点を当てて体験していきたいと思いますので、お楽しみに!
ASTERIA Warpのプリセールスエンジニア&体験セミナー講師。関係各所から舞い込んでくるASTERIA Warpに関するご依頼になんとか応えながら日々鍛えてもらっています!
Related Posts
ASTERIA Warp製品の技術情報やTips、また情報交換の場として「ADNフォーラム」をご用意しています。
アステリア製品デベロッパー同士をつなげ、技術情報の共有やちょっとしたの疑問解決の場とすることを目的としたコミュニティです。