Microsoft Flowで、[ユーザーがぽちっとしたらメール通知＋位置情報送信＋Power BIでレポート]する、を作ってみる　前編

海外出張とかで、安否確認のために定時で報告させるルールのある組織って結構あると思う。メールで「どこにいます」と送らせて集計するのも面倒だし、かといって何かの安否確認のサービス使うんじゃなく、Office365でやってみるか、というシナリオ。

2019/04/17　タイムゾーンの処理に関連して、一部変更しました。


要件はこんな感じ：
・ユーザーはPC、タブレット、スマートフォン持ってく。
・位置と時刻と誰、をログしたい。
・なるべくならボタンぽちっと、だけをユーザー操作にしたい。
・時刻は日本時間にしたい。


用意するもの：
・Office365のE1以上のライセンス
・Power BIのライセンス、無料版でOK

大まかなステップ：
・データを保持するエクセルファイルを作る
・メールの送信内容を編集
・タイムゾーン書き換え
・エクセルに保存する処理を追加
・地図にプロットする処理



# 1.データを保持するエクセルファイルを作る

エクセルで、テーブルを作成する。作ったカラムはこれ。
・Email
・DisplayName
・Location
・Latitude
・Longtitude
・Time
・YYYYMMDD
・HHmm

地図表示には緯度経度があれば十分だけど、国情報が欲しいのでLocation入れてる。
作ったら、エクセルファイルは任意のSharepointかOnedriveに保存する。

# 2.メールの送信内容を編集

メールを、本人と管理者に通知させたい。
また、通知メールに次回クリックするためのURLを入れておきたい。
メールに入れておくと、まだ簡単に探せるから、という理由です。

2-1.Flowを開く→テンプレートから作成→[現在の場所をメールで通知する]をクリック


![flow1.JPG](https://qiita-image-store.s3.amazonaws.com/0/237698/7ce48b65-72bf-a5eb-ea1d-bd7b464727c4.jpeg)

2-2.メールの宛先を設定する。

宛先は欄は、動的なコンテンツから[ユーザーの電子メール]を選択。
ほかの宛先を追加したい場合は続けて

    ;xxx@xxx.com;

と追記すればOK。

![flow2.JPG](https://qiita-image-store.s3.amazonaws.com/0/237698/db5ca625-c2b1-5c8a-6b36-b468de89b74a.jpeg)


2-3.件名と本文を設定する。

件名は好きに入力。完全なアドレスと、ユーザー名を入れる。

![flow3.JPG](https://qiita-image-store.s3.amazonaws.com/0/237698/90971637-148d-fe44-e284-9bdb53c95258.jpeg)

ここまでで、一度保存する。

2-4.通知メールに次回のクリックするためのリンクを入れる。

マイフローから、先ほど保存したFlowを開いて、編集モードにする。

URLをコピーして、一部パラメータ書き換える。
　元のURL

     https://japan.flow.microsoft.com/manage/environments/Default-<文字列40文字ぐらい>/flows/<文字列30文字ぐらい>?backUrl=%2Fflows%<文字列40文字ぐらい>%2Fdetails

　URLを編集する（?backurlから後ろを削除して、/runに変更する）

     https://japan.flow.microsoft.com/manage/environments/Default-<文字列40文字ぐらい>/flows/<文字列30文字ぐらい>/run


あとは、メールの本文にHTMLで追加する。
![flow4.JPG](https://qiita-image-store.s3.amazonaws.com/0/237698/f0b1ebac-d853-cd9f-ce3b-20d7c22a4009.jpeg)


正しく設定されていたら、これでフロー実行したらメールが来ます。

# 3.タイムゾーンの変更

JSTで処理するよう、タイムゾーンをUTCからJSTに変更する処理を入れる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237698/c3f3ff2f-3c7a-98b0-312e-f8130fb183a3.png)

タイムゾーンの変換 2となっているのですが、この2は無視してください。







3.エクセルに保存する処理を追加

メールで送った内容、エクセルに追加する処理を追加する。

3-1.先ほど2で作成したFlowに、エクセルに書き込む処理を追加する。

　　　　新しいステップ→アクションの追加
　　　　![flow5.JPG](https://qiita-image-store.s3.amazonaws.com/0/237698/cd2e4d0d-45bd-14aa-9390-1b1ad0aa3527.jpeg)

　　　　Excelで検索→[Excel(Business) Add a row into a table]を選択
　　　　20180812　まだプレビューの機能のようです。
![flow6.JPG](https://qiita-image-store.s3.amazonaws.com/0/237698/69de5af0-0648-9bbb-faf7-6de520cb628e.jpeg)


3-2.先ほどの1で保存したファイルのテーブルを選択
　　　　ロケーション、ライブラリ、ファイル、テーブル、と順番に選択していけばOK
![flow7.JPG](https://qiita-image-store.s3.amazonaws.com/0/237698/6e0d0f57-4a32-e9d6-7fe8-d532da2b28f3.jpeg)


3-3.テーブルの項目を埋めていく（YYYYMMDDとhhmm以外）

　　　　「動的なコンテンツを追加する」から選択していけばOK。
　　　　
![flow8.JPG](https://qiita-image-store.s3.amazonaws.com/0/237698/33a7c7d4-f604-2167-d33a-1db508d99913.jpeg)

　　　　EmailとすべきところがUserprincipalnameのままになってるのは読み替えてください…。


3-4.テーブルの項目を埋めていく（YYYYMMDDとhhmm）
　　　　
　　　　先ほど変換したJSTで処理。
　　　　YYYYMMDDとhhmmは、式を選択して、それぞれ式を入力。


YYYYMMDD列

    formatDateTime('タイムゾーンの変換'),'yyyy-MM-dd')
hhmm列

    formatDateTime('タイムゾーンの変換'),'HH:mm')




日本時間に修正する処理は、a-katsumasaさんのこちらの投稿を参考にさせていただき、アレンジしました。ありがとうございます。
[Microsoft Flow でFlow作成](https://qiita.com/s-katsumasa/items/bac123f0c142f5837014)




ここまでで保存して、テスト。
これでFlowを実行すると、「管理者とユーザーにメールが飛んで」「エクセルに追記」されるようになります。

---

同じような処理でも、ユーザーの言語設定によってはうまく動作しないケースがあります。
たとえば、動的なコンテンツの追加でも[location.fullAddress]だとダメで[完全なアドレス]ならOKなど。うまくいかない場合は、試してみましょう。

![flow0.JPG](https://qiita-image-store.s3.amazonaws.com/0/237698/65b5f324-9571-3c6a-22de-cbd1d76a1827.jpeg)


PowerBIへの連携は、[後編につづく](https://qiita.com/hisssa0102/items/be76352e91ffc3d14175)。