松本典子の「はじめよう!Azure Logic Apps/Power Automateでノーコード/ローコード」 第44回
文書をリストに登録しておけば、担当者のTeamsに3日前のアラートが送られる
契約書を確実に期限管理! SharePoint+Power Automateで期日通知を自動化
2024年12月04日 11時00分更新
こんにちは、Microsoft MVP(Business Applications)の松本典子です。
契約書やプロジェクト資料など、期限の管理が大切な文書は皆さんの身の回りにも多くあるのではないでしょうか。ただし、Excelなどを使って手作業で大量の文書の期限管理を行うのは、時間と労力がかかるうえ、期限日が来ているのを見逃してしまうリスクがあります。
そこで今回は、SharePointリストとPower Automateを組み合わせて、文書の期限日が近づいたときにTeamsでアラート通知を自動送信してくれるフローを構築したいと思います。文書の担当者がそれぞれリストに登録すればいいので手間が軽減され、なにより「期限日の見逃し」を防げます。
1. 事前準備と注意点
まずは事前準備として、管理対象となる文書を登録するSharePointリストを用意します。今回は、契約書の期限管理を行うことを想定して「契約書管理」というリスト名にしました。
このリストには5つの列(タイトル、期限日、担当者、状態、URL)を用意します、「状態」は未処理/処理中/処理済みといった文書のステータスを入力します。また「URL」には、SharePoint上にある契約書ファイルのURLを入力します。
SharePointリストを作成するうえではひとつ、注意点があります。列を作成する際には、いったん列の名前を英語やローマ字(アルファベット)で入力して作成し、その後に日本語名に変更したほうがよい、というものです。
なぜ、そうした少し遠回りな手順を踏んだほうがよいのでしょうか。説明します。
SharePointリストで列を作成すると、システムの内部では列の管理に使う「内部名」が生成されます。この内部名は、列の作成時にユーザーが入力した「列の名前」基づいて生成されますが、日本語(日本語文字)で入力すると、エンコードされた特殊な文字列になってしまいます。一方で、英語(アルファベット)で入力した場合は、そのままの文字列になります。
●列の名前を日本語で入力した場合:
・列の名前:期限日 → 内部名:_%E6%9C%9F%E9%99%90%E6%97%A5
●列の名前を英語で入力した場合:
・列の名前:DueDate → 内部名:DueDate
この内部名は、のちほどPower Automateからリストの列を参照する際に使います。そのため、エンコードされた日本語の文字列だと「扱いづらい」のです。
もっとも、エンコードされた文字列でも正確に書き写せば正しく動作するのですが、そもそも「どの列を指しているのか一目では分かりづらい」「文字列を書き損じても気づきにくい」といった問題があります。それならば、最初から英語で入力しておいたほうが無難というわけです。
なお、列の内部名は、SharePointリスト上の表示名を変更しても変わりません。画面表示される列の名前は、日本語にしておいたほうが扱いやすいでしょう。
2. 今回作成するワークフロー
今回、Power Automateで作成するワークフローは上図のようになります。
「スケジュール」トリガーを使って毎日決まった時間に起動し、SharePointリストの「期限日」列を参照して、フローの実行日が「期限日の3日前」であれば、担当者へのメンションを付けてTeamsに通知を投稿するという内容です。
なお、今回はクラシックデザイナーの画面で説明していますが、フローはモダンデザイナーでも同じように作成できます。
2-1. トリガーの設定
トリガーには「スケジュール」コネクタを利用します。「組み込み」タブで「スケジュール」コネクタをクリックし、トリガーとして「繰り返し」を選択します。
(1)間隔:間隔は「1」、頻度は「日」を選択
(2)タイムゾーン:「(UTC+09:00)大阪、札幌、東京」を選択
(3)設定時刻(時間):「9」を入力
(4)設定時刻(分):「0」を入力
上記のとおり設定することで、このフローは「毎日1回、午前9時」に起動します。
2-2. アクションの設定:変数を初期化する
Teamsで送信する通知メッセージに、確認してほしい書類のURL(ハイパーリンク)を追加したいので、その処理に使う変数を用意します。
「組み込み」タブの「変数」コネクタをクリックし、「変数を初期化する」アクションを選択します。
(1)名前:「リストURL」と入力
(2)種類:「文字列」を選択
この変数「リストURL」には、ハイパーリンクのための文字列を格納するので、種類は「文字列」とします。
2-3. アクションの設定:複数の項目の取得
SharePointリスト「契約書管理」の内容を取得します。このとき「フィルター」を適用して、特定の条件を満たすアイテムだけを取得するようにします。
検索窓に「SharePoint」と入力して「SharePoint」コネクタをクリックします。アクション一覧から「複数の項目の取得」アクションを選択します。
(1)サイトのアドレス:対象のSharePointサイトを選択
(2)リスト名:対象のリストを選択(今回は「契約書管理」)
(3)フィルター:「フィルタークエリを詳細に切り替え」をクリックして、以下の文字列をコピー&ペースト
(DueDate eq '@{formatDateTime(addDays(addHours(utcNow(), 9), 3), 'yyyy-MM-dd')}') and (Status ne '完了')
このフィルターは、日本時間の今日を基点に「3日後の日付」を計算したうえで、「期限日」列(内部名はDueDate)がその日付であり、なおかつ「状態」列(内部名はStatus)が「完了」ではないアイテムだけを取り出す、という内容です。
2-4. アクションの設定:Apply to each
リストには多数のアイテムが列記されますから、「2-3. アクションの設定:複数の項目の取得」で取得するアイテムが複数になる場合もあります。それに対応できるよう「Apply to each(それぞれに適用する)」アクションを設定します。
「コントロール」コネクタをクリックし、アクションの一覧から「それぞれに適用する」を選択します。
「以前の手順から出力を選択」の項目には、「複数の項目の取得」の動的なコンテンツである「Value」を入力します。
これ以降のアクションは、すべて「Apply to each」の枠内に追加していきます。
2-5. アクションの設定:ユーザーの @mention トークンを取得する
Teamsに通知メッセージを送信しても、担当者が気づかなければ意味がありません。そこで、SharePointリストの「担当者」列に設定されているユーザーにメンションを付けるよう設定します。
検索窓に「Teams」と入力し「Microsoft Teams」コネクタをクリックします。アクション一覧から「@mention トークンを取得する」アクションを選択します。
「ユーザー」の項目には、「複数の項目の取得」の動的なコンテンツ「担当者 Email」を入力します。
2-6. アクションの設定:変数の設定
「2-2. アクションの設定:変数を初期化する」で作成した変数に、SharePointリストのページへのリンク(URL)を格納します。書類のURLに直接リンクすることもできるのですが、期限日などの情報をリストで確認することもあるかと思い、リストページにリンクしています。
「組み込み」タブの「変数」コネクタをクリックし、アクション一覧から「変数の設定」アクションを選択します。
(1)名前:「リストURL」を選択
(2)値:以下の文字列をコピー&ペースト([SharePointリストのURL]の部分は、皆さんのSharePointリストのURLに置き換えてください)
<a href="[SharePointリストのURL]">SharePointリスト:契約書関連</a>
ここではHTMLタグ(aタグ)を使って、ハイパーリンクを作成しています。
2-7. アクションの設定:チャットまたはチャネルでメッセージを投稿する
ShrePointリストの「期限日」の3日前になったアイテムについて、Teamsに通知メッセージを送信します。
検索窓に「Teams」と入力し「Microsoft Teams」コネクタをクリックします。アクション一覧から「チャットまたはチャネルでメッセージを投稿する」アクションを選択します。
(1)投稿者:「フローボット」を選択
(2)投稿先:「チャネル」を選択
(3)チーム:作成済みのチームを選択
(4)チャネル:「General」(一般)を選択
(5)メッセージ:テキストと動的なコンテンツを組み合わせて投稿内容を作成します。内容は適宜変更してください。
・「2-5. アクションの設定:ユーザーの @mention トークンを取得する」で作成した動的なコンテンツ「@mention」を選択
・「複数の項目の取得」の動的なコンテンツをそれぞれ選択。SharePoint上の未対応/対応中/完了といった「状態」を入力したい場合は「状態(Value)」を選択
・リンクには「2-6. アクションの設定:変数の設定」の動的なコンテンツを入力
なお(5)メッセージでは、変数「リストURL」を呼び出しています。SharePointリストへのハイパーリンクは固定なので、わざわざ変数に設定する必要はないのでは? と思われるかもしれませんが、ここでHTML文を直接書き込んでも、単なるテキストとして処理されてしまうので、このようにしています。
以上でフローが完成しました。最後は忘れずに、フローに名前を付けて「保存」します(筆者は「ファイル期限管理通知フロー」というフロー名にしました)。
3. 実行結果
ワークフローが完成したので、さっそく試してみましょう。スケジュールトリガーの場合、本来は設定した時刻が来ないと実行されませんが、「テスト」機能を使えば動作確認が行えます。
サンプルリストの内容は下図のとおりです。
今回、フローを実行するのは11月24日です。そのため、3日前の通知対象になる(=「期限日」が11月27日である)アイテムは、契約書A、契約書C、契約書Dです。ただし、契約書Aについては「状態」が「完了」になっているため、通知は送信されないはずです。
フローの「テスト」を実行して、Teamsにメッセージが投稿されたかどうかを確認します。
確認すると、契約書C、契約書Dについての期日3日前の通知が正しく送信されていました。「リンク」の項目はハイパーリンクとして投稿されており、クリックすれば当該の書類が開きます。また、担当者へのメンションも機能しています。
最後に
今回は「書類の期限管理」をテーマにしましたが、SharePointリストとPowerAutomateのフィルター機能を活用すれば、ほかの用途でも「リスト登録したアイテムのうち、条件に合ったものだけをフローで自動処理する」仕組みが簡単に作れそうです。
実際にユーザーが操作するのはSharePointリストだけなので、使い勝手も良いと思います。本記事を参考にして、ほかにどんな用途で使えそうか、アイデアをふくらませてみてください。良いアイデアが浮かんだら、ぜひフローを作ってみましょう!
参考
この連載の記事
-
第43回
Team Leaders
社内からの質問に自動回答! AI Builder+ノーコードでQ&Aボットを作ろう -
第42回
Team Leaders
Power Automateで複数人の承認(多段階承認)ワークフローを簡単作成しよう -
第41回
Team Leaders
重要なTeamsメッセージの見失い/見落としを防ぐPower Autometeのフローを作ろう -
第40回
Team Leaders
クラウドフローからデスクトップフローを「Picture-in-Picture」で起動する -
第39回
Team Leaders
面倒なカレンダー登録作業を生成AIで自動化するワークフローを作ろう -
第38回
Team Leaders
生成AIに日本語プロンプトで指示を出し、メールから情報を抽出してもらおう -
第37回
Team Leaders
フォルダー内のすべてのファイルを添付してメールを自動送信するフローを作ろう -
第36回
Team Leaders
ローカルPCのテキストファイルをPower Automateに読み込ませて活用しよう -
第35回
Team Leaders
受信メールの添付ファイルを種類に応じたフォルダに自動保存する -
第34回
Team Leaders
Power AutomateでTeamsのチーム全員にメンションを送る方法 - この連載の一覧へ