🙌

Workatoで1次元配列を2次元配列に直す方法

2022/06/04に公開

ServiceNowのmulti_row_question_answerというパラメータの処理がややこしかったので備忘
WorkatoのLookUpTable最強なのでそれを使うとなんとかなるという話

multi_row_question_answerとは
ServiceNowのパラメータとして、テーブルの1カラムの1レコードに二次元配列をもたせることができるのだが、DBに保存されるときには一次元配列として保存されてしまい、抽出して処理かけるときには二次元配列に戻す必要がある

※multi_row_question_answerについて詳しくはまとめてる方がいたので参考
https://note.com/rhayahi/n/n87024614c998

サンプルデータ

1.multi_row_question_answer

ID 項目ID 回答(枠順、馬名、性別などが順不同に一つづつ入る)
性別 1
馬名 1 ドウデュース
騎手 1 武豊
枠順 4 クリストフ・ルメール
性別 4
馬名 4 イクイノックス
騎手 2 福永祐一
性別 2
馬名 2 ジオグリフ
枠順 3 川田将雅
性別 3
馬名 3 ダノンベルーガ

これを処理するために下記のような形に直したい(一次元データを二次元データに戻したい)

2.前処理が完了した形

ID 馬名 騎手 性別
1 ドウデュース 武豊
2 イクイノックス クリストフ・ルメール
3 ダノンベルーガ 川田将雅
4 ジオグリフ 福永祐一

えっこれ配列で処理しないといけないのつらたんと思ったらTableを使って器用に処理することができるみたいですごいWorkato

0.まずはロジックを回す前にmulti_row_question_answerごとにWorkato内に変数セットテーブルを作成しておく

親ID(二次元配列を付与する元のレコードのシステムID) 列ID 馬名 騎手 性別

1.親ID、質問IDで絞り込んでmulti_row_question_answerを取得

2.上記で作ったテーブルに対して列IDごとに空のレコードを作る

親ID 列ID 馬名 騎手 性別
XXX 1
XXX 2
XXX 3
XXX 4

3.multi_row_question_answerをループして列IDが一致する時に、項目IDと一致する回答のところに値を入力

4.ループが終わったらテーブルを取得する

5.取得したテーブルでループを回して処理を行う

という感じで1次元配列を二次元配列に戻す

つらいのがこのmulti_row_question_answer、
他の変数も含めてテナント内の全ての質問が入ってるので
IDで絞って質問で絞ってみたいなのを

WorkatoもServiceNowもなんですがローコードって処理自体はコード書くより簡単だけど、
その簡単な処理に当たりをつけて機能を探すのに知識が必要だったり頭を捻る必要があってなかなか難しい😓(エンジニアリングから離れてる時間が長くなるほどピンとこなくなってくるので大変😓)

あとダービーは3連複はあたったんですがイクイノックス単勝に強めに張ったのが外れてトントンくらいでした😫

Discussion