SharePoint (Microsoft 365) のファイル削除をLogic Appsで検知したい

このエントリは2025/01/17現在の情報に基づいています。将来の機能追加や変更に伴い、記載事項からの乖離が発生する可能性があります。

問い合わせ

全くお初の方から、以下のような問い合わせがあった。

現在Logic Appsの検証で、SharePoint (Microsoft 365) へのドキュメント登録・削除をトリガーに動作することをテストしている。削除・追加のトリガーアクションを使って所望のLogic Appsが動作することは確認した。サブサイトについても同様の仕組みを構成できるか?

SharePoint用コネクターは以下のドキュメントにある通り、ファイルの作成・変更・削除をトリガーにしてLogic Apps (Power Automate) を開始できる。

トリガー / Triggers
https://learn.microsoft.com/connectors/sharepoint/#triggers

サブサイトは文字通り親子関係にあるサイト。デフォルトでは無効になっているが、Classicサイトであれば作成可能、全サイトで作成可能、などの構成ができる。サブサイト作成のための手順は以下のドキュメントに記載がある。最近ではHubサイトを作ることがおすすめらしい。

従来の SharePoint 管理センターでサイトとサブサイトの作成の詳細設定を管理する / Manage detailed site and subsite creation settings in the classic SharePoint admin center
https://learn.microsoft.com/sharepoint/manage-site-creation#manage-detailed-site-and-subsite-creation-settings-in-the-classic-sharepoint-admin-center

親サイトのアクセス許可を子サイト(Subサイト)で継承していたり、Subサイトで独自にサイトコンテンツ管理者権限を持っているユーザーで接続を作成すれば、問題なく動作するはずなのだが、どうやら問い合わせ主が混乱してしまい、ヘルプを求めてきた、ということらしい。

できる?できない?

以下の条件を満たしていれば、可能。

  • SharePointコネクターで利用する接続を、当該サイトのサイトコレクション管理者権限を持つユーザーで作成していること

親サイトのアクセス許可をSubサイトで継承しているのであれば、親サイトのサイトコレクション管理者権限を持つユーザーでSharePointコネクターで利用する接続を作成すればよい。

実際に試してみる

1. Subサイトの作成準備

Subサイトの構成可否設定は、以下の手順で構成する。

1) SharePoint管理センター > 設定 (settings) > 従来の設定ページ (classic settings page) に移動する。

2) サブサイトの作成 (Subsite creation) で構成を指定する。以下の例では、すべてのサイトでサブサイトの作成を有効にする (enable subsite creation for all sites) ように構成している。

これでSubサイト作成のための準備はおしまい。

2. Subサイトの作成

1) サイトのページ右上方にある歯車アイコンをクリックして、サイトコンテンツ (site contents) を選択する(左図)と、右図のようなページが現れる。ここで [+New]のドロップダウンをクリックすると、Subサイト (Subsite) を選択できるので、ここでSubサイトを新規作成する。

2) Subサイトの構成画面で、Subサイトのタイトル、URL名、アクセス許可 (permissions) などを設定していく。ここで重要なのが赤枠で囲んだアクセス許可。要件に合わせて以下のいずれかを選ぶ。

黄色親サイトと同じ権限を使用する (Use same permissions as parent site)
緑色固有の権限を使用する (Use unique permissions)

これでSubサイト作成はおしまい。今回は「親サイトと同じ権限を使用する(黄色)」で構成してみる。

3. 親サイトのサイトコレクション管理者にユーザーを追加 (Optional)

前述の通り、今回は「親サイトと同じ権限を使用する」構成を使うため、親サイトのサイトコレクション管理者にユーザーを追加しておく。

1) サイトのページ右上方にある歯車アイコンをクリックして、サイトのアクセス許可 (site permissions) を選択する(左図)と、右図のようなページが現れる。サイト所有者 (Site owners) に設定してもよいが、きめ細かいアクセス許可を構成するため、高度なアクセス許可の設定 (Advanced permissions settings) を選択する。

2) 高度なアクセス許可の設定画面で、サイトコレクション管理者 (Site Collection Administrators) というリンクがあるので、それをクリックすると以下のような画面が現れる。ここにユーザーやグループを追加する。

これでアクセス許可の設定はおしまい。あとは、検証時に使うサンプルファイルを、Subサイトのドキュメントに追加しておく。

4. Logic Appsの作成

これは通常のLogic Appsの作成と同じ。SharePointコネクターに必要な情報を入れるだけ。なお、SharePointコネクターのポーリング間隔 (Recurrence) は初期状態で3分なので、もしテストするなら高頻度で検出するようにしておいたほうが効率よくテストできる。

今回は検証目的なので、Composeアクションを使って、削除ファイル名をJSON形式に整形する処理を記述しているが、実際には様々な処理を書くことになるはず。これでLogic Appsの作成はおしまい。

5. テスト

わーど.docxというファイルを事前にSharePointのドキュメントに作成しておき、このファイルを削除したところ、無事にLogic Appsが検知して動作した。実行証跡を見ると、以下のよう。

例によって更問が届く

できるとわかれば、いろいろ質問してくるのはどの人も同じようで、いつもの主と同様、更問が届いた。

削除の検知ができることはわかった。では、

  1. Logic AppsのEntra IDテナントはSharePointで同一である必要がある?
  2. 削除されたファイルが存在したフォルダ名はわかるか?
  3. ポーリング間隔で複数のファイルが削除された場合、どういう挙動を示すか?

1. Entra IDテナント

これはAPIとして接続できていればOKなので、同一である必要はない。ただし、SharePointコネクターのこのトリガーを使う場合、接続に使うユーザーはSite collection adminロールに属している必要がある。もし当該ロールに属していないユーザーで接続を作成している場合、コネクターが403で失敗するため、Logic Appsの実行に失敗する。以下はトリガーの例外メッセージ。Site collection adminロールが必要と明記されている。

{
    "statusCode": 403,
    "headers": {...},
    "body": {
        "status": 403,
        "message": "Only Site Collection Admins are allowed to use this trigger\r\nclientRequestId: adc8713a-1dd8-4d6b-a8af-fec15241669f\r\nserviceRequestId: 4f5a78a1-3071-4000-7605-e1a20c7ddee9"
    }
}

2. 削除されたファイルが存在したフォルダ名

残念ながら削除トリガーで取得できるメタデータには元のフォルダ名はない。そのため、SharePoint OnlineのREST APIなどを使って検索するしかない。具体的には、REST API(もしくはMicrosoft Graph)でSharePoint Onlineのごみ箱情報を取得(削除時刻、削除者、削除ファイルでフィルタリング)することで探索する。

REST を使用してフォルダーとファイルを操作する / Working with folders and files with REST
https://learn.microsoft.com/sharepoint/dev/sp-add-ins/working-with-folders-and-files-with-rest
リスト アイテム / List items
https://learn.microsoft.com/graph/api/recyclebin-list-items?view=graph-rest-1.0

3. ポーリング間隔で複数のファイルが削除された場合の挙動

このSharePointコネクターのトリガーでは、debatchするか否かを構成できる。具体的には、SplitOnプロパティのOn/Offで挙動が変わる。

a) SplitOnをOffにした場合

SplitOnをOffにすると、分割せず、複数の削除ファイルの情報が配列の形でLogic Appsに届く。

この場合、Logic Appsは1インスタンスのみ動作する。トリガーで取得できる情報は以下のような形で届く。

b) SplitOnをOnにした場合(初期状態)

Onの場合は複数の削除ファイルの情報は1個ずつに分割(debatching)されてLogic Appsに届く。この場合は、分割対象のデータを指定する必要がある。今回の場合は、TriggerBody内のvalueという配列を分割している。

これにより、削除ファイルの個数分だけ、Logic Appsインスタンスが作成される。以下は2個のファイルを削除した例。Logic Appsの実行証跡では2件のインスタンスが同時刻に動作していることがわかる。

そして、インスタンスを見てみると、各インスタンスで削除したファイル1件ずつの情報を受け取っていることがわかる。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください