Power Appsのコレクション(Collection)活用入門。一時データ操作の基本

Power Appsのコレクションは、アプリの中だけで使える一時的なデータテーブルです。SharePointに都度アクセスしなくてもデータを操作できるので、使い方を知っておくとアプリ設計の幅が大きく広がります。

コレクションとは何か

アプリ内だけの一時テーブル

コレクションとは、Power Appsアプリのメモリ上に存在する一時的なデータテーブルです。SharePointリストやExcelとは異なり、アプリを閉じると消えます。永続的に保存したいデータはSharePointなどのデータソースに書き込む必要があります。

コレクションの使いどころは主に3つです。SharePointへのアクセス回数を減らしてパフォーマンスを上げる、入力途中のデータをアプリ内で一時的に保持する、委任できないFilterやSearchをかけるためのローカルデータを用意する、というものです。

変数との違い

Power Appsの変数(Set / UpdateContext)は単一の値を保存するものです。コレクションは複数の行と列を持つテーブルを保存します。ギャラリーのItemsにコレクションを設定して一覧表示できる点が、変数との最大の違いです。

コレクションの基本操作

ClearCollect:作成・全置き換え

ClearCollect はコレクションを初期化してデータを入れる関数です。既存のコレクションがあれば中身をすべて消してから新しいデータを入れます。

// SharePointリストの内容をコレクションに取り込む
ClearCollect(colShinsei, Filter(申請リスト, 担当者 = User().DisplayName))

画面が開いたタイミング(OnVisible)でこれを実行しておくと、以降は colShinsei というコレクションを使って表示や検索ができます。SharePointへのアクセスは最初の1回だけで済むため、その後の操作がスムーズになります。

Collect:追加

Collect は既存のコレクションに行を追加します。ClearCollect と違ってコレクションを消しません。入力フォームで1件ずつデータを追加していく場面で使います。

// フォームの入力内容をコレクションに追加する
Collect(
    colDraft,
    {
        商品名: テキスト入力_商品名.Text,
        数量: テキスト入力_数量.Text,
        単価: テキスト入力_単価.Text
    }
)

受発注アプリや日報アプリで、複数の明細行を入力してから一括保存するパターンでよく使います。コレクションに貯めてギャラリーで確認させ、最後に確認ボタンでSharePointに一括Patchするというフローです。

Remove・RemoveIf:行の削除

コレクションから特定の行を削除したいときは Remove または RemoveIf を使います。

// ThisItemで指している行を削除(ギャラリー内のボタンから)
Remove(colDraft, ThisItem)

// 条件に一致する行をすべて削除
RemoveIf(colDraft, 数量 = 0)

入力途中の明細リストから1行削除したいとき、ギャラリー内の削除ボタンに Remove(colDraft, ThisItem) を書きます。これだけで該当行がコレクションから消え、ギャラリーの表示もリアルタイムに更新されます。

Patchでコレクションの特定行を更新する

コレクションに対して Patch を使うと、特定の行の値を更新できます。Patch関数はSharePointだけでなく、コレクションにも使えます。

// コレクションの特定行を更新する
Patch(colDraft, ThisItem, {数量: テキスト入力_数量.Text})

ギャラリーで選択した行の数量だけを書き換えるといった使い方ができます。コレクション上で編集してから、最後にまとめてSharePointに保存するというパターンの骨格がこれです。

コレクションの実用パターン

OnVisibleで取り込んでパフォーマンスを上げる

SharePointリストを直接ギャラリーの Items に設定すると、画面を操作するたびにSharePointへの通信が発生します。アイテム数が増えてくると表示が遅くなりがちです。

OnVisibleで一度ClearCollectしてコレクションに落とし、ギャラリーのItemsをコレクションにする設計にすると、初回読み込み以降はSharePointへの通信なしで動作します。検索や絞り込みもコレクション上で行えるので、委任の制約も受けません。

ただし画面を開いたときの初回読み込みに時間がかかるというトレードオフがあります。データ件数が少ない(数百件以内)なら有効な手法ですが、数千件になるとむしろ遅くなるので注意しましょう。

入力データを一時保存してから一括登録する

複数の明細行を入力してから一括で登録したい場合、コレクションを使うと自然な設計ができます。

  1. 入力フォームで1行分のデータを入力
  2. 追加ボタンでCollectしてコレクションに追加
  3. ギャラリーでコレクションの中身を表示・確認
  4. 登録ボタンでForAll + Patchを実行してSharePointに一括保存
  5. ClearCollect(またはClear)でコレクションを空にする

このパターンは受発注の明細入力、日報の複数行入力、棚卸しのスキャン登録など、一度に複数件を登録する業務アプリで繰り返し使っています。

コレクションの中身をデバッグで確認する

コレクションの中身は、Power Appsスタジオの左側メニューにある変数パネルから確認できます。テスト実行中にコレクションに何が入っているかをリアルタイムで見られるので、デバッグに役立ちます。

また、一時的にギャラリーをコレクションにつないで中身を表示させるのもよい方法です。思ったデータが入っているかを視覚的に確認できます。

コレクションを使うときの注意点

アプリを閉じると消える

コレクションはアプリのメモリ上にしか存在しないため、アプリを閉じた瞬間に中身が消えます。入力途中のデータをコレクションに溜めていて、うっかりアプリを閉じるとそのデータは失われます。重要なデータは随時SharePointに保存する設計にするか、ユーザーにこのままアプリを閉じると入力中のデータが消えますと警告を出す設計を入れましょう。

件数の上限を意識する

ClearCollectでSharePointリストから取り込めるデータ件数は、データ行の制限の設定値まで(デフォルト500件、最大2000件)です。委任の警告の記事でも触れましたが、2000件を超えるデータをすべてコレクションに入れることはできません。コレクションに取り込む前にFilter(委任可能な条件)でデータを絞り込んでおくことが重要です。

Filter・Search・LookUpとコレクションの使い分けについてはFilter・Search・LookUp関数の記事も参考にしてみてください。

まとめ

コレクションはPower Appsの中でも特に実務でよく使う機能です。ClearCollectで取り込み・Collectで追加・RemoveIfで削除・Patchで更新という4パターンを押さえておけば、たいていのユースケースはカバーできます。

まずはOnVisibleでSharePointリストをコレクションに取り込んで、ギャラリーにつなぐところから始めてみてください。アプリの操作感が変わるのを実感できると思います。市民開発の積み重ねがここでも活きてきます。

Xでフォローしよう