【第1回 実務で役立つアプリ開発】Power Apps+Automateでファイルを特定の命名規則で生成してローカルダウンロードする
2021-08-15
azblob://2022/11/11/eyecatch/2021-08-11-power-appsautomate-000.jpg

こんにちは、あおいです。

さて、今回のブログは実務で役立ちそうな場合を想定して、Power Appsで案件一覧画面を作成します。
そして、Power Automateを用いて会議資料や提案書等のフォーマットを特定の命名規則で生成してローカルダウンロードする方法を紹介したいと思います。



実装の手順
①Dataverseでテーブル作成・データ追加をする
②Dataverseに登録された案件情報を一覧表示する機能をPower Appsで作成
③案件一覧から選択した取引先社名・案件名を表示する機能をPower Appsで作成
④[ダウンロードした日付(YYYYMMDD)_取引先社名_案件名.pptx]の命名規則でローカルダウンロードする機能をPower Automateで作成

Power Appsの案件一覧画面イメージは以下のようになります。




本アプリではプレミアムコネクタを利用するので、Power Automateの有料ライセンスが必要です。


①Dataverseでテーブル作成・データ追加をする
まずはDataverseで[取引先情報]テーブルと[案件情報]テーブルを作成します。こちらの記事を参考にしてテーブルを作成してみてください。
Power Appsでデータテーブルを作ってみた | cloud.config Tech Blog
Power Appsのトリセツ(もちろん非公式)#エンティティ編 | cloud.config Tech Blog




[取引先情報]テーブルと[案件情報]テーブルを作成後、リレーションシップを使ってテーブル間に繋がりを持たせます。一つの会社に対して複数の案件が存在するので、今回は多対一の関連性を持たせます。




[レコードの追加]から各テーブルに適当なデータを追加していきます。




②Dataverseに登録された案件情報を一覧表示する機能をPower Appsで作成
[空の垂直ギャラリー]を挿入し、ItemsプロパティにDataverseで作成した[案件情報]テーブルを選択します。[空の垂直ギャラリー]に4つのラベルとアイコンを追加してください。各ラベルのTextプロパティに[ThisItem.案件名][ThisItem.案件No][ThisItem.案件担当者]と入力します。
また、取引先社名に関しては[ThisItem.取引先情報.会社名]と入力します。[取引先情報]テーブルとリレーションシップで繋がりを持たせているので、案件情報テーブルの参照型[取引先情報]列で取引先情報テーブルにアクセスして、会社名列から会社名を抽出します。



ギャラリーに追加したアイコンのOnSelectプロパティに以下の数式を入力します。
[対象の取引先社名]コレクションを作成し、[取引先情報]テーブルの会社名列の取引先社名とギャラリーで選択した取引先社名が一致するレコードをコレクションに追加します。
同様に、[対象の案件名]コレクションを作成し、ギャラリーで選択したレコードをコレクションに追加します。




試しにギャラリーから適当な行のアイコンを選択して、ビューのコレクションを確認してみてください。
[対象の取引先社名]コレクションには選択した取引先社名のデータ、[対象の案件名]コレクションには選択した案件名・案件担当者・案件No等のデータが登録されています。



また、各ラベルの値の中身が何を表しているのか区別するために、ギャラリーの上にラベルを配置します。コンテナーかグループ化でまとめておくと良いです。



③案件一覧から選択した取引先社名・案件名を表示する機能をPower Appsで作成
案件一覧からどの案件情報を選択したか分かるように、ラベルに選択中の取引先社名と案件名を表示させます。空白のラベルのTextプロパティに以下の数式を入力します。
First関数で[対象の取引先社名]コレクションを引数にして、コレクションの最初のレコードを取得し[ . 会社名]と入力することでレコードの会社名を抽出します。同様にFirst関数で[対象の案件名]コレクションから案件名を抽出します。



また、案件一覧から選択中の会社名と案件名からダウンロードされるファイル名を表示します。
どのような命名規則でフォーマットがダウンロードされるか利用者がイメージしやすくするために設定します。
Textプロパティに以下の数式を入力します。




④[ダウンロードした日付(YYYYMMDD)_取引先社名_案件名.pptx]の命名規則でダウンロードする機能
SharePointのドキュメントライブラリに2つのフォルダを作成してください。
・特定の命名規則でダウンロードしたファイル保存フォルダ(画像1:提案書の生成物フォルダ)
・提案書フォーマットを格納しておくフォルダ(画像1:提案書フォーマットフォルダ)

提案書フォーマットフォルダ内にPowerPoint形式の提案書フォーマットを格納してください。
※Word・Excelでも可能です。
・提案書フォーマット本体(画像2:提案書フォーマット.pptx)

画像1
画像2



Power Automateで以下の手順でフローを作成してください。
1. [Power Appsボタン]をトリガーにして文字列型の変数を初期化します。

2. [日時]コネクタで[現在の時刻]を取得して、同様のコネクタで[タイムゾーンの変換]アクションで扱う時刻を世界標準時から日本時間へ変換します。命名規則の日付情報は[YYYYMMDD]なので、書式設定文字列は「yyyyMMdd」と設定してください。

3. [Microsoft Dataverse]コネクタの[IDで行を取得する]アクションを選択します。
テーブル名[取引先情報]、行ID[動的なコンテンツから Power Appsで確認 を選択]など各項目を設定します。
同様のアクションを選択し、テーブル名[案件情報]、行ID[動的なコンテンツから Power Appsで確認 を選択]など各項目を設定します。

4. [SharePoint]コネクタの[ファイルコンテンツの取得アクション]を選択します。
サイトのアドレス[該当のSharePointサイトアドレスを選択]、ファイルパス[📁から提案書フォーマット.pptxのパスを指定]など各項目を設定していきます。

5. [SharePoint]コネクタの[ファイルの作成]アクションを選択します。
サイトのアドレス[適当なSharePointサイトアドレスを選択]、フォルダーのパス[作成したファイルの保存フォルダを選択]、ファイル名[変換後の時間_会社名_案件名.pptxのように命名規則に従って動的なコンテンツから選択]、ファイルコンテンツ[動的なコンテンツからファイルコンテンツを選択]など各項目を設定していきます。

6. 文字列型のpath変数にファイルのURLを入力します。



7. 組み込みタブの[Power Apps]コネクタから[PowerApp または Flow に応答する]アクションを選択します。出力の種類[テキスト]タイトルの入力[result]値の入力[動的なコンテンツからpath変数を選択]など各項目を設定します。



以上でPower Automateダウンロード機能の作成は終了です。

最後に、Power AppsのアクションタブからPower Automateを選び、先ほど作成したフローを接続します。
ダウンロードボタンのOnSelectプロパティに以下の数式を入力します。Runの引数にはDataverseの[取引先情報]テーブルと[案件情報]テーブルの行IDを入力します。この行IDに該当するのはデータ型が一意識別子のGUIDです。



行IDの確認方法はいたって簡単です。
先ほどの取引先社名コレクション「cr558_business_partner_informationid」列の英数字の羅列が行IDに該当します(画像3)。レコードにデータが追加されると各行データを判別するために一意識別子となる行ID(英数字の羅列)が割り振られます。
[Power Apps]⇒[データ]タブ⇒[テーブル] で[取引先情報]テーブルや[案件情報]テーブルを確認すると、自動的にデータ型が一意識別子の列が作成されています(画像4)。

画像3
画像4



これで完成です!
試しに案件一覧から適当な案件名を選択して、ダウンロードボタンを押してPower Automateのフローを走らせてみましょう!実行後、ローカルPCに特定の命名規則で提案書フォーマットがダウンロードされました!



ブログが長文になってしまうのを避けるため、今回はPower Automateでのダウンロード機能はあくまでも大まかな方法を紹介しました。
今回のダウンロード機能の詳細な方法についてはこちらのブログ記事を是非ご覧ください!
【第2回 実務で役立つアプリ開発】Power Automateで実行条件の構成を活用してダウンロード機能を作る | cloud.config Tech Blog