からめもぶろぐ。

SharePoint が得意なフレンズなんだね!すごーい!

Microsoft Graph の変更通知を Microsoft Flow で受け取る

Microsoft Graph は Webhook により変更通知を受け取ることができます。アクセス許可の内容から察するに、個人で使うためではなく、組織の管理のためのようなのですが *1、こういうものはだいたい Flow で受け取れるような気がするのでやってみました。今回はユーザーの変更を受け取ります。

変更通知 - ドキュメント - Microsoft Graph

変更通知を受け取る Flow

変更通知を受け取るためのサブスクリプションを作成するときに、URL を検証するために、Microsoft Graph から送られる validationToken を返す必要があります。

  • Microsoft Graph sends a POST request to the notification URL:
    • POST https://{notificationUrl}?validationToken={TokenDefinedByMicrosoftGraph}
  • The client must provide a response with the following characteristics within 10 seconds:
    • A 200 (OK) status code.
    • The content type must be text/plain.
    • The body must include the validation token provided by Microsoft Graph.

ということでクエリ文字列に validationToken を含む場合と含まない場合で処理を分岐します。validationToken を含む場合は上記の通りのレスポンスを返却します。含まない場合は実際の変更通知なので、ID を受け取ってユーザー情報を取得し、その情報をメールで送ります。


サブスクリプションを作成する Flow

サブスクリプションのエンドポイントは「/subscriptions」なのですが、組織全体で共通ではなくユーザー/アプリケーション単位のようです。後述するサブスクリプションの更新を自動化するためには、アプリケーションのアクセス許可 (Client Credentials Grant) を使用する必要があるため *2、サブスクリプションの作成も同様に行う必要があります。notificationUrl には 変更通知を受け取る Flow の URL を指定します。


サブスクリプションを更新する Flow

サブスクリプションには有効期限があり (最大 3 日間)、更新しないと自動的に削除されてしまいます。永続的に変更通知を受け取るためには、スケジュールで 1 日 1 回 Flow を呼び出して有効期限を更新する必要があります。


まとめ

Flow でできるので LogicApps でもできますし、機能的に LogicApps で実装したほうがよいと思いました。変更通知を受け取るところは、カスタム処理を入れたいのであれば Functions に変更してください。

*1:いくつかのリソースは管理者の同意が必要なアクセス許可を必要とします。

*2:Microsoft Flow の HTTP アクションにある Active Directory OAuth 認証で Microsoft Graph API を利用する | idea.toString(); を参照のこと。

Power BI でマトリックスを使わないでマトリックスを頑張ってみる

Power BI を使ってザ・ジャパニーズな帳票を実現するためのバッドノウハウです。

問題点

例として東京の平均気温をマトリックスにしてみます。行に年月、列に平均気温を 5 ℃刻みで指定します。

はい、できました。しかし問題があります。「5 ℃未満」の列が左端にきてほしいのですが右端にきてしまっています。Power BI のマトリックスでは列の順序は昇順または降順でしか並べ替えるしかできないため、辞書順に並べ替えた結果、このような順序になってしまいます。

次に特定の年月でフィルターしてみます。

今後は「5 ℃未満」の列が表示されません。データのない列は表示されません。しかし列ヘッダーは固定でほしいという要望もあるでしょう。

解決方法

Power Query で頑張ります。

クエリの参照を作り、行列 (年月、分類) でグループ化します。列ヘッダーの中身に合うようにフィルターします。これを列の数だけ作成します。

もうひとつクエリの参照を作ります。行 (年月) でグループ化します。

先ほど作った列のクエリをひたすらマージします。列の順番も任意に並べ替えられます。

マトリックスではなくテーブルでデータを表示します。「5 ℃未満」の列が左端にきています。

フィルターをかけてもいい感じです。


まとめ

あくまで「頑張ればできるよ」という感じ。Excel のピボット テーブルだともうちょっといろいろできるので、そっちでやったほうがいいと思います。

Microsoft Graph data connect を実行してみる

以下の記事の続きです。

blog.karamem0.jp

日本リージョンではできないことがわかったので North America で Office 365 と Azure のテナントを作りました。途中ストレージ アカウントの種類を間違えて (V1じゃないと駄目っぽい?) 試行錯誤したものの、頑張ってなんとか Succeeded までこぎつけました。しかし注釈で判明しているとはいえデータ 2 件なのに時間がかかりすぎる…。

Blob Storage には JSON 形式でファイルが落ちてきます。ここに例えば Power BI から接続して可視化するなんてこともできそうですね。

Global Office 365 Developer Bootcamp 2018 Japan に登壇しました

2018/10/27 に開催された Global Office 365 Developer Bootcamp 2018 Japan で Microsoft Graph のハンズオンの担当で登壇しました。

connpass.com

当日は資料や事前準備の不備があり申し訳ありませんでした。内容をコピペしたい場合は PDF は向かないですね…。でも後からツイートを見てみたらちゃんとできてる方もいたようでホッとしております。

ハンズオン中ご質問をいくつかいただきましたので補足しておきます。

アプリの変更が反映されない

反映されるのに時間がかかることがあります。開発中はそれだと大変なので Azure ポータルの [Azure Active Directory] - [エンタープライズ アプリケーション] - [概要] から一度削除してしまうことをお勧めします。この場合、テナントでのアプリの設定が削除されるだけなので、アプリそのものが削除されるわけではありません。


アクセス許可の同意は一度行うと保持されるのか

されます。ユーザーが同意したかどうかは Azure ポータルの [Azure Active Directory] - [エンタープライズ アプリケーション] - [アクセス許可] で確認することができます。


アクセス許可の画面に出てくる「組織の代理として同意する」について

最近のアップデートのようですが、管理者の場合はアクセス許可の画面で「組織の代理として同意する」ができるようになりました。これまで AdminConsent は
https://login.microsoftonline.com/common/adminconsent でやっていたのですが、その手間が省略できることになります。

もちろん一般ユーザーではこのチェックボックスは表示されません。

Azure Active Directory の新しいアプリの登録 (プレビュー) が提供されたようです

Azure ポータルの Azure Active Directory に「アプリの登録 (プレビュー)」が追加されてました。一瞬「https://apps.dev.microsoft.com があるじゃん!」って思いましたが、あくまで v1 のアプリの登録の新しいバージョンですね。

アクセス許可あたりはいままでよりずっと見やすくなってますね。