0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PowerAutomateでQuery stringを解析

Last updated at Posted at 2021-06-23

概要

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でオブジェクトに追加
image.png

解説

まずは変数の初期化でオブジェクト型変数を作成します。
このオブジェクトに、{ key1:value1, key2:value2 }の形でパラメータのマッピングしていきます。
image.png

次に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」の出力で書き換えます。
image.png

これで以下のようにパラメータ名で値を取り出せるようになります。
variables('QueryObject')?['ItemID']

ほかの方法

選択アクションでオブジェクトにマッピングする方法です。
image.png

出力
[
  {
    "key": "action",
    "value": "buy"
  },
  {
    "key": "itemId",
    "value": "111"
  }
]

アレイのフィルターアクションで、パラメータ名でフィルターし配列の1要素目を変数にセットします。
Apply to Eachより高速とはいえ、中々面倒ですね・・
image.png

出力
{"key":"ItemID","value":"111"}

その他

色々検証してみましたが、最終的にエスケープしたJSONを渡して「JSONの解析」でマッピングする方法に落ち着きました・・

{
    "postback": {
        "data": "{ \"itemId\": \"57\", \"action\": \"buy\"}"
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?