PowerApps

【PowerApps × PowerAutomate連携】PowerAppsのボタンをクリックして、ギャラリーのデータをエクスポートする方法

ミムチ
ミムチ
Power Appsでインシデント管理アプリを作ったのですが、ギャラリーに表示している一覧データをエクスポートボタンで出力する機能を作りたいですぞ!

パワ実
パワ実
今回は、Power AppsのボタンクリックをトリガーにPower Automateフローを実行して、データをエクスポートする実装方法を解説するよ!

本日はPowerAppsのアプリ画面から、エクスポートボタンをクリックして、ギャラリーに表示されているSharePointリストデータを出力する方法を解説します!

PowerAppsのギャラリーのデータをエクスポートする方法を、以下の2つに分けて考えます。

  1. SharePointリストを全件出力する場合
  2. アプリ上でフィルター等で絞り込まれたデータを出力する場合

Power AppsとPower Automateの連携は、作業の効率化アップにつながりますので、是非活用してみてください!

Power Automateでできることや、Power Appsと連携した活用事例については、以下の記事を参考にしてください。

Power Automateでできることは?Power Apps、Power BIと連携した活用事例も紹介! YouTube動画で見たいかたは、こちらからどうぞ! https://youtu.be/wyA60yvjzg4 ...

この記事でわかること

  1. Power AppsのデータソースとしているSharePointリストデータを出力するため、考えられる方法
  2. SharePointリストを全件出力する具体的な実装手順
  3. ギャラリーのデータを出力する具体的な実装手順


YouTube動画で見たいかたは、こちらからどうぞ!

PowerAppsのボタンで、ギャラリーのデータをエクスポートする方法

初めに、PowerAppsのギャラリー(SharePointリストのデータ)をエクスポートする方法について、考えらえる実装を考えてみます。

このとき、SharePointリストを全件出力する場合と、ギャラリーに表示されているデータのみ出力する場合に分けて考えます。

まず、SharePointリストデータを全件出力する場合を考えます。

例えば報告会の前などに、不定期にデータ全件を出力したい場合はトリガーがないため、PowerAutomateを使わず、SharePointリストから直接手動でデータをエクスポートするのが簡単です。

一方、毎日SharePointリストを全件バックアップしたい場合などは、トリガーがあるため、PowerAutomateを使うとよいです。

このときのトリガーはアプリではなく、例えば毎日朝7時に、SharePointリスト全件を出力する等のPowerAutoamteフローを作成します。

ミムチ
ミムチ
つまりSharePointリスト全件を出力する場合は、Power AppsからPower Automateフローを実行する必要がないのですな?

パワ実
パワ実
その通り!

トリガーがない不定期な出力の場合は、Power Automateさえ必要ないよ。

次に、Power Appsのギャラリーに表示されているデータのみ出力したい場合を考えます。

このときはPower Appsのアプリ画面に設置したボタン等のクリックをトリガーに、Power Automateフローを実行します。

Power Automateフローの実装方法はいくつかあると思いますがは、ここでは以下2つを紹介します。

  1. 全データを引数でPowerAutomateに渡す方法
  2. 出力したいデータのIDを引数でPowerAutomateに渡す方法

1つ目の、全データを引数で渡す方法のイメージは、下図のようになります。

Power Appsのギャラリーに表示されている、Date、Item列のデータをConcat関数を使い、カンマ区切りですべて結合した1つの変数を作り、Power Automateに渡します。

Power Automateに渡したデータを、SharePointフォルダ等にCSV出力します。

2つ目の、出力するデータのIDを引数で渡す方法のイメージは、下図のようになります。

表示されているデータのID、この場合1と3をConcat関数を使い、カンマ区切りですべて結合した1つの変数を作り、PowerAutomateに渡します。

Power AppsからPower Automateに渡せる引数は、テキスト型のみなので、テーブルデータはConcat関数で1つの変数とする

Power Automateは引数として、対象データのIDを受け取り、IDでSharePointリストにフィルターをかけ、対象データをSharePointフォルダのExcel等に出力します。

ミムチ
ミムチ
ムム…Power Automateの実装はなんだか難しそうですな…

パワ実
パワ実
この後の章で、一つ一つやり方を解説していくよ!

SharePointリストを全件出力する場合

SharePointリストを直接エクスポートする方法

SharePointリストを全件エクスポートする方法は簡単です。

1.SharePointリストを開き、エクスポートから、ExcelかCSVを選択します。

SharePointリストからエクスポート

2.ExcelやCSVを開くと、以下のように全レコードがエクスポートされます。

ExcelにエクスポートされたSharePointリスト(全件)

Power Automateでエクスポートする方法

次に、Power AutomateでSharePointリスト全件を出力する方法です。

SharePointリスト全件出力フローの流れ

  1. スケジュール(繰り返し)をトリガーにして、毎朝6:00等にフローを実行する
  2. SharePointリスト全件のデータを取得する
  3. SharePointの指定したフォルダに、②で取得したSharePointリストデータをCSV等で出力する

1.Power Automateを開き、テンプレートから、SharePointで検索します。

Power Automateのテンプレート

2.「毎週SharePointリストアイテムをCSVにコピーする」を選択します。

Power Automateのテンプレートを選択

3.必要なコネクタに接続>続行をクリックすると、フローが自動的に作成されます。

フローの内容を解説していきます。

4.「Recurrence(繰り返し)」を開き、Power Automateフローを実行するスケジュールを設定します。

  • 間隔・頻度:データ出力(フロー実行)の頻度を設定
     例)1日、1週間
  • タイムゾーン:タイムゾーンを選択
     例)UTC+9:00 大阪、札幌、東京
  • 設定時刻(時間・分):データ出力(フロー実行)の時間と分を設定
     例)6:00
Power Automateのトリガー:スケジュール>Reccurence(繰り返し)

この一番上に設定された「Recurrence(繰り返し)」がトリガーとなり、Power Automateフローが実行されます。

今回の場合、毎朝6:00にフローが実行されます。

5.次のアクションは、SharePointの「Get items(複数項目の取得)」です。

ここで、出力するSharePointリストを設定します。

  • サイトのアドレス:出力するSharePointリストがあるサイトを選択
  • リスト名:出力するSharePointリストを選択
Power Automateのアクション:SharePoint>Get items(複数項目の取得)

一番上で設定したトリガーでPower Automateフローが開始され、その後実行するアクションを下に追加します。

設定したアクションは、上から順に実行されていきます。

6.次のアクションでは、データ操作の「Create CSV table(CSVテーブルの作成)」でCSVデータを作成します。

この時設定するデータは、前のステップ「Get items(複数項目の取得)」で取得したSharePointリストデータが自動で設定されています。

7.次のアクションでは、データ操作の「Get current time(作成)」で、協定世界時 (UTC)の現在時刻が設定されています。

これは出力するファイル名に、出力した日時を設定するために作成しています。

Power Automateのアクション:データ操作>CSVテーブルの出力、作成

ここでは、関数式で「utcnow(‘M’)」と設定しています。

この時「August 31」等と出力されますが、UTC時間(日本時間-9時間)日付で出力されることに注意しましょう。

日本時間で出力する方法は、次の章で解説していきます。

8.最後のアクションで、OneDriveの「Create file(ファイルの作成)」が自動で作成されていますが、これをSharePointの「ファイルの作成」に変更します。

Create fileの上で「+」>「アクションの追加」をクリックします。

Power Automate:アクションの追加

SharePointで検索し、「ファイルの作成」を選択して、アクションを追加します。

Power Automate:アクションの追加(SharePoint>ファイルの作成)

9.「ファイルの作成」で、出力するファイルの設定をします。

  • サイトのアドレス:ファイルを出力するSharePointサイトを選択
  • フォルダーのパス:ファイルを出力するフォルダーパスを選択
  • ファイル名:出力するファイル名を設定
     SharePoint list items at (出力日).csv
  • ファイルコンテンツ:出力するデータを設定
     7.のCreate CSV tableで取得したデータを設定

ここでファイル名、ファイルコンテンツは、元々自動で作成されていたOneDriveの「Create file(ファイルの作成)」からコピペすると楽です。

Power Automateのアクション:SharePoint>ファイルの作成

前のステップの「データ操作」で作成した「CSVテーブル」、「UTC時刻」のデータを、「動的コンテンツ」で設定することができます。

10.OneDriveの「Create file(ファイルの作成)」を削除し、「保存」をクリックします。

「テスト」をクリックし、フローをテスト実行してみます。

Power Automate:フローのテスト

11.テスト実行が成功したら、「ご利用のフローが正常に実行されました。」と表示されます。

Power Automate:フローの実行結果

12.ファイル出力先に指定したSharePointフォルダを見ると、csvファイルが作成されているので、開いて確認してみます。

SharePointフォルダに出力されたcsvファイル

13.このように、適切にファイルが出力されていることが確認できました。

出力されたCSVファイル

ミムチ
ミムチ
SharePointリスト全件を出力するのは、思ったよりも簡単ですな。

パワ実
パワ実
元々用意されているテンプレートを使えばいいからね。

出力先がSharePointフォルダではなく、OneDriveのままでいい場合は、最後のアクション修正さえ必要ないよ!

フィルター等で絞り込んだデータを出力する場合

次に、ギャラリーで表示されているデータのみ出力したい場合は、Power Appsのボタンクリック等をトリガーに、Power Automateフローを実行する必要があります。

1.Power Appsの編集画面でボタンを設置し、ボタンを選択した状態で、「アクション」>「Power Automate」をクリックします。

Power Apps:アクション>Power Automate

2.「フローの追加」>「フローを新規作成する」から、新しいPower Automateフローを作成します。

Power Apps:Power Automateフローの新規作成

フローの実装方法について、ここでは2つ紹介していきます!

(方法1)ギャラリーのデータ全件を引数で渡す方法

最初に、ギャラリーのデータ全件を引数で渡す方法です。

ギャラリーのデータ全件を引数で渡すフローの流れ

  1. Power Appsのボタンをトリガーにして、フローを実行する
  2. フロー実行時、Power Appsから、ギャラリーの全データを1つの変数にして、引数で渡す
  3. SharePointの指定したフォルダに、②で取得したギャラリーの全データをCSVで出力する

1.トリガーは自動的にPower Appsが設定されています。

次のアクションは「+新しいステップ」から、SharePoint>ファイルの作成を追加します。

2.SharePointのファイルの作成で、ギャラリーのデータを出力する場所と、コンテンツ(データの中身)を設定します。

  • サイトのアドレス:ファイルを出力するSharePointサイトを選択
  • フォルダーのパス:ファイルを出力するフォルダーパスを選択
  • ファイル名:出力するファイル名を設定
  • ファイルコンテンツ:出力するデータを設定

3.ファイル名は、Power Appsから出力時の日時を引数で渡します。

動的なコンテンツから、PowerAppsで確認を選択し、その後ろに、「.csv」と入力します。

Power Automate:SharePoint>ファイルの作成>ファイル名

ファイル名を”Backup.csv”等の固定名でつけると、2回目以降、同じ名前のファイルで出力できない(あるいは上書き設定する)ため、出力日時でファイル名をつけるのが便利です。

4.ファイルコンテンツも、Power Appsから全データを引数で渡しますが、このまま出力すると文字化けすることがあるため、式を選択し、以下のような関数式を設定し、OKをクリックします。

concat(decodeUriComponent(‘%EF%BB%BF’),【PowerAppsで確認】)

※【PowerAppsで確認】の場所は、動的コンテンツからPowerAppsで確認を選択します

Power Automate:SharePoint>ファイルの作成>ファイルコンテンツ

5.フローが完成したので、フロー名を変更し、「保存」をクリックし、Power Apps画面に戻ります。

Power Automateフローの保存

6.Power AppsのExportボタンの「OnSelect」プロパティで、以下3つの関数式を設定します。

  1. ClearCollect(ExportCol, 【ギャラリー名】.AllItems);
  2. Set(ExportData, Concat(ExportCol, 【列名1】 & “,” & 【列名2】 & Char(13)));
  3. 【フロー名】.Run(Today() & “Galdata”, ExportData);
Power Apps:ExportボタンのOnSelectプロパティ

①の関数式で、ギャラリーのデータをコレクション「ExportCol」に一旦格納しています。

②の関数式で、グローバル変数「ExportCol」に、コレクションから必要な列データを入れ、「,(カンマ)」で区切り、レコードの終わりに「Char(13)(改行コード)」を入れて、1つのテキスト型データにしています。

③で作成したPower Automateフローを実行し、ファイル名(今日の日付&Galdata)と、②で作成したグローバル変数「ExportCol」の2つの引数を渡しています。

  1. Power AppsからPower Automateにデータを渡すため、変数の設定はUpdateContextではなく、グローバル変数を作成するSet関数を使う
  2. Power Appsにはテキスト型のデータしか渡せないため、Concat関数でデータをカンマ区切りにして、1つのテキストデータにする
  3. レコードの終わりに「Char(13)(改行コード)」を入れる

7.これで実装は完成したので、Exportボタンをクリックして、ファイルが出力されていることを確認します。

SharePointフォルダへギャラリーデータをエクスポート

8.CSVファイルを開くと、適切にデータが出力されていることが確認できます。

ミムチ
ミムチ
確かにデータは出力できましたが、CSVデータなのでテーブル形式にはできないのですかな?

パワ実
パワ実
次に説明する実装では、SharePointリストから対象レコードをExcelに出力するから、テーブル形式にできるよ!

(方法2)ギャラリーのデータのIDを引数で渡す方法

ギャラリーのデータのIDを引数で渡す方法です。

ギャラリーのデータのIDを引数で渡すフローの流れ

  1. Power Appsのボタンをトリガーにして、フローを実行する
  2. フロー実行時、Power Appsから、ギャラリーのIDデータを1つの変数にして、引数で渡す
  3. ②のIDデータをPower Automateで配列にする
  4. Excelのワークシート、テーブルを作成する(Excelファイルは事前に作成)
  5. ③のIDデータ(配列)を1つずつSharePointリストのIDと比較し、一致したレコードを、④で作成したExcelテーブルに追加する
  6. SharePointの指定したフォルダに、①で取得したデータをCSVで出力する

1.「+新しいステップ」から、「変数を初期化する」を選択するを追加します。

ここでいったん、Power Appsから渡した引数のIDデータを文字列に格納します。

  • 名前:AppData(任意の変数名を設定できる)
  • 種類:「文字列」を選択
  • 値:動的なコンテンツから、「PowerAppsで確認」を選択
Power Automate:変数を初期化①

2.もう一つ「変数を初期化する」アクションを追加し、前のステップで作成した変数のIDデータを、配列にします。

  • 名前:IDarray(任意の変数名を設定できる)
  • 種類:「アレイ」を選択
  • 値:式で、「split(【AppData】,’,’)」と設定

※【AppData】は動的なコンテンツから、前ステップの変数を初期化で作成した変数名を選択します

Power Automate:変数を初期化②
  1. カンマ区切りのIDデータ(1,3,4..)を配列にするには、split関数を使い、カンマ区切りで分割します。
  2. 受け取った引数を直接配列にできないため、1つ前のステップで一旦、文字列の変数に格納します。

3.最終的にファイルを出力するSharePointフォルダに、Excelファイルを作成しておきます。

4.「Excel Online」>「ワークシートの作成」アクションを追加し、3.で作成したExcelファイルに、データ出力用の新しいワークシートを作成します。

  • 場所:ファイルを出力するSharePointサイトを選択
  • ドキュメントライブラリ:ファイルのフォルダーパスを選択
  • ファイル:ワークシートを作成するファイル名を設定
  • 名前:以下の式を設定
  • formatDateTime(addHours(utcNow(),9), ‘yyyyMMddHHmmss’)
Power Automate:Excel Online>ワークシートの作成

2回目以降、同じ名前でワークシート名を作成することはできないため、ファイルを出力した日時をワークシート名に設定した

5.「Excel Online」>「テーブルの作成」アクションを追加し、4.で作成したワークシートに、テーブルの列を作成します。

  • 場所:ファイルを出力するSharePointサイトを選択
  • ドキュメントライブラリ:ファイルのフォルダーパスを選択
  • ファイル:テーブルを作成するファイルを選択
  • 表の範囲:動的なコンテンツから、ワークシートの作成>名前を選択し、後ろに「!A1:B1」と入力
    ※出力するデータ列分の列を作成する 例)2列ならA1:B1
  • テーブル名:Listと入力し、後ろに以下の式を設定
    formatDateTime(addHours(utcNow(),9), ‘HHmmss’)
  • 列名:出力するデータの列名をカンマ区切りで設定
    例)Date,Item
Power Automate:Excel Online>テーブルの作成
  • データを格納するためのテーブルと、列名をあらかじめ用意しておく
  • 2回目以降、同じ名前でテーブルを作成することができないため、ファイルを出力した日時でテーブル名を設定した

6.「コントロール」>「Apply to each」アクションを追加し、「以前の手順から出力を選択」に動的なコンテンツから、2.の手順で追加した「変数」IDarraを選択します。

7.Apply to eachの中に、「SharePoint」>「項目の取得」を追加します。

  • サイトのアドレス:ExcelファイルがあるSharePointサイトを選択
  • フォルダーのパス:Excelファイルがあるフォルダーパスを選択
  • ID:動的なコンテンツから、Apply to eachの「現在のアイテム」を選択
Power Automate:コントロール>Apply to each

Apply to eachを使うと、配列データを1つずつ処理できます。

ここでは、ギャラリーに表示されているIDの配列データ(例:1,3…等)を1つずつ渡し、SharePointから対象レコードを取得→Excelの行を追加という処理を、IDの数分繰り返し行います。

8.Apply to eachの中で、「Excel Online」>「表に行を追加」アクションを追加し、7.で取得したSharePointリストデータを、出力先のExcelファイルの5.で作成したテーブルに追加します。

  • 場所:ExcelファイルがあるSharePointサイトを選択
  • ドキュメントライブラリ:Excelファイルがあるフォルダーパスを選択
  • ファイル:Excelファイル名を選択
  • テーブル:動的なコンテンツから、テーブルの作成>テーブル名を選択
  • 行:以下のように記載する
    {
    “列名1”: 【項目の取得】,
    “列名2”: 【項目の取得】
    }

※【項目の取得】は動的なコンテンツから、項目の取得の対象データを選択

Power Automate:Excel Online>表に行を追加
  • Excelの表に行を追加では、「行」に、追加するデータを設定する
  • ここでは{}で囲い、”列名1″:【値1】,”列名2″:【値2】…のように記載する
  • 【値X】には動的コンテンツから、項目を取得で対象の列データを選択する

9.これでフローが完成したため、フロー名を変更し「保存」をクリックして、フローを閉じます。

Power Automate:フローの保存

10.Power AppsのExportボタンの「OnSelect」プロパティで、以下3つの関数式を設定します。

  1. ClearCollect(ExportCol, 【ギャラリー名】.AllItems);
  2. Set(ExportID, Concat(ExportCol,Text(ID), “,” ));
  3. 【フロー名】.Run(ExportID)
Power Apps:Exportボタン>OnSelectプロパティ

11.これで実装は完成したので、Exportボタンをクリックして、出力先のファイルが更新されていることを確認します。

SharePointフォルダ:出力先のファイル

12.Excelファイルを開いてみると、新しいワークシート、テーブルが作成され、適切に対象のSharePointリストデータが出力されています。

Excel:SharePointリストデータの出力

最後に

本日はPowerAppsのアプリ画面から、ボタンをトリガーにギャラリーのデータをエクスポートする方法を紹介しました。

ミムチ
ミムチ
ムム…最後の実装はなんだか少し難しかったですぞ…

パワ実
パワ実
ギャラリーのIDデータを渡す方法は、一旦IDを配列として変数に格納→Apply to eachでIDで1つずつSharePointリストの対象レコードを取得→Excelに行を追加するのがポイントだよ。

難しい場合は、1つ目の全データを渡す実装の方が簡単だよ!

今後も、Power Automateを使った実践的な方法を紹介していきます!

ABOUT ME
パワ実
DX推進担当(IT部門) 2021年からPower Platform(Power BI、Power Apps、Power Automate)を勉強中。 Power Platformを使っていく中で、知りえた情報を発信している。 Youtube、Twitterでの情報発信もしています!

ご依頼・ご相談について

Power Platformに関するご相談は、こちらからお願いします!

Power Platform学習におすすめの無料ハンズオンセミナー、参考本は、こちらのページを参考にしてください。