Sharepoint内で今日更新されたファイルのLinkをTeamsのスレッドに自動で投稿するフロー

タイトル通りのフローをPowerAutomateで作ったのでメモです。
久々に作ってみたら結構色々忘れてたので備忘録を兼ねてます。
中身は下記です。

1. フロー全体像・入力と出力
1. スケジュールでPAC起動する
1. 「フォルダの一覧」でフォルダ内ファイルの情報を取得する
1. 今日の日付を”yyyy/MM/dd”というフォーマットに変換する
1. ForEachをフォルダ内それぞれのファイルに適用する
1. 各ファイルの最終更新日のフォーマットを変換する
1. 今日更新されたものを条件分岐で判断する
1. ファイルのリンク付きの投稿をTeamsの所定のスレッドに返信する

# 1. フロー全体像・入力と出力
下記画像参照。
アクションの名称変えてるのでぱっと見どこで何してるかわかるかなと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/eb6cdb38-3e7e-3d84-f00f-8e58b42b96cb.png)

ちなみに使ってるアクションの元の名前は下記です：
* Sharepoint「フォルダーの一覧」
* Date Time「現在の時刻」
* Date Time「タイムゾーンの変換」
* Control「それぞれに適用する」 (For each)
* Control「条件」
* Microsoft Teams「チャネル内のメッセージで応答します」

# 1-1.入力
入力は下記フォルダ内の2ファイルとします。
これらのファイルの最終更新日が今日だったらフローが色々やる感じです。
もっとファイルがあっても機能します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/25637155-3753-0098-551a-52e13741d423.png)

# 1-2.出力
出力は下記のように、所定のスレッドに返信のかたちでファイル名とリンクが投稿されるものです。リンクはハイパーリンクになっており、クリックするとそのファイルが開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/61947b3a-a464-d649-7321-10ba3016fefd.png)

目立たせたいならメンション付けるといいと思います。
あと更新したファイルが多いとスレッド追うの大変そうなので、その場合は別のかたちの出力にするといいんじゃないかと思います。

# 2. スケジュールでPAC起動する
特にひねりないですが下記です。
平日のみの起動を想定しているのでFrequencyは「週」にして月～金を選択してます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/e3cce7d1-45cf-0686-57aa-4d8152856cbf.png)

# 3. 「フォルダの一覧」でフォルダ内ファイルの情報を取得する
これ名前がわかりにくいんですが、<b>「所定のSharepoint Folder内のファイル(フォルダ)の属性が取得できる」アクション</b>です。
下記の設定では、「自分用Teams」というSharepoint(Teams)の中のGeneral(一般)の中の"00_Trial"というフォルダを指定してます。
フォルダの指定は「ファイル識別子」のスペースの右側の<b>フォルダアイコン</b>をクリックして選択するようにすると入力ミスが避けられると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/9edc6e3c-b3d0-5d2a-602a-3c1c7d632d39.png)

なお当アクションで取得できる動的コンテンツ(保存されてるファイルの属性)は下記です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/bb2751b6-f253-7558-cd7b-e3006dc164f8.png)

注意点として、"Name"と"DisplayName"が別物なので注意です。
<b>現在そのフォルダに表示されているファイル名が"DisplayName"</b>で、<b>一番最初にそのファイルを作ったときの名前が"Name"</b>です。
    例えば"Sample.xlsx"というExcelを新規に作って保存して、その後なんらかの理由で"hoge.xlsx"に変更すると、<b>"Name"は"Sample.xlsx"</b>, <b>"DisplayName"は"hoge.xlsx"</b>になります。


# 4. 今日の日付を”yyyy/MM/dd”というフォーマットに変換する
これはDate Time「現在の時刻」「タイムゾーンの変換」を併せて使います。

まず「現在の時刻」は何も編集できないので中身が下記です。
一方で、<b>フローの後半で「ファイルの最終更新日」と「本日の日付」を比較したい</b>ので、日付の情報のみにしてフォーマットを合わせる必要があります。
しかし「現在の時刻」のデフォルトの出力(動的コンテンツ)は時間を含むので、それを排除した表示形式に変換する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/89e16b9c-52f2-a993-7eca-190e6e92f1af.png)

そこで使うのが「タイムゾーンの変換」です。
まず1つ前の「現在の時刻」は初期設定では「標準時」の時刻が出るので、それを"Destination Time Zone"の欄で日本の時刻に直します。
その後"Time Unit"で希望のフォーマットに変更します。
表示されているフォーマットだと例えば今日なら'2024/10/06'と表示される形式です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/06f4d100-71db-d952-421e-80bdce2dda03.png)

ただyyyy/MM/ddの形式は標準の選択肢にはない形式なので、<b>「カスタム値の入力」を選択してから"yyyy/MM/dd"と直接打ちます</b>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/eadbbaef-f3dc-57ef-2dcb-9acbf8d5ef9d.png)

なお表示形式はフロー後半で適切に比較できさえすればなんでもいいです。
今回はできるだけシンプルな表現で、かつ「カスタム値の入力」の例をあげる意味でこれにしてます。

# 5. ForEachをフォルダ内それぞれのファイルに適用する
For Eachの中身は下記ですが、これ別に何もしなくても、<b>「フォルダの一覧」で生成される動的コンテンツを使った何かのアクションを作ると自動的に生成される</b>ので特に細かくは気にしなくていいと思います。
始めてやると「え何これ」びっくりするかもですが、「フォルダの一覧」では複数のファイルの動的コンテンツが生成される関係で、自然とそれに対応するようにPowerAutomateが調整してくれるんで素直に頼っちゃいましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/a4d32c00-096b-c40f-4a59-986cb9200878.png)


# 6. 各ファイルの最終更新日のフォーマットを変換する
これはやってることは前述の段落4番と同じですが、<b>入力として「フォルダの一覧」で生成された各ファイルの更新日の動的コンテンツ"LastModified"を使ってる点が違うだけ</b>です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/90ecc3a7-caa3-9062-cac4-2b54a59cdca1.png)

# 7. 今日更新されたものを条件分岐で判断する
これはControl 「条件」を使ったもので、下記の判別式を使ってます。
条件式の右辺と左辺が紛らわしいですが、左(黄色ハイライト)が段落6で生成したSharepoint内の各フォルダの最終更新日で、右(緑ハイライト)が段落4で生成した今日の日付です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/7101f3e6-71be-33b9-37bd-c64cb63a0966.png)

YES(合致)するなら所定のスレッドへの返信、NOならば何も起こらないようになります。

# 8. ファイルのリンク付きの投稿をTeamsの所定のスレッドに返信する
ここはちょっといくつかポイントがあるので分けて説明します。
各設定詳細は下記です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/bd7ce597-3fe2-79ca-647a-b338b58f152d.png)

# 8-1. 所定のスレッドに返信する
スレッドに返信するにはスレッドのID(Message ID)を取得する必要がありますが、これは下記手順で確認できます。

<b>1) 返信したいスレッドの右上の「・・・」からリンクをコピーを選択する</b>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/22b11cd5-f90d-3bee-9086-8409771c5dad.png)

<b>2) メモ帳などに適当にコピペし、"parentMessageId="以降の数字を確認する。</b>
リンクをペーストしてみるとすごいわけわからないごちゃごちゃした文章出ると思いますが、ざっくりした構造は下記です。parentMessageId以外にも色々あるのがわかると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/c71b33bb-50d9-0999-a6df-f682fee9a629.png)

で、PACでMessageIDの欄に確認したID貼ればOKです。

# 8-2. Teams投稿にハイパーリンクを埋め込む
これは「ファイルの一覧」で出る"Path"という動的コンテンツを使います。
ただそれをそのままメッセージに入力すると、テキストとして表示されるだけでハイパーリンクになりません。なのでハイパーリンク化の設定が必要になります。

これは説明用のテキストを別途を加えて説明します。

1) 本文に表示したい文章を設定して、右上の"<>"を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/73b22b8c-aa3a-00dd-ce03-76a517c4b564.png)

2) HTML編集モードにしたら、"Path"の動的コンテンツの前後にそれぞれ黄色ハイライトの文章を加える。
実際"Path"だけをhrefの最初のタグにいれるのも操作としてはできるのですが機能しません。なのでhttps:...から始まる部分を付けたうえでPathを加える必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3343332/875928d8-e2d4-e7ad-b584-8806ce1d3343.png)

これで序盤にあげた出力のようにハイパーリンクが付いた投稿になります


# まとめ
今回はSharepoint内の所定のファイルが更新された際、最終更新日が今日だった場合にそれを自動的にリンク付きで連絡するためのフローの解説してみました。

どこかのどなたかのお役に立てば幸いです。