ASTERIAを使ってみて感じたあれこれ
ってのを記念に残しておこうかななんて
そもそもASTERIA Warpって何?
に関しては、公式みたほうが早そう
ノーコードで開発ができるから構築期間短縮出来るよってある。
けど、モノと条件と複雑さによる。絶対そう。
コンポーネント(部品)をおいて、それらを矢印で繋げてやればOK~簡単!
誰でも出来るね!というノリだろうけど別にそういうわけじゃない。
まあそんな恨み節たらたらなことはさておき、そんな動作するのかよと思ったところをいくつか覚書
きみそんな動きするの?集
ループ(LoopStart,LoopEndコンポーネント etc)
繰り返し処理を行うには – ASTERIA Warp サポートサイト-ADN
Javaなんかで拡張for文を使うノリで使用すると痛い目を見るやつ。
ループ処理を行いたいとき、ASTERIA Warpはループ開始時のレコード(ストリーム)の件数が0件でも必ず1回ループする。
これの何がまずいって、DBを検索した結果の件数分ループなんかを行いたいときに、
必ず空のレコードが1つ作成されるという点。(マッピングすればの話)
マッピングをしなければまあ問題はないんだけど、DB取得結果をマッピングしないなんて、何の為にデータを取得したのか分からないので、基本ありえないと思う。
■回避方法
- ループ前に件数を判定する。
Javaで例えると、以下の動きをさせる。
- DBからデータを取得
- 取得件数を判定
- 取得件数が1件以上の場合ループ
なんでこんな面倒なことせないかんねん。
Javaならfor文だけで事足りるのに、if文とfor文を使うみたいな動きさせないといけない。
- ループ中のマッピングにレイヤー条件を設定する。
空のレコードが1件出来上がってしまう原因としては、以下の2つがある。
- 0件でもループ内の処理が1回通ってしまうこと
- マッピングを行ってしまうこと
データのマッピングを行うには – ASTERIA Warp サポートサイト-ADN
マッピングについては上のリンク参照
フロー変数に代入するだけとかならいいんだけど、
入力ストリーム(今回の例の場合DBから取得したデータの各項目値)から
出力ストリーム(編集後の値)へのマッピングを行ってしまうと、
空のレコードに対して上記のマッピング処理が行われ、1件存在する扱いとなってしまう。
レイヤー条件を設定すると回避できる件は、
とっても便利!「条件付レイヤー」機能を使ってみた ~菊ちゃんのASTERIA体験記~| ASTERIA Warp 製品ブログ|アステリア
ここらへんの情報を頭に入れていただいた上で、レイヤー条件に以下を設定する。
「$stream.RecordCount>0」
これで、入力ストリームの件数が0件以上のときにはマッピングを行うことになるので、空のレコードが作成されなくなる。
ちなみにこの回避法の場合、レコードが増えてほしくないところまでひたすら上記のレイヤー条件を付けないといけないので、1つ目の回避方法使ったほうが無難な気もする。
サブフローのフロー変数
1回の実行で複数回同じサブフローが呼ばれる場合、
かつフロー変数をマッピングで初期化してない場合の話
フロー変数ってのは初期値が設定できる。
なので、サブフローが呼ばれるたびに初期化されているものだと思っていたけど、
1回の実行で設定したフロー変数はずっと保持しているらしい。
フロー変数の初期化は絶対にフローの最初でマッピングでやろうねという話。
逆に言えば、複数回呼ばれても同じ値を参照したい場合なんかは(そんな場合あるのか?)初期化処理を入れなければいいという話。
ループ内で実行されるサブフローでフロー変数の初期値が使用されないことがあります – ASTERIA Warp サポートサイト-ADN
記事あったんだ。知らなかった。
ループ中のbreak、及びLoopEndのストリームをまとめる
なんかあった気がするけどなんだったっけ
ループ中にbreakを配置している場合、かつループした全件がbreakを通った場合、
かつ、LoopEndのプロパティで「ストリームをまとめる」としていた場合、
全てbreakのためストリームの件数が0件となってほしいが、ループ開始時と全く同じストリームが取れてくるんだったかな…。
あまりにもよく分からない動きだったのでうろ覚え
ループ中にbreak使う処理があるときは気をつけたほうが良い。(思い出したら追記)
定数(外部変数セット)の注意点
外部変数セット自体の命名を変える場合
外部変数セットの内容を変更したらフローがエラーになってしまいました – ASTERIA Warp サポートサイト-ADN
上記リンクは、多分外部変数セット自体の名前を変えたらエラーになったよだと思う。
そりゃそう。もっかい外部変数セット配置してください。
というかこの件に関しては、外部変数セットだけの話ではない。
関数とかそこらへんも名前変えると全部エラーになる。
配置済のものが変わってくれるなんてことはない。命名は慎重にやろう。本当に。
外部変数セットの中の特定の変数名を変更した場合
先に結論を言うと、レイヤー条件で使用している場合は気をつけろ。以上。
レイヤー条件以外での使用箇所(マッピング等)は、変数名が変わっても大体なんとかしてくれるが、レイヤー条件の使用箇所はなんとかしてくれない。
上記にもある通り、外部変数セットの値は「$exvar.<外部変数セット名>.<変数名>」で使用することができる。ここが変わらない。
こいつの何がやっかいかというと、外部変数セットの変数名を変えたことで、存在しない変数名となっても、コンパイルが通ってしまうこと。
は?
変更前に参照箇所を確認して、ちゃんと修正すること。
画像付きのページがないか探したけどなかった。参照箇所の確認方法は上記リンク参照
CSV形式で編集で半角スペースが消える
フィールド定義を編集するには – ASTERIA Warp サポートサイト-ADN
上記のリンクでは、ストリームの項目をCSV形式で編集することが出来る紹介がされているが、これは外部変数セットでも出来る。
例えば、外部変数セットに「半角スペース」という変数があり、その値に「" "(半角スペース1桁)」が設定されていたとする。
上記の設定がされている状態で「CSV形式で編集」とすると、
多分「半角スペース,String, 」みたいな状態で表示される気がする。
この時点ではまだ半角スペースが存在するが、CSV形式で編集のOKだかのボタンを押下し、編集を終了すると、勝手にトリム処理が行われて半角スペースが消える。
余計なお世話すぎる
ちなみに本件も外部変数セットだけに限った話ではない。
こちらマッパー関数のTableくん。
Properties形式は「キー=値」の形式でファイルから値を取得できる子。
こいつも半角スペースは勝手にトリムする。
前についていようが後ろについていようがトリムする。
前についている場合だとエスケープが効くので、半角スペースありの状態にできる。
例)
「code= 12345」の場合「code=\ 12345」とすると、
codeをキーに値を取得した際、「 12345」(先頭半角スペースあり)で取得できる。
ちなみに前者の設定の場合「12345」(先頭半角スペースなし)が取得される。
他参考リンク
ヘルプとぼくはマブダチってくらいお世話になる。
フローの流れとかは有識者に聞いた方がいいが、
コンポーネントの使い方とかは有識者に聞くよりも手っ取り早い。