おぼえがき

おぼえがき、独り言、etc...

ASTERIA Warpを使って感じたあれこれ

ASTERIAを使ってみて感じたあれこれ

ってのを記念に残しておこうかななんて

そもそもASTERIA Warpって何?

に関しては、公式みたほうが早そう
ノーコードで開発ができるから構築期間短縮出来るよってある。
けど、モノと条件と複雑さによる。絶対そう。


コンポーネント(部品)をおいて、それらを矢印で繋げてやればOK~簡単!
誰でも出来るね!というノリだろうけど別にそういうわけじゃない。

 

まあそんな恨み節たらたらなことはさておき、そんな動作するのかよと思ったところをいくつか覚書

 

きみそんな動きするの?集

ループ(LoopStart,LoopEndコンポーネント etc)

繰り返し処理を行うには – ASTERIA Warp サポートサイト-ADN

Javaなんかで拡張for文を使うノリで使用すると痛い目を見るやつ。
ループ処理を行いたいとき、ASTERIA Warpはループ開始時のレコード(ストリーム)の件数が0件でも必ず1回ループする。

これの何がまずいって、DBを検索した結果の件数分ループなんかを行いたいときに、
必ず空のレコードが1つ作成されるという点。(マッピングすればの話)

マッピングをしなければまあ問題はないんだけど、DB取得結果をマッピングしないなんて、何の為にデータを取得したのか分からないので、基本ありえないと思う。

 

■回避方法

  • ループ前に件数を判定する。
    Javaで例えると、以下の動きをさせる。
  1. DBからデータを取得
  2. 取得件数を判定
  3. 取得件数が1件以上の場合ループ

なんでこんな面倒なことせないかんねん。
Javaならfor文だけで事足りるのに、if文とfor文を使うみたいな動きさせないといけない。

 

空のレコードが1件出来上がってしまう原因としては、以下の2つがある。

  1. 0件でもループ内の処理が1回通ってしまうこと
  2. マッピングを行ってしまうこと

データのマッピングを行うには – 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

こちらマッパー関数のTableくん。

Properties形式は「キー=値」の形式でファイルから値を取得できる子。
こいつも半角スペースは勝手にトリムする。
前についていようが後ろについていようがトリムする。
前についている場合だとエスケープが効くので、半角スペースありの状態にできる。
例)
「code= 12345」の場合「code=\ 12345」とすると、
codeをキーに値を取得した際、「 12345」(先頭半角スペースあり)で取得できる。
ちなみに前者の設定の場合「12345」(先頭半角スペースなし)が取得される。

 

他参考リンク

help.asteria.com

ヘルプとぼくはマブダチってくらいお世話になる。
フローの流れとかは有識者に聞いた方がいいが、
コンポーネントの使い方とかは有識者に聞くよりも手っ取り早い。