見出し画像

SharePoint リスト件数 試行錯誤した話

こんにちは!
やっぱりPowerPlatformが楽しいと感じております。
PowerAppsを使いSharePointリストにデータを溜めていると件数が気になります。
件数が増えるのは嬉しい悲鳴なのですが、対処は必要なので
今日は自分なりSharePointリストにおける件数の対策を行った内容をkじいにします。


2,000件問題

PowerAppsのギャラリーに表示されるのは2,000行まで
この制約があり委任不可の式は書かないようにしています。

イメージ1

委任不可の式

  • Search関数 または in句を使ったFilter関数
    完全一致でも前方、後方一致でもなく部分一致で検索できたほうが良いのは言うまでもないですが、SharePointリストでは部分一致を行うための
    Search関数、in句を使ったFilter関数は委任の警告がでます。

  • コンボボックスで選択した複数の値を取得する処理
    では、コンボボックスはIsSearchableプロパティをtrueにすれば検索も可能だしSelectMultipleプロパティをtrueにすれば複数項目も設定できるので、上記の部分一致ができなくてもコンボボクッス上で検索できるのではと考えました。
    例:(株)テスト、テスト、株式会社テストのようなものが拾える。
    しかし、検索値 in ComboBox.Selected.Valueのような書き方が必要となり
    上記同様in句を使った式は委任の警告が出ます。

  • SharePointリストの複数テキスト行
    複数行のテキストも検索対象にできたらと思い、コンボボックスでなんとか検索できないかと試してみました。が複数行テキストは委任の警告がでました。

結局どうしたかというと、SharePointリストのはいいいえ列、選択肢列、日付列、コンボボックスは検索ができるので、IsSearchableプロパティをtrueにしてInputTextPlaceholderプロパティはヒントを与えることができるので、「検索またはプルダウンから選択」としてなんとか検索してもらうことにしました。

イメージ1

5,000件問題

また、SharePointリストにデータが5,000件以上溜まっているとリストビューのしきい値というバーが表示され、「このリスト内のアイテム数がリストビューのしきい値(5,000アイテム)を超えています。サーバーに過度な負荷がかかる原因となるタスクは現在禁止されています。」と表示されるようになります。
要はフィルターやソートができなくなるということ。

イメージ2

拝聴しましたOOTAさんのバーチャルマラソンの動画やあんこ先生のサイトではインデックス列を設定すれば5,000件を超えてもフィルターやソートが可能とのことでした。

ちなみにインデックス列は「インデックス付きの列」から設定します。


イメージ3

ですが、インデックス付きの列は20個までと決まっています。
項目が多くなりすぎたのですが、検索ですでに20を超えてしまい
インデックス列の活用ではなく、データを移管しようと考えることになりました。
項目の多さは見直す必要があるのかもしれませんが…

イメージ4

そういうわけで、データを退避する方法を考えることになります。

リストの列をコピーするのは、作成する際に「既存のリストから」を選択するとできるけれど、データまではコピーできない。

イメージ5

そのため、実際考えてみたのは、PowerAutomateを使ってリストのコピーができないか考えました。

「既存のリストから」を選択し移行前のリストと同じリストを作成。
その後、既定で決まっているIDや登録者はコピーできないため、まず移行先のリスト下記2項目を設置

イメージ6

この内容は、こちらの記事を参考にさせていただいております🙇‍♂️🙇‍♂️🙇‍♂️

まず、「手動でフローをトリガーします」を追加しました。

イメージ7

SharePointリストを全件取得するため、「複数の項目の取得」を追加します。

イメージ8

右上の・・・をクリックして「設定」→「改ページ」をオンにして「しきい値」を移行する件数分、増やすことができます。
(最大5000まで)

イメージ9

複数の項目を取得しているので自然と「Apply to each」のアクションが作成されます。

イメージ10

「項目の作成」アクションを設置し、移行前リストから移行後リストにデータを退避

イメージ11

その次に「添付ファイルの取得」アクションで添付ファイルを取得

イメージ12

添付ファイルは複数の場合もあるので「Apply to each」アクションが作成されます。

イメージ13

「ファイルのコンテンツの取得」でファイルを取得。
ファイル識別子はドキュメントライブラリ上のファイルを取得する場合はフォルダアイコンから階層上のファイルを取得するけれど、リスト上の添付ファイルの場合は「添付ファイルの取得のID」を設定するのが勉強になります。

イメージ14

リストの添付ファイルの取得の流れ

  • 「複数の項目」アクションをもとにリストのIDを取得

  • リストのIDをもとに「添付ファイルを取得アクション」を設置

  • 「添付ファイルの取得」のidをファイル識別子に設置

添付ファイルのidって何か気になってみたので、調べてみたところ
ファイルの識別子のようなものと思いました。
AbsoluteUriは添付ファイルのURL、DisplayNameはファイル名
※確かリストの添付URLは下記だった。
https://<サイトのURL>/Lists/<リスト名>/Attachmens/<リストのID>/<ファイル名>

イメージ15


最後に「添付ファイルの追加」アクションを追加。

イメージ16

ID ←「項目の作成」アクションの「ID」を設定
ファイル名 ←「添付ファイルの追加」アクションの「DisplayName」を設定
ファイルコンテンツ ←「ファイルコンテンツの取得」アクションのファイルコンテンツを設定

全体のフローは下記のようになりました。

イメージ17

ハイパーリンク列や選択肢列で複数値を使用している場合は、もっとPowerAutomateで工夫が必要なのですが、以下の列であれば比較的簡単に
データ移行ができそうです。

  • 1行テキスト

  • 複数行テキスト

  • 選択肢(複数なし)

  • はい/いいえ

  • 数値

  • ユーザまたはグループ

  • 日付と時刻

それにしてもSharePointリストの「ID列」ってPowerAutomateでは大事ですね。


色々と大変勉強になりました。


この記事が気に入ったらサポートをしてみませんか?