Power Automateでよくやる値の変換操作。
変換の分岐が少なければ条件分岐 (Conditionアクション) を入れ子にして対応したりしますね。
この図ではDepartmentという変数の値に応じて、Managerという変数の値の設定を分岐させています。
または、選択肢が多い場合には、Switchアクションを利用することもしばしばだと思います。
わかりやすさでいえば、これらの分岐はわかりやすいですよね。直観的だし。ただ横に長くなりすぎて全体を見渡すのはすごく大変です。
そんなときに役立つ方法をご紹介します。
それがJSON Dictionaryを利用したマッピングです。
考え方
JSON Dictionaryでは、JSONオブジェクトで辞書を作ります。そしてマッピングは、入力をもとに辞書を引くことで実現されます。
入力された値に応じて辞書を探して目当ての値を得ます。似たような方法として、変換用のテーブルを用意しておく方法があります。
この方法でも同じように入力に応じた値をテーブルから取得することはできます。Power Automateでの手続きの違いについては後程紹介します。
Power Automateでの手続き
ここからは上の2つの方法をPower Automateでどうやって実現するかです。
JSON Dictionaryの場合
まずは辞書を定義しましょう。これには**作成 (Compose)**アクションを使います。その入力に以下のようなJSONを書きます。
{
"IT":"John",
"Finance":"Ellis",
"HR":"Pieter",
"Sales":"Mike"
}
あとはManagerという変数に値を設定するアクションで、以下の式を設定します。
outputs('Compose')?[variables('Department')]
ここでやっているのは**『Composeというアクションで定義されたJSONの中で、Departmentの変数の値をキーに持つ部分を取り出して』**という問い合わせです。
例えばDepartment変数に「IT」が入っていれば、先ほど定義したJSONの中でキーが"IT"になっている部分の値、Johnが取り出されます。
ということで、縦に置いた2アクションだけで値のマッピングが実現されました。
変換テーブルの場合
次に変換テーブルを使う場合です。この時も同様に、**作成 (Compose)**アクションで変換テーブルを定義しておきます。
[
{
"Department": "IT",
"Manager": "John"
},
{
"Department": "Finance",
"Manager": "Ellis"
},
{
"Department": "HR",
"Manager": "Pieter"
},
{
"Department": "Sales",
"Manager": "Mike"
}
]
次に配列の中から"Department"の値が変数の値に等しい行を取り出します(たとえばDepartment変数がITなら、最初の一行目を取り出したい)。
これには Filter arrayアクションを使います。
ちょっとだけ面倒ですが、item()?['Department']
のところだけ、式を書きます。
これで変換テーブルから対象の行を取得できました。でもこのままだとFilterの結果は1行だけの配列なので、その中のManagerを取り出すために以下の式を使う必要があります。
first(body('Filter_array'))?['Manager']
このあたり、firstの使い方はこちらのブログを参考にしてください。
さて、これで求めていたマッピングができました。
おわり
今回はPower Automateのクラウドフローで、横長になりがちな値のマッピング処理をいかにすっきりさせるか、方法を2つご紹介しました。
どちらもメリデメあるんですが、個人的には、静的なマッピングなら断然JSON Dictionaryのほうが簡単かなと思います。(式を書くところも少ないし)
今回は配列やDictionaryを手で定義しましたが、なんらかのデータソースから引っ張ってくる場合でも手続きとしては同じです。
横長のフロー見にくいなーと思ったら試してみてください。
本体のほうのブログでも色々とPower Automateの小ネタを書いているので、見てみて下さい!