【#PowerApps アプリ】テレワーク支援ぽいツール 作り方

カッとなって作った。
後悔はしていない。
けど、公開はする。(作り方的な情報を)

# 動作イメージ
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/PowerApps?src=hash&amp;ref_src=twsrc%5Etfw">#PowerApps</a> ExO予定表 <a href="https://t.co/BgQwo31EXt">pic.twitter.com/BgQwo31EXt</a></p>&mdash; やま (Yama) (@yamad365) <a href="https://twitter.com/yamad365/status/1247425350763548674?ref_src=twsrc%5Etfw">April 7, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# アプリ概要
Office 365（ExO）向けです。
アプリ操作しているユーザーの予定表に対して、

- 30分の離席
- 1時間の離席
- 今からテレワーク

の予定をボタン1発で登録しにいくだけのアプリです。
なお、コネクタを変更してGoogleカレンダーへ変更することで、Gでも同じことができると思います。きっと。

# 諸注意
制約や当記事の説明では下記が注意点です。実現されたい方はご自分で改造ください。

- 既に予定があっても重複で書き込みします（重複チェック未実施）
- ボタン連打すると重複します（上記の理由です）
- Loading処理を作るの忘れてましたｗ
- 開始時間は現在時間（Now）で処理しています
- 地域が日本以外の方は（たぶん）動きません。（詳細は後述）

# 作成の経緯
新型コロナウイルス感染症 (COVID-19)対策でテレワーク・在宅勤務を実施している企業さん多いと思います。当方が在籍している企業でもテレワークが基本の勤務状態にシフトしています。（※なお、所属企業は5年以上前からシステム開発者も含めてテレワークが可能な状態にしてありました。なので、企業自体は問題なく勤務形態の変更が可能でしたね。Office 365 & Azure 万歳です。）
そんな状況なので、メンバー間のコミュニケーションはチャットツールになりますよね。で、ちょっとこんなコトがあって少々イラッ☆彡ってしたんです・・・。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">テレワークで。例えば30分以上離席するなら予定表に「〇〇のため離席」とかステータスメッセージに書いていてくれれば、連絡する側も配慮できると思うんだ。独りで仕事してるんじゃなくて、チームで動いてるんだからさ・・・。もちろん突発的なコトもあるから一概には言えないだろうけども、さ。</p>&mdash; やま (Yama) (@yamad365) <a href="https://twitter.com/yamad365/status/1247352638158426113?ref_src=twsrc%5Etfw">April 7, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


誰にも連絡せず、予定なども記入せずに音信不通になる、ってチョッと困りますよね。理由を追求するような野暮で無駄なコトはしないのですが、こういうコトが頻発すると信頼などが揺らぐので早急にナニか策をうたねば、と思ったのです。
で、そんなコトを思ったらアプリができていた。何を言っているのか(以下略

実際、初品は約10分ぐらいで作成しています。大半は予定表に書き込むメソッドの調査でしたねｗ

# 作り方
簡単なアプリなので要点だけまとめておきます。

## 1. 必要なモノを配置する
作成するアプリはスマートフォンからの利用が多くなるかな？と想定したので「携帯電話レイアウト」です。

コネクタは「Office 365 Outlook」を追加してください。

[Power Apps から Office 365 Outlook に接続する](https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/connections/connection-office365-outlook)

コネクタが準備できたら、画面の作成です。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/9dbd3ed1-a56f-2921-00d3-f3394b0344c8.png)

「四角のアイコン」と「ラベル」コントロールでヘッダーを作成し、その右側に「カレンダーのアイコン」を設定してあります。
その下にある”予定表”と表示されているモノはあっても無くても問題ありません。同じ状態にしたい方は「[【#PowerApps アプリ】予定の候補日メーカー 作り方](https://qiita.com/yamad365/items/ce0fdbbe411dbb26fa00)」で利用している「新しい画面」押下 → [カレンダー]の Screen から予定表を選択させているドロップダウンをコピー＆ペーストして移植してください。そして[表示モード]を”ビュー”にすればOKです。メンドクサイ方はラベルコントロールに”予定表”ってダケでもOKです。

あとは「ボタン」コントロールを３つ設置すれば準備完了です。

## 2. カレンダーアイコンで予定表を起動する
予定を簡単に差し込むツールなんですが、登録された予定の微調整をしたくなるコトもあるだろうと思いまして。Outlook on the Web(以降、OotW）を起動する仕組みを提供します。やるコトは簡単で Launch関数 でURLを指定するだけです。
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/9b919379-a888-07cf-7e27-c982f803b391.png)

``` Icon.OnSelect
Launch("https://outlook.office365.com/calendar/")
```

Office 365 の予定表などは特定のURLでアクセス可能ですので、同じテクニックで他の画面なども起動させることができます。なお、過去記事でTwitterを起動するなどもやっておりますので、ご参考までにどうぞ。

[[PowerApps Tip's]アプリからTwitter投稿画面を起動する](https://qiita.com/yamad365/items/cc93c5c018651a825c07)

# 3. 予定を登録するボタン処理
ボタンを押したら、現在時間から30分、ないし1時間、または定時（今回は18時）まで予定を登録する処理を作成します。真ん中の「1時間離席」ボタンで説明します。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/cb7378d7-da4c-e979-d6c3-7c809737218d.png)

``` Button.OnSelect
Office365Outlook.V4CalendarPostItem(
    [”予定表”と固定で記述するか、冒頭で説明したコントロールを指定], //※
    [ボタンのテキスト(例：Button.Text],　//予定の件名
    Now(), //現在時間
    DateAdd(Now(),1,Hours),
    "(UTC+09:00) Osaka, Sapporo, Tokyo",
    {showAs: "Oof"}
);
```
上記式で現在時間(Now)から、＋1時間の予定で登録することが可能です。

※の箇所は、利用ユーザーの地域設定によって”予定表”の場合と”Calendar”の場合があります。地域が日本以外のユーザーが含まれている Office 365 を利用中の方は適宜改造してください。

時間、日付の計算は下記参考URLを参照ください。

 [Power Apps の DateAdd、DateDiff、TimeZoneOffset 関数](https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-dateadd-datediff)

関数の末尾、JSON形式で指定している”showAs”は予定の公開方法です。

　free ＝ 空き時間
　tentative ＝ 仮の予定
　busy ＝ 予定あり
　oof ＝ 退席中
　workingElsewhere ＝ 他の場所で勤務中
　unknown ＝ ？？？

「今からテレワーク！」の際は、公開方式を”空き時間”で指定しています。

なお、Exchange の予定上（Appoint）は”unknown”という指定はありません。非公開は別のプロパティで管理されているハズです（残念ながら記事投稿時でPower Apps から呼び出せるコネクターに、非公開プロパティは存在しない）。どういう動作なのか不明ですし、Exchange的には存在しないプロパティ値なので当方は利用しないようにしています。

その他、予定を作成する際に指定可能なパラメーターも設定可能です。詳細は下記URLに記載されていますのでご確認ください。

 [Create event (V4)](https://docs.microsoft.com/ja-jp/connectors/office365/#create-event-(v4))

# まとめ
- Power Apps から Outlook予定表への書き込み可能です
    - Power Automate のほうがもう少し細かい処理できますがｗ
    - これぐらいなら、Power App のみで十分かな、と判断しました
- ”予定表”か”Calendar”か？はメールボックスの設定依存です
    - よくわからない方はシステム管理者にご確認ください
- 予定表はTeamsのプレゼンスと同期しています
    - なので、予定を入れる＝プレゼンスが自動で変わる → 離席中なのね(気づき
- コネクタを変更することで、予定表ではなくTeams投稿に改造も可能です


Screen が1枚、ボタンが3つ程度のアプリですが、思った以上に便利なんじゃなかろうか、と思っています。テレワークやリモートでの業務遂行に際して、無用なストレスや無駄な作業が少しでも減って気持ちよく効率的な仕事ができますように。

それでは、皆さま、素晴らしい Power Platform Life を！