備考欄に感想を書くタイプのエンジニア

それで出世が遅れ(ry

Power Automate で SharePoint の News が投稿されたら通知すると言うけれども…

はじめに

SharePoint News の機能をうまく使えないかと以前試した時にエディターが好みではなかったのでそれっきり投げ出していたのですが、Modern News になってからなのかその前なのかちょっとわかりませんが、最近使ってみるとエディターが以前より少し使いやすくなっていました。

それならばと、例えば Teams にこまごまと情報をばらまくよりは News のような形で情報をまとめて、あるいはキュレーションしてコンテンツにしておく手段の一つとして考えてもいいのかもしれません。となるとやはり、新着があったら通知したい、と思っても何ら不思議ではありません。今回はその実装を Power Automte で行ってみました。

ちなみに Teams のチームに関連づけされた SharePoint のサイトの News の通知をチームに対して行いたい場合は Teams の SharePoint News アプリを使うともっと簡単でいいと思います。

なお、以降 Power Automate の話が出てきますが、私が言語設定を英語にして利用している都合上、Power Automate のトリガーやアクションの名前が英語になっていますので、日本語で利用されている方は適宜脳内で変換してください。

結論から

SharePoint Online の News ページを作成するとページファイルが追加されるドキュメントライブラリ Site Pages のライブラリ ID を(手動で)取得し、その ID を Flow の SharePoint のトリガーアクションである Wnen a file is created (properties only)Library Name として指定した上でページファイルがあるフォルダ(/SitePages)を選択すると、トリガーアクションとして機能するので、PromoteState=2 の場合のみ通知を行うように条件分岐をすれば、Modern News が投稿された場合に自動的に通知を行うことが可能です。これだけなら非常に簡単な Flow です。

どのような経緯でこの結論に達したか

検索する

ごく一般的な方法としてインターネットを検索したところ、例えば Get notified by email when a news post is created on a SharePoint site とか、Using Power Automate for SharePoint News Notifications というような感じで答えっぽいものがすぐ出てきました。ほかにもいくつかあった気がしますが、数としてはそれほど多くはなさそうです。

写経をしてみる

せっかくなのでまずは写経してみます。トリガーアクションとして SharePointWhen a file is created or modified (properties only) を選択し、Site Address から任意のサイトを選択すると、Library Name にサイト内のライブラリの候補が現れますが、News のページがある Site Pages は候補に出てきません。それでも参考にした記事ではカスタム値として Site Pages を入力すればその先のアクションを構成できるとのことだったのですが、実際にやってみると Flow を保存する際に以下のようなエラーが発生し、Flow を保存できません。

Flow save failed with code 'DynamicOperationRequestClientFailure' and message 'The dynamic operation request to API 'sharepointonline' operation 'GetTable' failed with status code 'NotFound'. This may indicate invalid input parameters. Error response: { "status": 404, "message": "List not found\r\nclientRequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\r\nserviceRequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }'.

別の方法を考える

上のエラーの内容を調べたり Library Name に入力する値をいくつか試してみましたが状況は改善しませんでした。 そこで、参考にした記事の考え方だけは拝借してなんとかライブラリだけ正しく参照できる値がないか調べてみたところ、Site Pages ライブラリに Power Automate のショートカットを発見しました。開いてみたところ、Send a customized email when a new file is added というあまりにも都合がよさそうな Flow が初めから用意されていたので、そのままテンプレートを使って Flow を作成してみました。

すると、トリガーアクションとして SharePointWhen a file is created (properties only) が選択されていたのですが、Library Namexxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx の形式の ID のような文字列が入力されていました。なるほど、そういう入力値は許容されるのかと初めて知ったのですが、この文字列の出所がわからないのでライブラリ ID なのかどうかを以下の方法で確認しました。

  1. ID を確認したいライブラリを開く
  2. 歯車アイコンをクリックして Library Settings を開く
  3. URL に含まれている ID を確認する

これで取得した文字列が Library Name に入力されている文字列と同じだったことから、少し面倒ですがこの ID を取得しておけばトリガーアクション以外でも Site Pages のファイルにアクセスできるようになると思います。

ちなみに、最初に参考にした記事のように When a file is created or modified (properties only) をトリガーアクションにすると公開後に編集して再公開してもトリガーが実行されてしまうので、最初に発行されたときだけ Flow が動けばいいという場合はトリガーアクションの Trigger Conditions で新規作成された場合のみ動くように条件を追加するか、今回のように When a file is created (properties only) をトリガーアクションにすればいいと思います。