「SharePointリストってフォルダ作れないの?」と質問されたので、フォルダのつくり方とPower Automateからの連携方法をメモ。
SPOリストにフォルダは作成可能だけど、安易に使うと権限管理のカオス化や「5000件問題」から派生する問題にハマる危険性があるため、基本的には非推奨。
本記事では、リストでフォルダを使うメリット・デメリットのリアルを解説した上で、Power Automateを使ったフォルダ操作方法をまとめてみた。
標準アクションでは不可能な「HTTPリクエストを使ったフォルダ内アイテムの作成」や{Path}プロパティを活用して「特定フォルダの更新だけをトリガーする」条件式の書き方とかを解説。
そもそもSharePointリストでフォルダを使うべきか?(基本は非推奨)
結論から言うと、SharePointリストでフォルダを作成するのはデメリットが大きいため、基本的には推奨されないらしい。
フォルダで分けたい場合は、「部署」や「ステータス」などの「列」を作成し、ビューの「グループ化」や「フィルター」を使って仮想的にフォルダのように見せるのがおすすめ。
とはいえ、要件によってはフォルダが必要になるケースもあるかもしれないので、まずはメリットとデメリットを簡単にまとめてみた。
メリット1:アクセス権限の分割
フォルダ単位で権限を付与できるため、「このフォルダはA部署だけが編集可能」といった特定のアクセス制御を設定可能。
ただし、この手軽さが後述の「権限管理のカオス化」にもつながる。
メリット2:5000件問題(リストビューのしきい値)の回避策になる
SharePointには「1回の表示やクエリで5000件以上のアイテムを処理しようとするとエラーになる」という仕様がある。
フォルダはそれぞれが独立したコンテナとして扱われるため、1つのフォルダ内のアイテム数を5000件未満に抑えることで、このしきい値エラーを回避してビューを表示できるようになる。
とは言えもちろん、フォルダで回避する前に、まずはインデックスを作成してビューの絞り込みで対処できないか検討するのが王道。
デメリット1:フォルダを跨いだ全体検索や集計が困難になる
リスト本来の強みである「列を使った柔軟な絞り込みや並べ替え」が使いにくくなるのが大きなデメリット。
フォルダの中に入り込まないとアイテムが見えないので、データベースとしての利便性が大きく損なわれ、横断的な集計が非常に面倒になってしまう。
デメリット2:権限管理がカオスになる
リストアイテムごとの権限制御ほどではないにしろ、フォルダごとに細かく権限を設定すると、メンテナンスが大変になる。
であれば、SharePointリスト自体を分けちゃった方がやっぱりよい。
デメリット3:5000件問題の派生トラップ
フォルダで5000件問題を回避できても、以下には気を付ける必要がある。。
- フラット表示の罠: フォルダを無視して全件表示する設定のビューを使うと、合計が5000件を超えていれば当然エラーになる
- 親フォルダ変更の罠: フォルダ内の総アイテム数が5000件を超えた状態だと、親フォルダ自身の「名前変更」や「権限変更」を行うとエラーで弾かれる。
ということで、リストにフォルダを作ることはあまりしないかもしれないけど、せっかく調べたので「リストにフォルダを作る方法」と「Power Automateから操作する方法」を次章で解説。
SharePointリストにフォルダを作成する方法




Power AutomateからSharePointリストのフォルダを操作する
続いてPower Automateからこのフォルダに対し、アイテムを作成したりしてみる。
フォルダ内にリストアイテムを作成する
標準アクションではフォルダ内にアイテムを作成できないため「SharePoint に HTTP 要求を送信します」を使用する。
※フォルダへのパスは「decodeUriComponent」で変換すること

メソッド : POST
URL : _api/web/lists/getbytitle('【リスト名】')/AddValidateUpdateItemUsingPath
Body :
{
"listItemCreateInfo": {
"FolderPath": {
"DecodedUrl": "@{decodeUriComponent(【ここにフォルダまでのURL(/sites/サイト名/Lists/リスト名/フォルダ名】)}"
}
},
"formValues": [
{
"FieldName": "Title",
"FieldValue": "xxx"
},
{
『ここにプロパティを追記していく』
}
],
"bNewDocumentUpdate": false
}

フォルダ内のアイテムを一覧にする





フォルダにアイテムができたときだけフローを起動する
最後、フォルダにアイテムができたときだけフローをトリガーする方法。

// ルート以外(フォルダの中)にアイテムが作成されたとき
@not(equals(triggerOutputs()?['body/{Path}'], 'Lists/【リスト名】/'))
// 特定のフォルダ以下にアイテムが作成されたとき
@startsWith(triggerOutputs()?['body/{Path}'], 'Lists/【リスト名】/【フォルダ名】/')


ということであまり使う機会のなさそうなSharePointリストのフォルダだけど、一応Power Automateからも操作できるので、そのうち使用することがあるかも。
コメント