今日もローコードで業務改善をしたい

Power AutomateやPower Appsなど、Power Platformに関して学んだことを書いています。

在宅勤務開始しますアプリを作った話

はじめに

この記事は、Power Apps Advent Calendar 2022 12月6日(火)担当分の記事です。
qiita.com

数か月前、「在宅勤務開始します」アプリをPower Appsで作りました。



私が所属している会社のチームでは、在宅勤務の開始時と終了時にTeamsでその旨を投稿する習慣があります。
また、Outlookの予定表にも終日で「在宅勤務」という予定を入れる必要があり、わずかな作業ではありますが、もっと楽にできたらいいなと思っていました。

そこで、Power Appsのボタンで朝のTeams投稿とOutlookの登録を同時にできるのでは?と思い、「在宅勤務開始します」アプリを作ってみました。
今回はその作り方を共有したいと思います!

アプリ全体図


今回は、主に②、⑤、⑦、⑨のコントロールについて解説します。
また、キャンバスアプリでアプリを作成します。

用意するもの

Teamsに投稿するPower Automateフロー

Teamsに投稿する仕組みはPower Automateで作っていました。
ボタンコントロールで使うことになりますので、予め作っておきましょう。

1.Power Appsの左上の「Power Automate」メニュー>「フローの追加」>「フローを新規追加する」をクリックします。

2.「+ 一から作成」をクリックします。

3.「+新しいステップ」から「Microsoft Teams」>「チャットまたはチャネルでメッセージを投稿する」をクリックします。

トリガーの「Power Apps」は特に何もしません。
投稿先はグループチャットとチャネルを選べますので、好きなものを選んでください。

私はグループチャットを選択して、以下のようにしました。

フローに名前を付けて保存すれば、フローの作成は以上で完了です。

Office 365 Outlookコネクタ

Outlook予定表に登録するために、「Office 365 Outlook」を左上の「データ」メニューから追加します。

アプリ作成手順

予定表を選択するドロップダウン

上の「挿入」メニューから「ドロップダウン」を選択し、「Items」プロパティに以下を設定します。

Office365Outlook.CalendarGetTables().value


これでドロップダウンから「予定表」を選ぶことで、自身のOutlook予定表に登録することができます。

Outlook予定表に登録&Teamsに投稿するボタン

上の「挿入」メニューから「ボタン」を選択し、「OnSelect」プロパティに以下を設定します。

//Today()で0時を取得しStartTimeに設定
Set(StartTime,Today());

// StartTimeより1,440分後の24:00をendTimeとして設定
Set(endTime,DateAdd(StartTime,1440,Minutes));

//Text関数でStartTimeとEndTimeを"yyyy-mm-dd Thh:mm:ss"の書式に変更
Office365Outlook.V4CalendarPostItem(drpCalenderSelection.SelectedText.Name,"在宅勤務",
    Text(StartTime,"yyyy-mm-dd Thh:mm:ss"),
    Text(endTime,"yyyy-mm-dd Thh:mm:ss"),
    "(UTC+09:00) Osaka, Sapporo, Tokyo",
    {showAs: "free",isAllDay: true}
);
//showAsはbusy:予定あり、oof:退席中、workingElsewhere:他の場所で勤務中、free:空き時間、tentative:仮の予定
// isAllDayのパラメーターをtrueに設定し、終日の予定として登録する

//Power Automateのフローを起動
'おはようございます。業務開始します。'.Run()

Set関数を用いて、Outlook予定表に入れたい開始時間と終了時間を設定します。
Office365OutlookのV4CalenderPostItem関数を用いることで、Power AppsからOutlookに予定を入れることができます。
Power Automateのフローは、'フロー名'.Run()で実行することができます。

Outlook予定表のみ登録するボタン

上の「挿入」メニューから「ボタン」を選択し、「OnSelect」プロパティに以下を設定します。
Outlook予定表に登録&Teamsに投稿するボタン」からフロー実行の記述をなくすだけです。

//Today()で0時を取得しStartTimeに設定
Set(StartTime,Today());

// StartTimeより1,440分後の24:00をendTimeとして設定
Set(endTime,DateAdd(StartTime,1440,Minutes));

//Text関数でStartTimeとEndTimeを"yyyy-mm-dd Thh:mm:ss"の書式に変更
Office365Outlook.V4CalendarPostItem(drpCalenderSelection.SelectedText.Name,"在宅勤務",
    Text(StartTime,"yyyy-mm-dd Thh:mm:ss"),
    Text(endTime,"yyyy-mm-dd Thh:mm:ss"),
    "(UTC+09:00) Osaka, Sapporo, Tokyo",
    {showAs: "free",isAllDay: true}
);
//showAsはbusy:予定あり、oof:退席中、workingElsewhere:他の場所で勤務中、free:空き時間、tentative:仮の予定
// isAllDayのパラメーターをtrueに設定し、終日の予定として登録する


Teamsのみ投稿するボタン

上の「挿入」メニューから「ボタン」を選択し、「OnSelect」プロパティに以下を設定します。
Outlook予定表に登録&Teamsに投稿するボタン」からOutlook予定表に登録の記述をなくすだけです。

//Power Automateのフローを起動
'おはようございます。業務開始します。'.Run()


アプリの実行

アプリを保存して実行し、ボタンを実際に押してみましょう。
Teamsの指定した場所に投稿され、Outlook予定表に終日で「在宅勤務」の予定が入りました。
私は「空き時間」として予定に入れたので、一番上に表示されています。


おまけ

Outlook予定表に時間指定で予定を入れたいとき

さきほど紹介したのは「終日」で予定を入れる方法ですが、時間指定で入れたい場合もあるかと思います。

例えば、8:45-17:30の時間で入れたい場合は、「OnSelect」プロパティに以下を指定しましょう。

//Todayで取得した時刻は0時となるため、0時から起算して525分後の8:45をStartTimeとして設定
Set(StartTime,DateAdd(Today(),525,Minutes));

// StartTimeより525分後の17:30をendTimeとして設定
Set(endTime,DateAdd(StartTime,525,Minutes));

Office365Outlook.V4CalendarPostItem(drpCalenderSelection.SelectedText.Name,"在宅勤務",
    Text(StartTime,"yyyy-mm-dd Thh:mm:ss"),
    Text(endTime,"yyyy-mm-dd Thh:mm:ss"),
     "(UTC+09:00) Osaka, Sapporo, Tokyo",
    {showAs: "Oof"}
)

DateAdd関数を用いて加算することで、任意の時間を指定することができます。

さいごに

「在宅勤務開始します」アプリを作るとき、やまさんの記事に参考にさせていただきました。
qiita.com

2020年にコロナ禍で在宅勤務が始まった頃、こちらの記事を見つけPower Appsアプリを作れた時はすごく感動しました。
些細な作業をアプリで自動化し、実際にアプリが動くと楽しいですよね。
皆さんもよろしければ作ってみてください!

Power Apps Advent Calendar、初参戦でした!ありがとうございました!