※内容を一部修正しております。(2023年12月)
Power Appsでアプリを作成する際、気をつけなければならない1つの事項としてデータソースから取得できるレコード数の上限があります。
Power AppsはDataverseやSharePointなどから一度に最大2,000件(デフォルトでは500件)のレコードしか取得する事ができません。
よって、委任できない検索条件を用いた場合や、検索後も2,000件を超過するような場合は、全てのレコードを取得する事ができないということになります。
※委任に関する詳細については、過去にブログを作成したことがあるので、以下URLを参照してください。
よって、今回は500/2,000件以上のレコードを扱いたい場合の方法について紹介します。
内容としては、Power Appsの中級者の方に向けた記事となっております。
今回紹介する方法は大量データを扱うため、パフォーマンスが大きく低下する可能性があります。
よって、全面的におすすめしている訳ではありません。
(そもそも「データ件数が2,000件を超過しないようにする」という解決策もあると思います。)
あくまでも解決策の1つとして参考にしてください。
やりたいこと
今回は、以下構成となっております。
データソースはSharePointリストです。
今回は、「大量にデータが保存されているSharePointリストから、Power Appsを用いてその内容を検索する」ということを行います。
SharePointリストの詳細は以下です。
リスト名:LargeList
列名(外部名) |
列名(内部名) |
データ型 |
---|---|---|
タイトル |
Title |
1行テキスト |
詳細 |
Description |
複数行テキスト |
また、SharePointリストには10,001件のレコードを保存しております。
Power Appsの取得できるデータ行の設定も以下のように変更しております。
上記の設定値は、Power Appsのファイル→設定→全般→データ行の制限から確認することが出来ます。
※デフォルト値は500であり、最大値は2,000です。(2023年2月時点)
Before
Power Appsの構成
まずは、Power Appsの構成について説明しておきます。
Power AppsはReloadボタンsearchTextBoxギャラリーの3つのコントロールから構成されています。 それぞれの役割は以下のとおりです。
Reloadボタン:データソースを更新する際に押下します。
searchTextBox:データソースから検索したい語句を入力します。
ギャラリー:データソースからsearchTextBoxの内容に応じて、レコードを表示します。
実装(素直な実装)
まずは、何も考えず素直に実装してみます。
Reloadボタン・ギャラリーにそれぞれ以下を設定します。
ReloadボタンのOnSelectプロパティ
Refresh(LargeList);
ギャラリーのItemsプロパティ
SortByColumns(
Search(LargeList,
searchTextBox.Text,
"Title",
"Description"
),
"ID", Ascending
);
上記では「LargeList」というデータソース(=SharePointリスト)を、Search()関数の中で直接指定しています。
すると、下記のように委任に関する警告が表示されました。
検索の結果、SharePointリストの上位2,000件までのレコードは検索されましたが、2,001件目以降のレコードは検索されませんでした。
委任ができない検索条件である、かつデータ行の制限が2,000と設定されているため、当然の結果ですよね。
※取得データ件数も2,000となっていることが確認できると思います。
以下では、2,000件以上のレコードが存在する場合でも、データソースから検索結果を得る方法について紹介します。
After
まずは、実装のイメージについて説明します。
前提として、SharePointリストからレコードを取得する際に、データ行の制限(=最大2,000件)を超えることはできません。
よって、データソースから対象範囲のレコードを複数回取得し、取得結果をコレクションに追加するという方法を用います。
(1回目は1~2,000行目を取得、2回目は2,001~4,000行目を取得…というイメージでループを回していきます。)
それでは、実装してみましょう。
(今回色々と試行錯誤しながら作成しましたので、その流れも一緒にお伝えします。)
Step1:最初の状態
今回はReloadボタン押下時に、データソースから全レコードを取得するようにしております。
まずは、以下のように記載してみました。
ReloadボタンのOnSelectプロパティ(最初の状態)
UpdateContext({threshold: 2000 });
UpdateContext({lastRecord: First(Sort(LargeList,ID,SortOrder.Descending))});
UpdateContext({maxIteration: RoundUp(lastRecord.ID/threshold,0)});
Clear(colLargeList);
ForAll(
Sequence(maxIteration, 0),
Collect(colLargeList, Filter(LargeList, Value(Value) * threshold < ID && ID <= (Value(Value) + 1) * threshold))
);
ギャラリーのItemsプロパティ
SortByColumns(
Search(colLargeList,
searchTextBox.Text,
"Title",
"Description"
),
"ID", Ascending
);
Beforeでは、Search()関数の中に、データソースを直越指定していましたが、 今回はコレクション(=colLargeList)を指定しています。
Itemsプロパティでは、委任に関する警告とMul演算子に関するエラーが発生しました。
(Mul演算子は掛け算のことです。)
Step2:Mul演算子に関するエラーをWith()関数で解消
Mul演算子に関するエラーを解消するため、With()関数を用いました。
With()関数については、以下を参照ください。
Power Apps での With 関数
ReloadボタンのOnSelectプロパティ(With()関数を用いて修正)
UpdateContext({threshold: 2000 });
UpdateContext({lastRecord: First(Sort(LargeList,ID,SortOrder.Descending))});
UpdateContext({maxIteration: RoundUp(lastRecord.ID/threshold,0)});
Clear(colLargeList);
ForAll(
Sequence(maxIteration, 0),
With(
{
prev: Value(Value) * threshold,
next: (Value(Value) + 1) * threshold
},
Collect(colLargeList, Filter(LargeList, prev < ID && ID <= next))
)
);
上記修正により、Mul演算子に関するエラーは解消されました。
しかし、委任に関する警告はまだ消えておりません。
Step3:subID列を追加し、委任に関する警告を解消
調査したところ、SharePointリストのID列は、イコール(=)以外の比較演算子はサポートしておらず、委任できないようでした。(2023年2月時点)
詳細は以下URLをご参照ください。
委任メモ
上記の対応策として、SharePointリストに新しく「subID」列を追加し、ID値をコピーしました。
※データ型は数値として設定しています。
ちなみに、subID列を追加するのは、データソースがSharePointリストだからです。
データソースがDataverseの場合は、ID列でも比較演算子が委任できます。
次に、IDの代わりにsubIDを用いて、OnSelectプロパティを修正しました。
ReloadボタンのOnSelectプロパティ(subIDを用いて更に修正)
UpdateContext({threshold: 2000 });
UpdateContext({lastRecord: First(Sort(LargeList,ID,SortOrder.Descending))});
UpdateContext({maxIteration: RoundUp(lastRecord.ID/threshold,0)});
Clear(colLargeList);
ForAll(
Sequence(maxIteration, 0),
With(
{
prev: Value(Value) * threshold,
next: (Value(Value) + 1) * threshold
},
Collect(colLargeList, Filter(LargeList, prev < subID && subID <= next))
)
);
こちらで警告やエラーが発生しない状態となりました。
また検索の結果、全てのSharePointリストのレコードから検索されるようになりました。
※取得データ件数も10,001となっていることが確認できると思います。
おわりに
少し長くなりましたので、本日はここまで!
今回は、Power Appsで500/2,000件以上のレコードを扱いたい場合の方法について、実装までの流れを紹介しました。
次回はReloadボタンのOnSelectプロパティの内容について、詳細について深掘りしていきます。
【このシリーズの過去回一覧】
【こちらも合わせて読みたい】
地方自治体ローコード導入・運用支援サービス(Power Apps・Power Automate)
Microsoft社が提供するローコード技術であるPower Platformを用いて、自治体様のDX化を支援します。
X-SP | SharePoint デザイン・機能拡張サービス
デザイン×機能を兼ね備えたSharePointを提供いたします。
SharePointの利便性を向上し、操作性と視認性を兼ね備えたデザインでユーザーの業務効率化・ストレス低減を提供します。
内製化支援サービス | Power Platform(Power Apps・Power Automate)
Power Platform(Power Apps・Power Automate)開発や運用をスムーズに内製できるよう支援いたします。
DX人材育成プログラム | Power Apps・Power Automte 教育
Microsoft社が提供するローコード技術であるPower Platformを用いて、社内のDX化を推進するための人材を育成いたします。
Power Apps/Power Automateアプリ開発・導入支援サービス
Microsoft社が提供するPower Apps / Power Automateの導入支援として、高度なアプリも最速で作れる業務アプリ作成支援サービスを提供いたします。
SharePointモダン化コンサルティングサービス
従来のSharePoint から移行・モダン化したい方に向けて、事前調査からサイト作成・活用支援までトータルなコンサルティング・技術支援を提供いたします。
小刀稱知哉
大分県出身(温泉大好き)、現在は東京都在住
1990年生まれ
30才でメーカーの技術営業からIT業界にジョブチェンジ!!!
趣味は読書
Power Platform(SharePoint・Power Apps・Power Automate)に関する営業活動や設計、開発などを担当しております!
持ってる資格はPL-200/PL-300/PL-400/PL-600/MS-700/AZ-104/AZ-305/SC-200
こんにちは。アーティサン株式会社の小刀稱(ことね)です。