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

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

行事の〇日前になったら対象者に自動でメールを送る

はじめに

業務で行事の○日前になったら対象者にメールを送りたいということありませんか?

今回はメールを送信する対象者をExcelテーブルで作成し、
Power Automateで行事の前日に対象者に自動メールを送るフローをご紹介します!

フロー全体図


毎日決まった時間にフローを実行して、Excelテーブルに翌日の日付があるレコードがあったらメールを送るという仕組みにしています。

用意するもの

Excelテーブル

今回はこんなExcelテーブルを用意しました。
メールを送信することを考えていますので、「メールアドレス」と「送信日(日付が入る)」列は必ず作成してください。
また、「送信日」列が対象者の行事日ということにします。

Excelの保存先はSharePointもしくはOneDriveになりますが、今回はSharePointに保存したことを前提に説明します。

フローの作成手順

1.繰り返し

トリガーにはスケジュールから「繰り返し」アクションを選択し、以下画像のように設定します。

設定時刻は任意で決めてください。タイムゾーンを(UTC+09:00)大阪、札幌、東京にすることを忘れずに!

これで1日1回、決まった時間にフローが自動実行されます。

2.作成

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

addDays(addHours(utcNow(),9),1,'yyyy/MM/dd')


ここのアクションで、1日後の日付を作成しています。

もし1日前の日付を作成したい場合は、以下のようにするといいです。
addDays(addHours(utcNow(),9),-1,'yyyy/MM/dd')

当日の日付を作成したい場合は、もうお分かりかと思いますが、以下になります。
addDays(addHours(utcNow(),9),0,'yyyy/MM/dd')
フロー実行時に今日の日付が入ったレコードにメールを送りたい場合は、上記の式が使えます♪

3.表内に存在する行を一覧表示

「+新しいステップ」からデータ操作の「作成」アクションを選択し、以下を指定します。
※DataTime形式は必ず「Serial Number」にしてください。

4.Apply to each

「+新しいステップ」からコントロールの「Apply to each」アクションを選択し、動的なコンテンツより「表内に存在する行を一覧表示」の「value」を選択します。

5.条件

Apply to eachアクション内の「アクションの追加」からコントロールの「条件」アクションを選択し、以下を指定します。

右辺:動的なコンテンツより「作成」アクションの「出力」
左辺:式から以下をコピペ

if(empty(items('Apply_to_each')?['送信日']),null,addDays('1899-12-30',int(items('Apply_to_each')?['送信日']),'yyyy/MM/dd'))

Excelの日付形式の値は、1900年1月1日を1としてカウントアップされた数値になっています。
そのため、Power AutomateでExcelの日付を扱うときは日付形式に変換する必要があります。

各列の形式の判定は、Excelテーブルの1行目のデータを基に判定しているため、1行目の日付が空白だと日付形式に変換されないことが起きます。

そこで、今回は都度日付形式に変換する式にしました。
これで送信日が決まっていないレコードがあっても大丈夫です!

6.メールの送信(V2)

条件アクション「はいの場合」の「アクションの追加」からOffice365 Outlookの「メールの送信(V2)」アクションを選択し、以下を指定します。

宛先:表内に存在する行を一覧表示アクションの「メールアドレス」
件名:なんでもどうぞ
本文:こちらもなんでもいいですが、分かりやすく表内に存在する行を一覧表示アクションの「名前」を指定してみました。

フローの実行

早速手動実行してみましょう。
ブログ記載時点では2022/6/22なので、成功すれば1日後の日付が入っている高橋 四郎さんへメールが届きます。

実行ポチッ!

届きました!

さいごに

本記事では空白行があっても大丈夫なフローを紹介しましたが、そもそも空白行を省く方法がありますので、ついでにご紹介します。

「表内に存在する行を一覧表示」アクションで「フィルタークエリ」を以下にします。

送信日 ne ''


これをすると、送信日列が空白のレコードはそもそも取得されなくなります。

上記を行った場合は、「条件」アクションの左辺には以下をコピペします。

addDays(‘1899-12-30’,int(items(‘Apply_to_each’)?[‘送信日']),'yyyy/MM/dd')

条件アクションで都度日付形式に変更する方法とフィルタークエリを利用する方法、お好みの方をお使いください!

Microsoft Formsにアップロードした画像をリストにサムネイル表示する

はじめに

Microsoft Formsには「ファイルのアップロード」という機能があります。
Power Automateを使ってアップロードした画像ファイルをSharePointリストにサムネイルとして表示する方法がありますので、ご紹介します。


フロー全体図


用意するもの

Microsoft Forms

今回は「ファイルのアップロード」のみのアンケートを作成しました。

ファイル数の制限:1、単一ファイルサイズの制限:1GBにしています。(ファイルサイズはご自由に)

SharePoint Online リスト または Microsoft Lists

今回はSharePoint Onlineリストで説明します。

任意のサイトで新規のリストを作成します。
「列の追加」より「複数行テキスト」をクリックします。

私は「Image」という名前をつけて、「保存」をクリックしました。

「Image」列が作成できたら「列の設定」から「この列の書式設定」をクリックします。

「Image 列の書式設定」が表示されるので、「詳細モード」をクリックします。

JSONの書式設定が表示されるので、以下のJSONをコピペして「保存」をクリックします。

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
  "elmType": "img",
  "attributes": {
    "src": "@currentField"
  }
}


これで事前準備は完了です。

フローの作成手順

ここからがPower Automateの話です。

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

トリガーにはMicrosoft Formsの「新しい応答が送信されるとき」を選択し、以下を指定します。
フォームID:事前に作成したアンケート

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

「+新しいステップ」からMicrosoft Formsの「応答の詳細を取得する」アクションを選択し、以下を指定します。
フォームID:事前に作成したアンケート
応答ID:動的なコンテンツの追加から「新しい応答が送信されるとき」の「応答ID」

3.JSONの解析

「+新しいステップ」からデータ操作の「JSONの解析」アクションを選択し、以下を指定します。
コンテンツ:動的なコンテンツの追加から「応答の詳細を取得する」のファイルのアップロードの設問

スキーマ:「サンプルから生成」をクリックします。
※必ず「サンプルから生成」をしてください。

以下のJSONをコピペして「完了」をクリックします。

[{"name":"PA.png","link":"https:","id":"016HND","type":null,"size":876877,"referenceId":"01DF","driveId":"bviAS","status":1,"uploadSessionUrl":null}]


以下のようになっていればOKです。

4.項目の作成

「+新しいステップ」からSharePointの「項目の作成」アクションを選択し、以下を指定します。
サイトのアドレス:リストを作成したサイト
Microsoft Listsのマイリストでリストを作成された方は、サイトのアドレスの指定方法が少し異なりますので過去の記事をご覧ください。
yuri365lily.hatenablog.com
リスト名:事前に作成したリスト
Title:なんでもいいです。(私は動的なコンテンツの追加から「応答の詳細を取得する」のResponders' Emailを選択しました。)
Image:動的なコンテンツの追加から「JSONの解析」の「link」

「link」を選択すると、「Apply to each」が自動で追加されます。

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

フローの実行

実際に画像をFormsからアップロードしてみましょう!

リストを確認すると、「Image」列に画像がサムネイルとして表示されました。(2度回答したので画像が2つになっています)

ちなみに画像はMicrosoftさんの公式ドキュメントからお借りしました。Power Platformのアイコンがあるのはシラナカッタ!
docs.microsoft.com

さいごに

リストのアイテムをクリックしたときに、Formsでアップロードした画像を確認することができますが、

実は画像自体をクリックするとただのURLになってしまいます。

リストには「画像」列というものが別でありますが、Power Automateで「画像」列にFormsにアップロードした画像を格納することができなかったため、今回の方法をご紹介しました。

もし方法をご存じの方がいましたら、教えてください。
また、方法がわかったら新たに記事を書こうと思います!

Microsoft ListsのマイリストをSharePointアクションの候補に表示させる方法

※もし当記事よりいい方法がありましたら教えてくださいm(__)m

背景

Microsoft ListsのマイリストをPower Automateで自動化しようと思い、SharePointの「項目の作成」アクションからマイリストを呼び出そうとしたらサイトのアドレス候補にマイリストが表示されないということがありました。

そこで、マイリストを候補に表示する方法がありましたので、ご紹介します。

手順

1.Micsoroft Listsをブラウザで開きます。

2.Microsoft Listsのホーム画面を開いたら、URLの「https://~_com」までをコピーします。

これは実はOneDriveのURLで、組織のユーザーであれば以下のURLになっています。
https:// <tenant name>-my.sharepoint.com/personal/<user principal name>


OneDriveのURLに関する公式のドキュメントはこちら↓
組織内のユーザーの OneDrive URL の一覧を表示する - OneDrive | Microsoft Docs


ちなみにOneDriveのURLですので、もちろんOneDriveをブラウザで開いたときのURLでをコピーでも大丈夫です。

3.2でコピーしたURLを「サイトのアドレス」の「カスタム値の入力」として貼り付けをします。

するとリスト名にマイリストの一覧が候補として表示されるようになります!

最後に

SharePointの他のアクションである「複数の項目の取得」、「アイテムの作成」などでも同じような方法が使えます。
よきPower Automateライフを♪