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

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

Formsに回答した人に添付ファイル付きのメールを送る(複数添付ファイルも可)

はじめに

「社内セミナーの申し込みフォームなどをFormsで作成し、回答者に添付ファイル付きのメールを送りたい。」

という相談がありました。

Outlookのメールの送信アクションは、デフォルトで1つのファイルしか添付できませんが、複数ファイルを送りたいときもあるかと思います。

今回は、Formsに回答した人に添付ファイル付きメールを送るフローの作り方を紹介します!

フロー全体図


用意するもの

Formsアンケート

回答者にメールを送付させたいFormsアンケートをご準備ください。
今回はサンプルとしてテンプレートのFormsアンケートを用意します。

SharePointドキュメントライブラリ

ご自身のOneDrive Businessのフォルダを指定することもできますが、今回はSharePointドキュメントライブラリにします。

1.任意のSharePointサイトより「サイトコンテンツ」→左上の「+新規」→「ドキュメントライブラリ」をクリックします。

2.「空のライブラリ」をクリックします。

3.ドキュメントライブラリの名前を決めて「作成」をクリックします。
ここでは「Attachments」という名前にします。

4.ドキュメントライブラリが作成されたら、メールに添付させたいファイルを格納します。
ここでは、3種類のファイルを格納します。
複数ファイル格納していますが、1ファイルだけでもフローは動きます。

以上で準備は完了です。

フロー作成手順

1.新しい応答が送信されるとき

Power Automateを開き「作成」→「自動化したクラウドフロー」をクリックします。

任意のフロー名をつけて、トリガーを「新しい応答が送信されるとき」にして「作成」をクリックします。

以下を指定します。
フォームID:事前準備で作成したアンケート

2.応答の詳細を取得する

+をクリックし、「アクションの追加」より「応答の詳細を取得する」アクションを選択します。

アクションが見つからない場合は、検索ボックスで「Forms」と検索してください。


以下を指定します。
フォームID:トリガーで指定したアンケートID
応答ID:動的なコンテンツ(稲妻マーク)より「新しい応答が送信されるとき」の「応答ID」

3.変数を初期化する

+をクリックし、「アクションの追加」より「変数を初期化する」アクションを選択します。

アクションが見つからない場合は、検索ボックスで「変数」と検索してください。


以下を指定します。
Name:ここでは「添付ファイル」とします。(好きな名前でOK)
Type:Array

4.ファイルの取得(プロパティのみ)

+をクリックし、「アクションの追加」より「ファイルの取得(プロパティのみ)」アクションを選択します。

アクションが見つからない場合は、検索ボックスで「SharePoint」と検索してください。


以下を指定します。
サイトのアドレス:SharePointドキュメントライブラリがあるアドレス
ライブラリ名:事前に作成したドキュメントライブラリ

5.ファイルコンテンツの取得

+をクリックし、「アクションの追加」より「ファイルコンテンツの取得」アクションを選択します。

アクションが見つからない場合は、検索ボックスで「SharePoint」と検索してください。


以下を指定します。
サイトのアドレス:SharePointドキュメントライブラリがあるアドレス
ファイル識別子:動的なコンテンツ(稲妻マーク)より「ファイルの取得(プロパティのみ)」の「識別子」

ここで、自動でFor eachアクションが追加されます。

6.配列変数に追加

For each内の+をクリックし、「アクションの追加」より「配列変数に追加」アクションを選択します。

アクションが見つからない場合は、検索ボックスで「変数」と検索してください。


以下を指定します。
Name:添付ファイル(3のアクションでつけた名前)
Value

{
  "Name": "@{items('For_each')?['{FilenameWithExtension}']}",
  "ContentBytes": @{body('ファイル_コンテンツの取得')}
}


7.メールの送信(V2)

+をクリックし、「アクションの追加」より「メールの送信(V2)」アクションを選択します。

アクションが見つからない場合は、検索ボックスで「Outlook」と検索してください。


以下を指定します。
宛先:動的なコンテンツ(稲妻マーク)より「応答の詳細を取得する」の「Responders' Email」
件名:自由なもの
本文:自由なもの

詳細パラメーターを「すべて表示」にして、「添付ファイル」のTマークをクリックします。

動的なコンテンツ(稲妻マーク)より「変数」の「添付ファイル」を指定します。


以上で、フローの作成は完了です。

実行してみる

実際にFormsアンケートを回答してみると、、

フローが実行されて、複数ファイルが添付されたメールが回答者(私)に届きました!

おわりに

「メールの送信(V2)」アクションで動的に添付ファイルを指定することで、複数ファイルを添付することができます。

フローで指定しているのはドキュメントライブラリの場所だけなので、添付するファイルが変わってもフローをメンテナンスする必要がないのは便利ですね。

Launch関数でTeamsのメッセージリンクを起動したときに、直接Teamsアプリを開くようにする方法

はじめに

この記事は、Power Apps Advent Calendar 2023]シリーズ2 12月17日担当分の記事です。

qiita.com

TeamsのメッセージリンクをSharePointリストに格納し、Power Appsでアプリを作ったとき、ボタンをつけてワンタップで該当のメッセージに飛べるようにする。
ということをよくやるのですが、ある時、ユーザーさんにこう言われたことがありました。


「ボタンをクリックすると、毎回Microsoft Teamsを開きますか?とブラウザが開くので、直でTeamsアプリが開くようにしてほしいのですが、、」


確かに!!


ということで、今回はPower AppsからTeamsリンクを開いたときに、直でTeamsアプリが開くようにする方法をご紹介します。

Before

今までどうなっていたか?をサンプルデータを用いて紹介します。

Teamsメッセージ

チャネルメッセージをSharePointリストに格納したいとします。
今回はサンプルなので超シンプルにしています。

SharePointリスト

今回は、タイトル(1行テキスト)とMessage Link(ハイパーリンク)列を作成しました。


Power Automateクラウドフロー

フローは、チャネルに新しいメッセージが投稿されたら、メッセージの詳細を取得し、
上記のSharePointリストに格納させています。

これにより、TeamsのメッセージリンクをSharePointリストに格納することができます。

Power Appsキャンバスアプリ

画面に垂直ギャラリーを配置し、データソースは上記で作成したShrarePointリストにしています。

ギャラリー内に画像を配置し、OnSelectプロパティに以下を設定していました。

Launch(ThisItem.'Message Link')

Launch関数を用いて、SharePointリストのハイパーリンク列を起動し、Teamsの該当するメッセージに飛ぶことを想定していました。
learn.microsoft.com

しかし、①Power Appsでボタンを押す→②WebでTeamsが開く→③Teamsアプリが開く
という順番になっていました。

After

OnSelectプロパティを以下に変えることで解決しました。

Launch(Substitute(ThisItem.'Message Link',"https://teams.microsoft.com","msteams:"))

Substitute関数を使用して、["https://teams.microsoft.com"]を["msteams:"]に変更しました。
learn.microsoft.com

これをすることで、ボタンをタップしたときに、一瞬WebでTeamsが起動するのですが、
Microsoft Teams(work or school)を開く」を一度クリックすれば、それ以降は直接Teamsアプリが開くようになります。

さいごに

Power Automateで取得したTeamsリンクをブラウザを経由せずに直接アプリで開く方法のご紹介でした。

今年はあまりブログを投稿できませんでした、、最近DataverseやAI Builderについて触り始めたので、その辺の記事も書けたらと思っています。
Power Apps Advent Calendar2回目の参加でした!良いお年を!

SharePointリストの複数行テキストをTeamsに投稿したときに改行させる方法

はじめに

SharePointリストに項目を作成したとき、Teamsチャネルに投稿するフローを作っていた時の話です。


複数行テキスト列に改行を入れた状態で送信したのに、Teamsチャネルには改行なしで投稿されてしまうことに気づきました。


SharePointリストでは改行ありで作成されるのに、


Teamsには改行なしで投稿されてしまいます。


今回は、Teamsにも改行ありで投稿されるようにする方法をご紹介します。

フロー全体図


やり方

項目が作成されたとき、チャットまたはチャネルで投稿するシンプルなフローをスタートとして説明します。


SharePointリストは、「タイトル」列と「Comment」という複数行テキスト列を使っています。


1.作成

「項目が作成されたとき」トリガーの下に「データ操作」の「作成」アクションを追加します。

「作成」アクションはもう一個使うので、わかりやすく「作成:改行」という名前にしています。


入力のところに、改行を設定します。


2.作成

「作成:改行」アクションの下に同じく「データ操作」の「作成」アクションを追加します。

こちらもわかりやすく「作成:置換」という名前にしていますが、名前を付ける付けないはおまかせします。


入力のところに、以下を設定します。

replace(triggerOutputs()?['body/Comment'],outputs('作成:改行'),'<br>')


※triggerOutputs()?['body/Comment']の部分は、動的なコンテンツより複数行テキスト列の列名を選択しています。

replace関数を使うことで、複数行テキストの改行をhtmlの改行タグに置換させます


replace関数についてはこちらのブログがわかりやすく解説されておりましたので、共有いたします。
blog-tips.sekenkodqx.jp


3.チャットまたはチャネルでメッセージを投稿する

最後に、「Message」に手順2で作成した動的コンテンツの「出力」を含めたら完了です。


フローを実行すると、以下のようにTeamsにも改行ありで投稿されます。


さいごに

SharePointリストの複数行テキスト列で改行した場合、Teamsに投稿されるメッセージも改行するようにする小技でした。

他にもやり方がありましたら教えていただけますと幸いです!

SharePointリストをPower BIでPlannerっぽく可視化する

はじめに


この記事は、Power BI Advent Calendar 2022 カレンダー2の 12月16日(金)担当分の記事です。

私はよく業務でSharePointリストを使っているのですが、プロジェクトの進捗管理もリストを用いて行うことがあります。
そこで、SharePointリストをPower BIで可視化できたら面白そう!と思い、Power BIを触り始めました。


タスク管理ツールとして、MS製品に「Microsoft Planner」というものがあると思いますが、メンバーごとに割り振られているタスクの数を可視化できる機能がありますよね。


これをSharePointリストを可視化したときにもできたらいいな!と思いチャレンジしたところ、上手くできずに躓いてしまいました。
(初めからPlannerを使えという話はナシでお願いします笑 リストの方が列をカスタマイズできるので便利な時もあるのです(*´ω`))


今回は、PlannerのグラフみたいにSharePointリストを可視化する方法がわかったので、共有したいと思います!

用意するもの

SharePointリスト

以下のようなリストを今回は作成しました。
Statusは選択肢列、Userはユーザーまたはグループ列で「複数選択を許可」がオンになっています。


Power BIレポート作成手順

1.データを取得

Power BI Desktopを開き、「データを取得」>「詳細」>「オンラインサービス」>「SharePoint Onlineリスト」を選択して「接続」をクリックします。


2.SharePoint Onlineサイトに接続

サイトURLを入力する画面が表示されるので、サイトのURLを入力して「OK」をクリックします。
ここで、必ず実装は「2.0」にしましょう。


3.SharePoint Onlineリストの選択

ナビゲーターが表示されるので、該当するリストにチェックし、「データの変換」をクリックします。

4.Power Queryエディターで列を展開

今回の本題がここになります。
Power Queryエディターが開くので、User列を確認しましょう。

「Table」となっているので、このままでは使えません。

なので、User列の右にある「展開」マークをクリックして、「title」にチェックをして「OK」をクリックします。

すると、User列が展開されて、ユーザー名が表示されるようになります。
また、プロジェクト名が割り当てられたユーザー分、表示されるようになります。

これでレポートを作成できる準備ができました。
左上の「閉じて適用」をクリックします。

5.レポート作成

視覚化メニューから「積み上げ横棒グラフ」を選択し、以下画像のようにセットするとユーザーごとにグラフが表示されるようになります。
Planner っぽいグラフになりましたね!


さいごに

SharePointリストをPower BIでPlannerっぽく可視化する方法の紹介でした。

Power BI初学者のため、大した記事を書けなかったかもしれませんが、念願のQiita Advent Calendar にPower Automate/Power Apps/Power BIで参加できてよかったです!

■Power Automate Advent Calendar 2022の記事
yuri365lily.hatenablog.com

■Power Apps Advent Calendar 2022の記事
yuri365lily.hatenablog.com

今年はブログを開設して、勉強会に参加と色々Powerな活動をできた年でした。
来年はもっとPowerな一年にできるように頑張ります!

皆様良いお年を!

Teamsチャネルに投稿されたメッセージをSharePointリストに格納する

はじめに

この記事は、Power Automate Advent Calendar 2022 カレンダー2の 12月10日(土)担当分の記事です。


Teamsを使っていて、参加しているチームが多くてどこにどのメッセージがあったかわからなくなる時はありませんか?

Power Automateを使ってチャネルに投稿されたメッセージをリストに格納すれば、後で一覧で確認/検索もできるのではとふと思いました。

また、フローを複製することで、別チームのメッセージも同じリストに格納することができます。
メッセージに添付されたファイルもリストの「添付ファイル」列に格納することができます。

更にリストに格納するときに、アイテムごとに固有のアクセス権を付与することで、自分が参加しているチームに投稿されたアイテムしか表示しないこともできます。
※リストのアイテムごとに固有のアクセス権を付与できるのは5,000件までです

今回は、これらの機能をPower Automateで自動化したので、作り方を紹介します!

フロー全体図


このフローは、以下を想定しています。
・Teamsチャネルに投稿されたメッセージと添付ファイル、リンクをSharePointリストに格納
・アイテムごとに個別(チーム別)のアクセス権を付与

用意するもの

SharePointリスト

以下のような列を作成してください。
赤枠の部分が新たに作成した列になります。それ以外は規定列です。
チーム列は、どこのチームから投稿されたかわかりやすくするためにチーム名が記載された選択肢列としました。

私は以下のように列を並び替えました。「添付ファイル」も規定列です。

フロー作成手順

1.チャネルに新しいメッセージが追加されたとき

Power Automateを開き「作成」>「自動化したクラウドフロー」をクリックします。

トリガーに「Microsoft Teams」の「チャネルに新しいメッセージが追加されたとき」を選択し、以下を指定します。


チームID:SharePointリストに格納したいチームID
チャネル:SharePointリストに格納したいチームのチャネル

2.メッセージ詳細を取得する

「+新しいステップ」から「Microsoft Teams」の「メッセージ詳細を取得する」アクションを選択し、以下を指定します。


メッセージ:動的なコンテンツより「チャネルに新しいメッセージが追加されたとき」の「メッセージID」
メッセージの種類:チャネル
チーム:トリガーで指定したチームID
チャネル:トリガーで指定したチャネル

3.条件

「+新しいステップ」から「組み込み」の「コントロール」>「条件」アクションを選択し、以下を指定します。


左辺:動的なコンテンツより「メッセージ詳細を取得する」の「本文コンテンツ」
次の値に等しくない
右辺:systemEventMessageを画像のように入力してください

この条件アクションは、たまにチャネルに投稿していないのに空白のアイテムが作成されるときがあり、その正体がsystemEventMessageだったため、回避するために入れています。

systemEventMessageは、チャネルの追加などのTeamsのイベントのことを指しており、イベントをきっかけにフローがトリガーされてしまうケースが過去に何回かありました。
systemEventMessageに関する詳細情報は、以下リンクを参考ください。
learn.microsoft.com

4.以下はいの場合「Htmlからテキスト」

「+新しいステップ」から「Content Conversion」の「Htmlからテキスト」アクションを選択し、以下を指定します。


動的なコンテンツより「メッセージ詳細を取得する」の「本文 コンテンツ」

Htmlからテキストに変換させることで、後にSharePointリストに格納するときに綺麗なテキストが入ります。

5.項目の作成

「+新しいステップ」から「SharePoint」の「項目の作成」アクションを選択し、以下を指定します。


サイトのアドレス:SharePointリストがあるアドレス
リスト名:事前に作成したSharePointリスト
Title:動的なコンテンツより「チャネルに新しいメッセージが追加されたとき」の「メッセージ件名」
投稿日時:動的なコンテンツより「チャネルに新しいメッセージが追加されたとき」の「メッセージcreatedDateTime」
Teamsで見る:動的なコンテンツより「メッセージ詳細を取得する」の「メッセージリンク」
本文:動的なコンテンツより「Htmlからテキスト」の「プレーンテキスト」
チームValue:任意の選択肢
投稿者Claims:動的なコンテンツより「チャネルに新しいメッセージが追加されたとき」の「メッセージfromユーザーdisplayName」

6.アイテムまたはファイルの共有を停止します

「+新しいステップ」から「SharePoint」の「アイテムまたはファイルの共有を停止します」アクションを選択し、以下を指定します。


サイトのアドレス:SharePointリストがあるアドレス
リストまたはライブラリ名:事前に作成したSharePointリスト
ID:動的なコンテンツより「項目の作成」の「ID」

アイテムごとに個別のアクセス権を付与させるため、このアクションでアクセス権の停止を行います。

7.アイテムまたはフォルダーへのアクセス権の付与

「+新しいステップ」から「SharePoint」の「アイテムまたはフォルダーへのアクセス権の付与」アクションを選択し、以下を指定します。


サイトのアドレス:SharePointリストがあるアドレス
リストまたはライブラリ名:事前に作成したSharePointリスト
ID:動的なコンテンツより「項目の作成」の「ID」
受信者:チームのメールアドレス
ロール:Can View
受信人への通知:いいえ

受信者で指定したチームに属している人にアイテムのアクセス権が付与されます。

※注意点
SharePointリストのアイテムごとに個別のアクセス権を付与していますが、付与できるのは5,000件までになっています。
5,000件を超えるアイテムをリストに格納される場合はご注意ください。

8.Apply to each

「+新しいステップ」から「組み込み」の「コントロール」>「それぞれに適用する」アクションを選択し、以下を指定します。


動的なコンテンツより「チャネルに新しいメッセージが追加されたとき」の「メッセージ添付ファイル」

9.パスによるファイルコンテンツの取得

Apply to each内で「+新しいステップ」から「SharePoint」の「パスによるファイルコンテンツの取得」アクションを選択し、以下を指定します。


サイトのアドレス:SharePointリストがあるアドレス
ファイルのパス:Shared Documents/チャネル名/Item(‘Apply_to_each’)?[‘name’]

ここでは、添付ファイルがチャネル直下にあることを前提にしています。

10.添付ファイルの追加

Apply to each内で「+新しいステップ」から「SharePoint」の「添付ファイルの追加」アクションを選択し、以下を指定します。


サイトのアドレス:SharePointリストがあるアドレス
リスト名:事前に作成したリスト
ID:動的なコンテンツより「項目の作成」の「ID」
ファイル名:式よりItem(‘Apply_to_each’)?[‘name’]
ファイルコンテンツ:動的なコンテンツより「パスによるファイルコンテンツの取得」の「ファイルコンテンツ」

おまけ

SharePointリスト書式設定1:行をコンパクトに表示する

格納したTeamsメッセージが長文だと、標準では縦長の行になり見づらくなってしまいます。そこで、列の書式設定を用いて「本文」列をコンパクトに表示させます。

1.「本文」列を左クリックし、「列の設定」>「この列の書式設定」をクリックします。

2.「詳細モード」をクリックします。

3.JSONの編集画面になるので、以下に置き換えます。

{
"$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
"elmType": "div",
"style": {
"display": "block",
"max-height": "10px",
"padding": "11px 0",
"overflow": "hidden"
},
"txtContent": "@currentField"
}

これを行うと、複数行テキスト列がだいたい3行までの表示になるので、リスト全体がコンパクトに表示されておすすめです!

SharePointリスト書式設定1:ハイパーリンク列をアイコンにする

メッセージリンクがハイパーリンク列に格納されるのですが、そのままだと長いURLが格納されてしまいます。
代替テキストに変えるという方法もありますが、せっかくならアイコン表示にしちゃいましょう。

1.「Teamsで見る」列を左クリックし、さきほどと同じ手順でJSONの編集画面に行き、以下に置き換えます。

{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "a",
"style": {
"text-decoration": "none",
"font-size": "25px",
"margin": "0 auto"
},
"attributes": {
"iconName": "TeamsLogo",
"target": "_blank",
"href": "=@currentField"
}
}


ちなみに、"iconName"の「"TeamsLogo"」の部分を変えると他のアイコンになります。
アイコン一覧は以下のサイトを参考ください。
www.flicon.io
これで、ハイパーリンク列がTeamsアイコンになり、Teamsアイコンをクリックすると該当メッセージに飛ぶことができます。

さいごに

私の部署では、グループ会社さんや派遣さんがいるため、業務連絡用のチームが複数あります。
(プライベート/共有チャネルは使っていません)

いずれか1つだけの参加であれば問題ないのですが、すべてのチームに参加していたため、どこにどのメッセージがあるかわからなくなることが多々ありました。

複数ある業務連絡用のチームのメッセージをひとつのリストに格納したら、一覧で表示することができて結構便利なのでは?と思い、今回のフローを作成しました。

他にもいい使い方はあると思うので、よかったら作ってみてください!

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

はじめに

この記事は、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、初参戦でした!ありがとうございました!

未完了のTo Doタスクを毎朝Teamsで通知する

はじめに

私はタスク管理にMicrosoft To Doをよく使うのですが、毎朝8時にTeamsが未完了のタスクを通知してくれたら嬉しいな~。
何なら仕事終わりに明日のタスク入力も通知してくれたら嬉しいな~。と思い、Power Automateでフローを作ってみました。

実際に使ってみて結構便利だと感じましたので、今回はこのフローの作り方を紹介します!

フロー全体図

今回はフローを2つ作ります。

1.毎日8時に未完了タスクをTeamsで通知するフロー

2.毎日17時にタスク入力をTeamsで通知するフロー

用意するもの

Microsoft To Do

「タスク」に予めいくつかタスクを入れておきましょう。
今回はタスクの優先度も表示させるので、1つ重要タスクにしてみました。(★マークがつきます)

フローの作成手順(毎日8時に未完了タスクをTeamsで通知する)

1.Recurrence

Power Automateを開き「作成」>「スケジュール済みクラウド フロー」をクリックします。
繰り返し間隔を「週」にすることで、月~金までの平日のみフローを実行させることができます。
必要事項を設定したら、「作成」をクリックします。

フローの編集画面が開くので、Recurrenceトリガーの「詳細オプションを表示」し、タイムゾーンと設定時刻を設定します。

2.すべてのタスクの一覧表示

「+新しいステップ」から「Outlook Tasks」の「すべてのタスクの一覧表示」アクションを選択します。
このアクションでは特に設定する項目はありません。

3.アレイのフィルター処理

「+新しいステップ」から「データ操作」の「アレイのフィルター処理」アクションを選択し、以下を設定します。

差出人:動的なコンテンツより「すべてのタスクの一覧表示」の「body」
左辺:動的なコンテンツより「すべてのタスクの一覧表示」の「状態」
右辺:NotStarted

何故右辺が「NotStarted」なのかは、一度上記までのフローをテスト実行してみるとわかります。
「すべてのタスクの一覧表示」アクションの出力を確認すると、Statusが「NotStarted」になっており、ここを利用しているためです。

4.選択

「+新しいステップ」から「データ操作」の「選択」アクションを選択し、以下を設定します。

開始:動的なコンテンツより「アレイのフィルター処理」の「本文」
キー1:何もいれません
値1:・

キー2:タスク
値2:動的なコンテンツより「アレイのフィルター処理」の「件名」

キー3:優先度
値3:動的なコンテンツより「アレイのフィルター処理」の「優先度」

5.HTMLテーブルの作成

「+新しいステップ」から「データ操作」の「HTMLテーブルの作成」アクションを選択し、以下を設定します。

開始:動的なコンテンツより「選択」の「出力」

チャットまたはチャネルでメッセージを投稿する

「+新しいステップ」から「Microsoft Teams」の「チャットまたはチャネルでメッセージを投稿する」アクションを選択し、以下を設定します。

投稿者:フローボット
投稿先:Chat with Flow bot
Recipient:自身のメールアドレス
メッセージ:以下画像のようにお好みに

Microsoft To Doをすぐ開けるように、リンクを設定しています。

以上で、毎日8時に未完了タスクをTeamsで通知するフローの作成は完了です。

フローの作成手順(毎日17時にタスク入力をTeamsで通知する)

1.Recurrence

Power Automateを開き「作成」>「スケジュール済みクラウド フロー」をクリックします。
繰り返し間隔を「週」にすることで、月~金までの平日のみフローを実行させることができます。
必要事項を設定したら、「作成」をクリックします。

フローの編集画面が開くので、Recurrenceトリガーの「詳細オプションを表示」し、タイムゾーンと設定時刻を設定します。

2.チャットまたはチャネルでメッセージを投稿する

「+新しいステップ」から「Microsoft Teams」の「チャットまたはチャネルでメッセージを投稿する」アクションを選択し、以下を設定します。

投稿者:フローボット
投稿先:Chat with Flow bot
Recipient:自身のメールアドレス
メッセージ:以下画像のようにお好みに

Microsoft To Doをすぐ開けるように、リンクを設定しています。

以上で、毎日17時にタスク入力をTeamsで通知するフローの作成は完了です。

フローの実行

早速手動でテスト実行してみましょう。

正しくTeamsに通知されました!

テスト実行なのでTeamsに通知された時間が実行時間になっていますが、普段は平日の8時と17時にフローが実行されます。

さいごに

未完了のTo Doタスクを毎朝Teamsで通知する、仕事終わりに明日のタスク入力を通知するフローの紹介でした。
毎朝タスクをTeamsで通知してくれたらタスク漏れを防げそうですよね。

本当はタスクの期限も表示させたかったのですが、YYYY-MM-DDThh:mm:ssZの表記で表示されてしまうので、yyyy/MM/dd表記にする方法を探していたのですがよくわかりませんでした。。
わかったら追記したいと思います。有識者教えてください。。

よきPower Automateライフを♪