概要
Power AutomateでURIクエリ文字列を解析してフローで利用する方法の検証と覚え書きです。
例:action=buy&itemid=111
今のところ「クエリ文字列の解析」みたいなアクションやパース関数は見当たりませんので、現状のものを組み合わせて実現します。
使いどころ
LINEと連携するフローで、「ユーザーがメッセージ内のボタンまたは画像をタップしたときに、実行されるアクションとしてpostbackアクション」があります。
以下のようなjsonがWebhookに送られるのですが、data部分に文字列でパラメータを渡してあげると、Automate側で受け取って様々な処理が可能です。
サンプルのjsonに合わせ、Power Automateでクエリ文字列を解析する必要がありました。
他の用途は思いつきませんw
{
"type":"postback",
"label":"Buy",
"data":"action=buy&itemid=111",
"text":"Buy"
}
方法
フロー全体
・&でSplitしてForeach
・key,valueに分解
・AddPropertyでオブジェクトに追加
解説
まずは変数の初期化でオブジェクト型変数を作成します。
このオブジェクトに、{ key1:value1, key2:value2 }
の形でパラメータのマッピングしていきます。
次にApply to eachを使います。
split関数により&で分割した配列を作り、一要素ずつ処理します。
split(URIクエリ文字列,'&')
作成アクションを2つ追加し、それぞれ以下のように設定し、Key,Valueを抜き出しておきます。 Valueが%エンコーディングされている場合はdecodeUriComponent()でデコードします。
//作成:key
substring(item(),0,indexOf(item(),'='))
//作成:Value
substring(item(),add(indexOf(item(),'='),1))
次に、addProperty関数を使ってオブジェクトにプロパティを追加します。 使い方はaddProperty(オブジェクト,key,value)です 一旦作成アクションを使って代入します。 ※「変数の設定」により自身のオブジェクトをaddPropertyで書き換えようとするとエラーになるため。
//作成:Add Property
addProperty(variables('QueryObject'),outputs('作成_Key'),outputs('作成_Value'))
最後に、オブジェクト型の変数を先程の「作成 Add Property」の出力で書き換えます。
これで以下のようにパラメータ名で値を取り出せるようになります。
variables('QueryObject')?['ItemID']
ほかの方法
[
{
"key": "action",
"value": "buy"
},
{
"key": "itemId",
"value": "111"
}
]
アレイのフィルターアクションで、パラメータ名でフィルターし配列の1要素目を変数にセットします。
Apply to Eachより高速とはいえ、中々面倒ですね・・
{"key":"ItemID","value":"111"}
その他
色々検証してみましたが、最終的にエスケープしたJSONを渡して「JSONの解析」でマッピングする方法に落ち着きました・・
{
"postback": {
"data": "{ \"itemId\": \"57\", \"action\": \"buy\"}"
}
}