PowerAppsにて、PowerAutomateを使ってギャラリーを表示する

PowerAutomateを使ってギャラリーを表示する。

PowerAppsにて、PowerAutomateを使ってギャラリーを表示する

PowerAppsでギャラリーを使う際には、Microsoft Listsなどをマウントしたり、変数にレコードを格納するなどして、 それぞれをギャラリーのItemsに設定することで表示ができるようになります。
基本的にはこの実装方法で問題はないのですが、PowerAppsでデータ処理を複数書くのは正直面倒かつ管理が大変なため、 正直なところPowerAutomateなどにデータ処理は寄せて、PowerAppsではデータ表示のみにしたい気持ちがあります。
しかし、PowerAutomateのからPowerAppsに渡す戻り値には、「レコード」などを指定することができず、通常の方法ではフローからListsなどのレコードを渡すことはできません。

とはいえ、フローからレコードを渡して、アプリ側は表示するだけにするべきなので、今回は、その実装方法を紹介していきたいと思います。
初心者の方は、冒頭に説明していたListsなどをマウントして、アプリ内でデータ処理する方法が明らかに楽なので、その方法で実装しましょう笑


PowerAutomateの実装

実装方法の結論をいうと、「JSON形式の文字列を渡す」という処理を実装します。
PowerAppsにはJSONをレコードに変換する関数が備わっているので、フロー側ではJSON文字列さえ渡せてしまえば良いという方法です。

  1. トリガーはPowerApps
  2. 当たり前ですが、アプリからフローを呼び出すためトリガーは「PowerApps(V2)」を指定します。
    今回はサンプルなので引数はなしで大丈夫です。

  3. まずはListsを取得
  4. アプリ側で表示させたいListsを読み込みます。
    「SharePoint」の「複数項目の取得」を選択して、任意のListsを指定します。

    今回使用するListsは画面のようになっています。

  5. JSON文字列を格納する変数を用意する
  6. JSON文字列格納用の変数を用意しておきます。
    なお、JSON文字列の形式は下記のような形になっているので、変数の初期値には開始記号の「[」を設定しておきます。

    [   
        {
            "id":"xxxx",
            "name":"太郎",
        },
        {
            "id":"yyyy",
            "name":"次郎",
        }
    ]
    なお改行はあっても無くても問題ないので、今回は無しで実装していきます。

  7. JSON文字列を作成していく
  8. 変数が用意できたらJSON文字列を作成していきます。
    先ほど取得したListsの内容で繰り返し処理をしながら、JSON文字列を作成していきます。 「文字列変数に追加」ステップにて、中括弧1つ分を作成します。(下図)

    なお、中括弧データの区切りは「,」になるので、文字列の最後に「,」を入れるのを忘れずに!

  9. JSON文字列を完成させる
  10. 繰り返し処理が終了したら、JSON文字列を完成させます。
    まずは、文字列の最後に残っている「,」を取り除きます。

    PowerAppsにはTrimEnd関数が存在しないので、Substring関数を用いて削除します。
    Substring関数は、指定した文字列の開始位置から終了位置までを抽出します。 開始位置は0で問題ないですが、終了位置は「JSON文字列の長さ-1」になります。
    下図はあえて、len関数を別枠で格納して、その変数をsubstring関数に入れています。

    substring(variables('JSON_STR'),0,sub(length(variables('JSON_STR')),1))
    上記のように関数を作成することで、JSON文字列の最終文字「,」を取り除くことができます。

    最後にJSONの終了記号である「]」を追加して完成です。

  11. PowerAppsにJSON文字列を返却する
  12. 最後に「PowerAppsまたはFlowに応答する」ステップを追加し、テキスト形式で先程のJSON文字列を設定します。

これで、表示させたいListsデータをJSON文字列に変換し、アプリ側に渡す実装ができました。


  • PowerAppsの実装
  • フローの実装が完了したら、受け取った文字列をレコードに変換する処理を記述していきます。
    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の値をギャラリー表示する方法を紹介しました。
    かなり面倒な手順を踏んでいるので、基本的にはこの方法を実装する必要はないかと思います。
    しかし、場面によってはフローで制御したい場面もあるかと思うので、知っていて損はないかと思います。ぜひ参考にしてみてください。

    今回はこのへんで、ではまた!!

    コメント

    このブログの人気の投稿

    Power Automateでファイル名から拡張子を取得

    PowerAppsで座席表を作成する

    Power AutomateでTeamsのキーワードをトリガーにする