業務改善と標準化を同時に実現:MS 365業務システム開発

【Power Automate】期限が来たら自動で通知メールを送信する。SharePoint「複数の項目の取得」アクション、フィルタークエリ

    
【Power Automate】期限が来たら自動で通知メールを送信する。SharePoint「複数の項目の取得」アクション、フィルタークエリ
\ この記事を共有 /
【Power Automate】期限が来たら自動で通知メールを送信する。...

この記事ではPower Automateを使って自動で期限が来たら通知メールを送信するプログラムを図解しています。データベースにSharePointを使い、「複数の項目の取得」アクションとその中のフィルタークエリの使い方を詳しく学べます。

(動画時間:9:47)

初級編:「マイクロソフトPowerApps【コントロールと関数 完全ガイド】」
Udemyオンラインコースを作りました!

⇒ 半額になる「ディスカウントリンクページ」へ

エクセルからSharePointリストへデータのエクスポートの仕方

こんにちは、リーンシグマブラックベルトのマイク根上です。
業務改善コンサルをしています。

今日はこの動画リクエストからです。

Power Automate 動画リクエスト

「必要な業務システムを作れたらと思っています。」「エクセルリストがあるのですがこれの期限が来たらそのユーザに通知が行くようなシステムです。」

小林さん、リクエストありがとうございました。

もしそのエクセルファイルを頻繁に開けるのであれば
エクセルVBAだけでこれを実現できますが、
Power Automateを使って完全な自動化をしたいという事なので、
それを今日は作ってお見せします。

小林さんから従業員の氏名、免許証有効期限日、
メールアドレスが入ったサンプルデータをもらいました。

実現したい事はPower Automateで毎日その有効期限日を確認して、
その日付まで残り30日になった人に自動で通知メールを送る事です。

最初は試行錯誤しますので僕はいつもサンプルデータを単純化して少なくします(行を削除)。
メールアドレスもテストして結果を見たいので自分のアドレスを入れときます。

今回の課題はエクセルファイルをSharePointやOneDriveに保存してもできますが、
それでは実務では信頼性が低くなります。
ですのでエクセルファイルの代わりにSharePointリストを使います。

実はエクセルの表をSharePointリストにエクスポートするのはすごく簡単なのです。
その表をまず「テーブル」と言う状態にする必要があるので、
列名を含めて表全体を選択し、メニューバーから
「ホーム」、「テーブルとして書式設定」でお好きな書式を選んで作れます。

すると上のメニューバーに「テーブルツール」が出てきますので、
そこから「エクスポート」、「テーブルをSharePointリストにエクスポート」を選ぶ

この小画面が出てきます。

テーブルをSharePointリストにエクスポートボタン

ここでSharePointリストを作りたいサイトのトップページに行き、
そこのURLをコピーして、またエクセルに戻り、
「アドレス」の欄にペーストします。

テーブルをSharePointリストにエクスポート小画面

次がリストの「名前」で、このテーブルに関する
お好きな名前を入れて下さい。
今回は「有効期限DB」としておきます。

「次へ」をクリックして、それぞれの列のデータ型が出てきます。
たまに本当は数値なのにテキストになっていたりしますので、
その時は一度キャンセルして、シート上で書式を正してから入力し直して下さい。

今回は正しいので「完了」をクリックします。

これでデータのエクスポートが始まります。
それが終わると終了メッセージが表示され、
その中のリンクをクリックすると、
でき立てのSharePointリストに行けます。

Power Automateで繰り返しのフローのトリガーを設定する

次にPower Automateの設定をしましょう。
上のメニューバーの「自動化」、「Power Automate」、
「フローの作成」をクリックしていきます。

そこに該当するテンプレートが無いので
「フローの表示」をクリックし、Power Automateの画面で一から作ります。

その画面右上の「新規」をクリックすると
フローをどの様に始めたいかを聞いてきますので、
今回は毎日定期的にフローを始めたいので
「スケジュール‐一から作成」を選びます。

「フロー名」を「有効期限確認」として、
「繰り返し間隔」で「1日」にして「作成」をクリックします。

Recurrenceトリガー

「Recurrence」とは「繰り返し」と言う意味で定期的にトリガーされます。
それをクリックすると詳細が見えて、
「設定時刻」の「時間」と「分」で
毎日午前8時半にフローが始まるようにしました。

SharePointの「複数の項目の取得」アクションの設定

次に、トリガーされたらどうするか、
「新しいステップ」をクリックして
次のアクションを設定します。
答から言うと「SharePoint」で検索して、
「複数の項目の取得」アクションを使います。

「複数の項目の取得」アクション設定画面

「サイトのアドレス」と「リスト名」から
さっき作ったSharePointリストを特定するのです。
このアクションは上のステップでトリガーされた後に
SharePointリスト内のデータを取りに行くのです。

「詳細オプションを表示する」をクリックすると
「フィルタークエリ」という項目があり、
それにデータの条件を入れる事で
条件に合致したデータだけを取得する事もできます。

今回の例では「有効期限が今日から30日以内」という事です。
この条件は後ほど入れますので、今は空白のままにして、
メールアドレスも含めた全てのデータを取得することになるのです。

Outlookの「メールの送信 (V2)」アクションの設定

再度、「新しいステップ」をクリックして、
取得したメールアドレスにメールを送るので
「Outlook」で検索し、「メールの送信 (V2)」を選びます。

「メールの送信 (V2)」アクション設定画面

「宛先」にカーソルを持って来て
「動的なコンテンツの追加」をクリックして、
「もっと見る」をクリックすると沢山選択肢がありますね。
ここにさっきのSharePointリストから取得した列も全て入っています。
「宛先」なのでその中の「メールアドレス」を選びます。

「Apply to each」の画面

すると「Apply to each」となりましたね。
これは「それぞれに適用する」と言う意味です。
一つ前のアクションで複数のメールアドレスを取得しているので、
それぞれのメールアドレスでこの「メールの送信」アクションを
実行するという意味です。

そのアクションの中身を見ると、
「件名」と「本文」にテンプレートとして
適当な文章をタイプします。
ここでも「動的なコンテンツの追加」で
SharePointからの情報を使えます。
また「詳細オプションを表示する」をクリックして、
CCに自分のメールアドレスを入れとけば自分にもメールが送信されます。

作成したフローのテストの仕方とその結果の見方

ここで一度このフローのテストをしてみましょう。
画面右上の「テスト」、「トリガーアクションを実行する」、
「テスト」、「フローの実行」と、クリックしていきます。
すると「フロー実行ページ」をクリックするとテスト結果画面が出てきます。

一番上のが今のテストでもうすでに成功しているのが分かります。
それを選ぶと各アクションでの状況が見れて、
もし途中でエラーが出てればそこで止まり、エラーの解決をするのです。

「Apply to each」を展開して詳細が見えます。
本当は磯部さんだけが有効期限を迎えメールを受取るのですが、
先ほど「フィルタークエリ」に条件を入れなかったので
全ての人にメールが送信されました。

「複数の項目の取得」の「フィルタークエリ」に絞り込みの条件を入れる

それでは「フィルタークエリ」に条件を入れるために
「複数の項目の取得」アクションをクリックして中身を見ます。
下の「本文」の中の情報を後で参照するのでこのタブは取っておきます。

左のタブの編集画面に戻ります。
「複数の項目の取得」アクションを展開して
更に「詳細オプションを表示する」をクリックし、
この「フィルタークエリ」に「残り日数が30日以内」
と言う条件を書けばいいのです。

しかし、残り日数は「有効期限日」‐「今日の日付」になりますが、
日付と日付の差を求めるのはここでは少し難しくて、
数式を下記の様にちょっと変形します。

「有効期限日」‐「今日の日付」<= 30日

「有効期限日」<=「今日の日付」+30日 

「SharePointの日本語の列名がフィルタークエリ内で使えない」の対処法

ここで一つ日本人には大きな問題があります。
「フィルタークエリ」内では日本語の列名が使えないのです。どうしましょう?

そこでさっきのテスト結果の画面に戻り、
「複数の項目の取得」アクションの中の「本文」を見ます。

テスト結果「複数の項目の取得」アクション内の「本文」

実はここの「OData」から始まる各文字列がデータの列名で、
ここでは氏名、有効期限日、メールアドレスを表します。

有効期限日のODataの文字列を選んでCtrl+C でコピーし、
編集画面に戻って、「フィルタークエリ」内にペーストします。

半角の空白を入れて、英語の「より小さいか同じ」は
「Less than or Equal」ですので小文字で「le」と書きます。

「フィルタークエリ」内で条件を記入中

ちなみに「より小さい」は英語で「less than」ですので「lt」と書きます。
その他の演算子はマイクロソフトの公式ページを見て下さい。
⇒「マイクロソフト公式ページ:Odata 比較演算子」

最後に「今日の日付+30日」をどう表すのでしょうか?
さっきの「動的なコンテンツ」の横に「式」があります。
これで色んな計算結果を求められるのです。

その中に「addDays(」と入れると説明が出てきますが、
ちょっと分かり難いですね。
要はここに今日の日付と30と入れれば「今日の日付+30日」になるのです。

そして「今日」の関数はPower Automateでは「utcNow()」なのです。
僕はいつも「Now」とタイプしてエンターをします。
そして、「,(カンマ)」、30とタイプして「OK」をクリックしてでき上がりです。

「フィルタークエリ」内で条件を記入中2

それではさっきと同じようにテストをしてみましょう。
そしたらなんと失敗でした。
テスト結果画面の右下に「エラーの詳細」が書いてあります。
それをヒントにバグ取りをしていくしかありません。

実はさっきの「addDays」の式の前後に半角のシングルコーテーションが必要だったのです。
それを入れてまたテストを実行すると、今度は成功しましたね。

「フィルタークエリ」内で条件を記入完成

これでPower Automateが毎日有効期限日を確認して
自動で通知メールを出してくれるので、
その分、自分はもっとレベルの高い仕事に時間を使う事ができます。

Power Automateは世にある沢山のITサービスを繋いで
今までに無い自動化を実現できますのでぜひもっと研究してみて下さい。

初級編:「マイクロソフトPowerApps【コントロールと関数 完全ガイド】」
Udemyオンラインコースを作りました!

⇒ 半額になる「ディスカウントリンクページ」へ

「こちらの記事も読まれてます。」