Power Platform で仕組みを作成するにあたり「自分だったらこうするかなー」というパターン、皆さん持っていませんか?そんな「自分だったらこういう設計にする!」という、所謂「デザインパターン」みたいなモノを記録しておこうかと思ったのでチャレンジする企画です。今回は「定期的に特定対象の状況を観測する」という要件に対するアプローチです。
当記事は Microsoft Power Apps Advent Calendar 2020 に参加しています。
ユーズケース
「定期的に特定対象の状況を観測する」とは???
例えば、サーバーの死活監視。特定の間隔、仮に5分毎としたら、5分毎に対象のサーバーから応答があるか?をチェックする、といったようなパターンです。
とは言え、優秀な死活監視ソリューションみたいなものは世の中に存在していますので、Power Platform でわざわざ作る必要もありません。もっと身近な例で考えると・・・。例えば、会議室の空き状況を一目で確認できる「会議室の利用状況アプリ」等でしょうかね。5分間隔で、指定した会議室が「今空いてるか?」を Exchange Online の予約状況から把握する、みたいなアプリはいかがでしょう。
アーキテクチャ
「当方だったらどうするか?」です。
まず、会議室の状況をパッと観て把握したい、と考えると画面は Power Apps で提供するのが良さそうです。(実は Power BI でも良いのですが Direct Query の説明がアレなので割愛!)
次に「5分間隔で会議室の空き状況を調べる」にはどうするか?です。直接、Power Apps のアプリからタイマーでデータ取得することも可能です。しかし、その場合は、下記のようなコトに苦労すると想定されます。
- 画面遷移をともなった場合のタイマー処理
- 取得したデータの管理(いちいち Collection 管理?めんどくさい…)
- Web API でしか取得できない対象に対するアプローチ(カスタムコネクター作るの?)
ちょっとメンドクサイ感じがしますね。カスタムコネクターとか、あんまり作りたくないです。とは言え、画面が Power Apps である以上、どこかのデータソースなりからデータを読み出す必要があります。
残念ながら Exchange Online の会議室メールボックスが保持している予定は、Power Apps、Power Automate ともにアクションで取得することが記事投稿時点ではできません。「会議室の予定を取得する」というステキなアクションは提供されていないのです。残念。
前置きが長くなりましたが、状況を把握する箇所は、Power Automate を利用します。そして、会議室の状況(予定)を取得するには Graph API を利用します。つまり、HTTPアクション = Premium コネクターを利用せざるをえません。
上イメージで、定期的に情報を取得している箇所が Graph API になります。定期的に情報を取得してデータソースへ格納。画面(アプリ)は、そのデータソースから情報を取得するように当方は考えます。
フローがわかれている理由(補足)
Power Automate を実行するユーザーが限定できるから、です。1つ、フロー実行用のユーザーが存在すれば問題ありませんよね。つまり、Premiumコネクター = 有償ライセンスの購入範囲も限定することができるのです。
勿論、Premiumコネクター(HTTP)を利用せずに利用できる対象(例えば SPO 等)であれば有償ライセンスは不要です。
Graph API で予定データを取得する手順は りなたむサン の下記の記事が参考になると思います。
■参考URL
Microsoft Graph を使って、会議室の予定表を取得する
まとめ
設計=アーキテクチャを練ることで、
- 仕組みが”シンプル”になる
- ランニングコストも限定(=極小化)できる
- シンプル = 拡張も容易(なハズ
と、嬉しいコトばかりになります。
「システム開発」や「アプリ作成」という単語になると、何でもかんでも1つのシステム、アプリで完結させようとする方がいますが、それは多くの場合は間違いだと個人的に考えています。巨大で冗長なシステム・仕組みは誰も幸せにせず、悲しみしかもたらしません。
『小さくて鋭いツール』で生産性をUpして、楽して業務をたのしみましょう。
それでは、皆さま、素晴らしい Power Platform Life を!