くらっちのクラウド日記

仕事や勉強で得た Microsoft 365 関連の技術知識を投稿していくブログです。

【PowerApps】複数選択したユーザーをJSON関数でPowerAutomateに渡す

はじめに

※この記事は、情報を最新化しつつ Qiita から移行してきたものになります。

今回は、PowerApps で複数選択したユーザーを PowerAutomate に渡す方法をご紹介します。

コンボボックスなどで複数選択した値やテーブル値を、単純に PowerApps から PowerAutomate に渡しても、すべてのデータを受け取ることはできません。
では、どうしたらよいのでしょうか。

結論、複数選択した値を PowerApps から PowerAutomate へ渡す場合は PowerApps 上でJSON関数を用いてJSON形式にしましょう。

目次

PowerAutomate側の構築

まずは PowerAutomate 側でJSONを受け取る準備をします。

全体構成

説明用にシンプルなフローを作成しました。
下図のフローでは、
・PowerApps から受け取った JSON を解析(データの抽出)
・解析した結果を保管する変数を用意
・データ数分、処理を繰り返します。

順番に各アクションの中身を見ていきましょう。

JSONの解析

JSONの解析」アクションで、PowerApps から受け取ったデータ(JSON)を後続の処理で利用できるようにします。

コンテンツには「PowerAppsで確認」をクリックしてJSONの解析_コンテンツ」を配置します。

スキーマにはユーザー情報を取得するため、下記コードをコピペしてください。

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "Claims": {
                "type": "string"
            }
        },
        "required": [
            "Claims"
        ]
    }
}

変数を初期化する

後続の「Apply to each」で利用する変数「username」を用意します。

Apply to each (変数の設定)

「以前の手順から出力を選択」で、「JSONの解析」-「本文」を選択します。
「変数の設定」には、JSONから受け取った「Claims」を挿入します。

ここまでできたら、PowerAutomate 側の設定は完了です。
次はPowerAppsの設定です。

PowerApps側の構築

PowerApps側の画面構成は下図の通り。
UserNameでユーザーを複数選択して実行ボタンをクリックするとJSON形式のデータがPowerAutomate側に渡されます。

利用しているコネクタは下記の2つ。

コネクタ 用途
PowerApps 実行ボタンクリックで PowerAutomate フローを起動。
SharePoint ユーザー列を含むリストです。

ユーザーを複数選択するために

PowerAppsでユーザー選択を可能にするために一番簡単な方法は、SharePointリストのユーザー列を追加することです。
今回は事前にSharePointリスト(JSONチェック リスト)を用意して、Form1として追加しました。
Form1内の「UserName_DataCard1」が複数選択可能なユーザー列です。
DataCard内のコンボボックス(図のDataCardValue2)の設定「複数選択の許可」がオンになっていることを確認してください。

この UserName_DataCard1 でユーザーを複数選択可能にしただけでは、PowerAutomate側にJSON形式でデータを渡すことはできません。
重要なのは、実行ボタンクリック時の処理です。

JSON関数を利用する

「実行ボタン」の「OnSelect」に下記のコードを入力します。

Set(jsonApprover,JSON(DataCardValue2.SelectedItems.Claims,IndentFour));
PowerAutomateのフロー名.Run(jsonApprover);

1行目でUserNameで選択したユーザーをJSON形式に変換しています。
この時「DataCardValue2.SelectedItems.Claims」を指定していますね。
PowerAutomate側でも「JSONの解析」アクションなどで「Claims」という単語が使われていました。
PowerApps側からJSON形式で「Claims」を受け取ったため、PowerAutomate側で同じ名前を指定することでデータを処理できるようになったのです。

JSONに変換されたデータは、2行目の「PowerAutomateのフロー名.Run()」でPowerAutomate側へ渡されます。

JSON関数について

JSON関数の構文は以下の通りです。

JSON(DataStructure [, Format ] )

DataStructureは、テーブル名を入力。
 ※複数選択可能なコンボボックスなどもテーブルとして扱われます。
Formatは、ユーザー情報を使用する場合「IndentFour」を使用。

具体的には以下のように使用します。

JSON(DataCardValue2.SelectedItems.Claims,IndentFour)

JSON関数に関するMicrosoft公式情報はコチラから

実行結果

PowerAppsアプリを実行すると下図の通りユーザー情報を受信できました。

JSONの解析」で出力される値:
PowerAppsから受け取ったユーザー情報が Claims に入っています。

「変数の設定」で出力される値:
JSONの解析」で出力されたデータ分、変数「username」に Claims のデータが入っています。

これで完成です!!

JSONは慣れるまで扱いが難しいですが、理解できればすごく有効な方法です。
JSON関数は幅広く活用できるものだと思いますので、色々チャレンジして使ってみるといいかもですね。