本日の話題はCSV出力についてです。
CSV出力には1T CSV Creatorを使うと効率よくCSV出力が可能です。これはJsonを作成することでCSV出力するものです。
ありそうなケースとして以下のデータがBubbleのDBに格納されているとします。
Product_ID | Category_ID (List of text) | REF | |
A1001 | X01, X02, X03 | REM1 | |
A1002 | X03, X04 | REM2 |
このデータから以下の様なCSV出力を得たいとします
Product_ID | Category_ID | REF | |
A1001 | X01 | REM1 | |
A1001 | X02 | REM1 | |
A1001 | X03 | REM1 | |
A1002 | X03 | REM2 | |
A1002 | X04 | REM2 |
Categor_IDを展開してCSV出力する形です。かんたんにできそうだとおもってやってみましたがこれが意外に難しくしばらくはまってしまったのでメモです。
結論からいくとどうも現在の1T CSVでは :format as textを使うとある程度ネスト処理が可能なのですがこれを2重にネストした出力はできないようです。
そこで次の手段としてループ処理の伝家の宝刀 Listshifterを使ってできないか検討。できそうでできないのでよく調べてみるとこちらも2重のネスト処理には対応していないことが判明。ListShifter自体も現在はFLOPPYという有料pluginに統一されてしまっているようです。(著者の説明によるとFLOPPYでは2重のネスト処理が可能なようなのですが、Bubbleのpluginでは現在ダウンロードできない状態になっています。2024年に入れば改めてダウンロードできる用になるようです)
結局、本日現在は力ずくで処理しています。具体的には、一つ目のループの値の1番目をcustom stateに入れる⇒2つめのループをListshifterで処理⇒この処理が終わったら一つ目のループの2番目の値をcustom stateに入れる⇒二つ目のループをListShifterで処理⇒・・・で対応することにしました。
ListShifter利用上の注意事項として、ListShifterは二つ以上を同時に使うとたとえ別のListshifterであってもコンフリクトして期待した結果が得られないという点です。
この予防のためには、一つ目のListShifterの完了を確認して(ListShifter KW iteration complete)から次のListShifterを開始する(BEGIN ITERATE LISTSHIFTER KW)必要があることに気をつけてください。
もう一つの留意点は、BEGIN ITERATE LISTSHIFTERで利用するリストとしてcustom stateの値を使う場合にはstateにセットした直後にその値を使ったListShifter を開始すると値がうまく引き渡されないので、stateへのセットとBEGINの間に100ms程度ポーズを入れた方が良いという点です。
FLOPPYが使えるようになったらそちらで試してみたいとおもいます。