欲しいアプリは自分で作る!

Power Platform や Azure などを利用して作成した業務アプリや趣味アプリなどをご紹介します。

Power Apps のキャンバスアプリは結局のところ SharePoint リストからデータを何レコード取得できるのか調べてみた

あくまで 2021/06/05 時点の調査結果であり、今後動きが変わる可能性がありますのでご注意ください。



Power Apps の「委任」についてご存知の方は、おそらく「500件」という数字がパッと思いつくと思います。

委任をご存知ない方はよろしければご参考ください:
qiita.com


で、この500件というのは何かというと、Microsoft の Docs には「委任できない場合の制限」の説明に「Power Apps では、ローカルで処理可能なデータの量を既定で 500 件のレコードに制限しています。」と記載されています。

docs.microsoft.com

また、キャンバスアプリの作成画面では「設定」の中に「委任がサポートされていないサーバー ベースの接続から取得する行数を設定します」という記載で、上記の500件を最大2000件まで設定できる機能があります。 f:id:jn-kodama:20210605163445p:plain

これだけを見るといかにも「委任できない場合は500件(設定で最大2000件)しか取得できないんだな」と思いますよね。
逆に言うと「委任できる場合は制限なく取得できる」と思いますよね。
(少なくとも私が昔委任に関する記事を書いたときはそう思っていました)


ということで、本当にそうなのか? を実際に確かめてみました。
この記事では、データソースからレコードを取得する時によく利用されると思われる以下の2つの方法について、委任できる場合と委任できない場合でどうなるかを見ていきます。

  • ギャラリーコントロールで一覧表示
  • コレクションにデータを格納



使用するデータソース

今回は我が家で実際に使用している家計簿アプリのデータが格納されている SharePoint Online カスタムリストを用いて実験してみます。 f:id:jn-kodama:20210605151220p:plain


2021/06/05 時点で1839件のレコードが格納されています。 f:id:jn-kodama:20210605151302p:plain


このカスタムリストを、あらかじめキャンバスアプリの "データ" に追加しておきます。 f:id:jn-kodama:20210605152326p:plain


取得できる行数を意図的に変更しておく

事象の原因を切り分けるために、設定の「委任がサポートされていないサーバー ベースの接続から取得する行数」を意図的に変えておきます。 適当に255行にしておきました。 f:id:jn-kodama:20210605152142p:plain


実験① ギャラリーコントロールで委任できる式を利用して取得

実験①②では、ギャラリーコントロールを用いてデータを取得してみましょう。

ギャラリーコントロールを追加し、Items プロパティにテーブル名をそのまま記載します。
全件取得できれば1839件表示されるはずです。 f:id:jn-kodama:20210605152734p:plain


今ギャラリーコントロールに何件表示されているかを CountRows 関数で取得してみます。 f:id:jn-kodama:20210605152906p:plain


100件しか表示されませんね。
ギャラリーコントロールでは、基本的に100件ずつ取得するようです。
続いて、ギャラリーコントロールをスクロールしてみましょう。 f:id:jn-kodama:20210605153530p:plain


スクロールする度に100件ずつ増えていきます。
いけるところまでいってみましょう。 f:id:jn-kodama:20210605153652p:plain


1839件、全件取得できました。

ちなみに、5000件を超えるといわゆる SharePoint の5000件問題によりエラーになるようです。
ご参考: qiita.com


ということで「実験① ギャラリーコントロールで委任できる式を利用して取得」は、少しずつではありますが255件の設定に関わらず取得できるようです(ただしおそらく5000件まで)。


実験② ギャラリーコントロールで委任できない式を利用して取得

ギャラリーコントロールを追加し、Items プロパティに委任できない Filter 式を用いて SharePoint リストの値を全件取得する式を記載します。
(ID 列の不等号は委任できない) 実験①を考慮すると、まずは100件表示されるはず… f:id:jn-kodama:20210605154624p:plain


あれ?いきなり255件取得していますね。
どうやら委任できない場合はギャラリーコントロールであろうと設定値である255件を一括で取得するようです。
(ちなみに実験①の直後に行ったことで実験①で取得済みのデータが使われた、というわけではないことは他のリストも利用するなどして確認済み)

続いて、ギャラリーコントロールをスクロールしてみましょう。 f:id:jn-kodama:20210605155052p:plain


残念ながらこれ以上は取得されませんでした。


ということで「実験② ギャラリーコントロールで委任できない式を利用して取得」は、255件の設定までしか取得できないようです。

ここまでくると、「委任できない場合は500件(設定で最大2000件)しか取得できず、委任できる場合は制限なく取得できる」と思いますよね。


実験③ ClearCollect 関数で委任できる式を利用して取得

実験③④では、ClearCollect 関数を用いて SharePoint リストからコレクションにデータを取得してみましょう。

ボタンコントロールを追加し、OnSelect プロパティに SharePoint リストのデータを全件コレクションに取得する処理を書いてみます。 f:id:jn-kodama:20210605155537p:plain


ボタンをクリックしたら、取得したデータの件数を見てみましょう。
コレクション「jikken3」の件数を CountRows 関数で取得します。 f:id:jn-kodama:20210605155726p:plain


おっと!まさかの255件のみが取得されました。


ということで「実験③ ClearCollect 関数で委任できる式を利用して取得」は、255件の設定までしか取得できませんでした。


実験④ ClearCollect 関数で委任できない式を利用して取得

ボタンコントロールの OnSelect プロパティに、委任できない Filter 式を用いてデータを全件コレクションに取得する処理を書いてみます。 f:id:jn-kodama:20210605160244p:plain


ボタンをクリックしたら、取得したデータの件数を見てみましょう。
コレクション「jikken4」の件数を CountRows 関数で取得します。 f:id:jn-kodama:20210605160315p:plain


こちらは予想通り、255件のみが取得されました。


ということで「実験④ ClearCollect 関数で委任できない式を利用して取得」は、255件の設定までしか取得できませんでした。


まとめ

これまでの結果をまとめると、Power Apps のキャンバスアプリで SharePoint リストから取得できるデータ件数は以下のようになりました。

  委任できる式 委任できない式
ギャラリー
コントロール
スクロールで全件取得
(ただし多分5000件まで)
設定値の255件のみ取得
(設定で最大2000件まで)
コレクション 設定値の255件のみ取得
(設定で最大2000件まで)
設定値の255件のみ取得
(設定で最大2000件まで)


「委任できる場合は制限なく取得できる」と思いきや、ClearCollect のように SharePoint リストから一括でデータを取得する場合は「委任がサポートされていないサーバー ベースの接続から取得する行数」の設定に従うことが分かりました。
ただ、ギャラリーコントロールでは少しずつではありますがこの設定値以上の件数を取得できますので、「委任できる場合は制限なく取得できる」は、正解とも不正解とも言えない、が正しい言い方でしょうか…。

これについては少なくとも私は明確な公式情報を見つけられていないのですが、以下の公式ブログを読む限りは主にモバイルデバイス利用時におけるパフォーマンスを考慮した仕様なのかなと考えられます。
powerapps.microsoft.com


いまいちスッと理解しづらい委任くんですが、ある程度理解できるとアーキテクチャを考える際にとても役に立ちますので、実際に手を動かして色々実験してみてください。



欲しいアプリは欲しい人が作る時代へ。
何かのご参考になれば幸いです。