PowerAppsにて、PowerAutomateを使ってギャラリーを表示する
PowerAppsにて、PowerAutomateを使ってギャラリーを表示する
PowerAppsでギャラリーを使う際には、Microsoft Listsなどをマウントしたり、変数にレコードを格納するなどして、
それぞれをギャラリーのItemsに設定することで表示ができるようになります。
基本的にはこの実装方法で問題はないのですが、PowerAppsでデータ処理を複数書くのは正直面倒かつ管理が大変なため、
正直なところPowerAutomateなどにデータ処理は寄せて、PowerAppsではデータ表示のみにしたい気持ちがあります。
しかし、PowerAutomateのからPowerAppsに渡す戻り値には、「レコード」などを指定することができず、通常の方法ではフローからListsなどのレコードを渡すことはできません。
とはいえ、フローからレコードを渡して、アプリ側は表示するだけにするべきなので、今回は、その実装方法を紹介していきたいと思います。
初心者の方は、冒頭に説明していたListsなどをマウントして、アプリ内でデータ処理する方法が明らかに楽なので、その方法で実装しましょう笑
PowerAutomateの実装
実装方法の結論をいうと、「JSON形式の文字列を渡す」という処理を実装します。
PowerAppsにはJSONをレコードに変換する関数が備わっているので、フロー側ではJSON文字列さえ渡せてしまえば良いという方法です。
- トリガーはPowerApps
- まずはListsを取得
- JSON文字列を格納する変数を用意する
- JSON文字列を作成していく
- JSON文字列を完成させる
- PowerAppsにJSON文字列を返却する
当たり前ですが、アプリからフローを呼び出すためトリガーは「PowerApps(V2)」を指定します。
今回はサンプルなので引数はなしで大丈夫です。
アプリ側で表示させたいListsを読み込みます。
「SharePoint」の「複数項目の取得」を選択して、任意のListsを指定します。
JSON文字列格納用の変数を用意しておきます。
なお、JSON文字列の形式は下記のような形になっているので、変数の初期値には開始記号の「[」を設定しておきます。
[ { "id":"xxxx", "name":"太郎", }, { "id":"yyyy", "name":"次郎", } ]なお改行はあっても無くても問題ないので、今回は無しで実装していきます。
変数が用意できたらJSON文字列を作成していきます。
先ほど取得したListsの内容で繰り返し処理をしながら、JSON文字列を作成していきます。
「文字列変数に追加」ステップにて、中括弧1つ分を作成します。(下図)
繰り返し処理が終了したら、JSON文字列を完成させます。
まずは、文字列の最後に残っている「,」を取り除きます。
PowerAppsにはTrimEnd関数が存在しないので、Substring関数を用いて削除します。
Substring関数は、指定した文字列の開始位置から終了位置までを抽出します。
開始位置は0で問題ないですが、終了位置は「JSON文字列の長さ-1」になります。
下図はあえて、len関数を別枠で格納して、その変数をsubstring関数に入れています。
substring(variables('JSON_STR'),0,sub(length(variables('JSON_STR')),1))上記のように関数を作成することで、JSON文字列の最終文字「,」を取り除くことができます。
最後にJSONの終了記号である「]」を追加して完成です。
最後に「PowerAppsまたはFlowに応答する」ステップを追加し、テキスト形式で先程のJSON文字列を設定します。
フローの実装が完了したら、受け取った文字列をレコードに変換する処理を記述していきます。
PowerAppsには、JSONやTable形式に変換する関数が用意されているので、戻り値を変換していきます。
まずはフローからの戻り値を取り出します。
※なお、今回はあえて変数格納するステップを踏んでいますが、実際には不要です。
Set(JSON_str, Lists返却テスト.Run().json); Set(table_json, Table( ParseJSON(JSON_str) ))まずは、「lists返却テスト」というフローを起動し、戻り値を取り出します。
今回フロー側で戻り値は「json」という名称をつけているので、フローに「.json」をつけるだけでOKです!
Lists返却テスト.Run().jsonさらに、この文字列をJSONに変換するため、ParseJSON関数を使用します。
※今回フローの戻り値は「JSON_str」という変数に格納しているので、関数の引数には「JSON_str」を指定しています。
ParseJSON(JSON_str)最後にJSONをtable形式に変換します。
Table( ParseJSON(JSON_str) )table形式に変換できたら、適当な変数に格納すれば完了です!!
Table形式の変数に変換できれば、この変数をギャラリーのItemsに設定してあげるだけです。
なお、ギャラリー内のThisitemの指定は、下記のように「Value.カラム名」になります。
稼働確認
では、アプリの稼働確認を行います。
適当にボタンを配置し、先程の処理をOnSelectに設定。さらに変数をギャラリーのitemsに設定し、デバッグモードでボタンを押下します。
ギャラリーにも「Value.カラム名」を設定しています。
これで、PowerAppsにListsをマウントしていなくてもギャラリーにデータを表示させることが可能になります!
さいごに
今回はPowerAppsでListsをマウントすることなく、PowerAutomate経由でListsの値をギャラリー表示する方法を紹介しました。
かなり面倒な手順を踏んでいるので、基本的にはこの方法を実装する必要はないかと思います。
しかし、場面によってはフローで制御したい場面もあるかと思うので、知っていて損はないかと思います。ぜひ参考にしてみてください。
今回はこのへんで、ではまた!!
コメント
コメントを投稿