【Power Apps × SharePointリスト】ギャラリー活用術!「ネスト(入れ子)」で関連データを1画面にまとめて表示

はじめに:そのデータ、「画面遷移」が必要ですか?

Power Appsで業務アプリを開発していると、必ずと言っていいほど「一対多」のデータ関係を扱う場面に直面します。

「一社の顧客に、複数の注文履歴がある」「一つのプロジェクトに、複数のタスクがある」といったケースです。

これらを表現する際、多くの方が採用するのは「顧客を選んでから、別画面で履歴を見る」という遷移型のUIです。しかし、ユーザーからはこんな要望が来ないでしょうか?

「いちいち画面を行き来するのが面倒だ」

「紙の帳票のように、全体像をパッと見たい」

本記事では、この課題を解決する「ネスト(入れ子)ギャラリー」というテクニックを紹介します。

ギャラリーの中にギャラリーを入れることで、「あえて分離させず、1画面に集約する」プロの表現力をマスターしましょう。

※本記事では、データソースとして「SharePointリスト」を使用する場合の実装手順を解説します。

こう選ぶ!「ネスト型」を使うべきシーン

構築に入る前に、重要な設計思想の話をします。

「ギャラリーを入れ子にする」という処理は、アプリに一定の負荷をかけます。そのため、何でもかんでもネストすれば良いわけではありません。

形式構成イメージ向いているシーン
分離型 (マスタ・詳細)左で親を選択 → 右に子を表示データ入力・編集がメインのアプリ
動作が軽く、大量データの管理に最適。
ネスト型 (入れ子)親の中に子を表示 (今回のテーマ)閲覧・報告・カタログ用のアプリ
「請求書」のような帳票ビュー、FAQ、製品カタログなど、一覧性が最優先される場合。

今回の記事は、後者の「一覧性・閲覧性」を担保するためのテクニックです。

完成イメージ:請求書のような画面を実現

目指すのは、以下のような画面です。

親(顧客)ごとに枠があり、その中に子(注文履歴)が明細として展開されています。

この構造を作るには、ギャラリーのテンプレート(1行)の中に、さらにもう一つのギャラリーを配置します。

【ハンズオン】実装手順

ポイントは、Power Appsの操作以前に「SharePoint側の列設定」にあります。

Step 0: データソース(SharePointリスト)の準備

以下の2つのリストを作成します。特に「子リスト」の参照列の設定が重要となります。

親リスト:顧客マスター

列の表示名データ型備考
Title (顧客名)1行テキストTitle列の名前を変更して使用
担当者1行テキスト

リスト2:受注製品リスト(子リスト)

列の表示名データ型備考
Title (受注製品名)1行テキストTitle列の名前を変更して使用
受注日日付
金額数値
顧客ID参照重要

【重要】参照列の設定手順

受注製品リストを作成する際、顧客ID列は以下の手順で作成します。

  1. SharePointリストの設定で [列の追加] > [参照] を選択。
  2. 情報の取得先として 顧客マスター を選択。
  3. 表示する列として Title (顧客名) を選択。

これにより、見た目は「会社名」ですが、内部的には「ID」で紐づくリレーションシップが完成します。

Step 1: 親ギャラリーの配置

  1. Power Apps Studioで、[挿入] > [レイアウト] > [高さが伸縮可能な空のギャラリー] を選択し、配置します。
    • ※ネストする場合は、子データの数に応じて高さが自動調整されるこのギャラリータイプを選ぶのが鉄則です。
  2. データソースに '顧客マスター' を設定します。
  3. 配置した親ギャラリーの一番上の行(テンプレート)を選択して、編集状態にします(左上の鉛筆アイコンをクリック)。
  4. 親ギャラリーの中にテキストラベルを追加し、「顧客名」や「担当者」を配置します。

Step 2: 子ギャラリーの挿入(ネスト)

ここが操作のポイントです。

  1. 親ギャラリーの編集状態で、[挿入] > [レイアウト] > [空の垂直ギャラリー] をクリックします。
  2. 親ギャラリーの中に、子ギャラリーが挿入されます。これが「ネスト」です。

Step 3: 子ギャラリーのフィルタリング設定

子ギャラリーを選択し、Items プロパティに以下の数式を設定します。

Filter(
    '受注リスト',
    顧客ID.Id = ThisItem.ID
)
  • 顧客ID.Id:子リストの参照列が裏で持っている内部ID
  • ThisItem.ID:親ギャラリーの現在の行のID
  • これらを比較することで、会社名が変わっても紐付けが切れないフィルタリングになります。

【注意:委任の警告について】

この数式を入力すると、波線(委任の警告)が出ることがあります。

これはSharePointリストの仕様上、参照列のID検索がサーバー側での処理に対応していないためです。

  • データが2000件以内なら: このままで問題なく動作します。Power Appsが自動的に処理してくれます。
  • データが大量にあるなら: 後述の「上級者向けコラム」の方法を使うか、Dataverseへの移行を検討する必要があります。

Step 4: レイアウトの調整

  1. 子ギャラリーの中にテキストラベルを追加し、「受注製品名」や「受注日」「金額」 を表示させます。
  2. 子ギャラリーのレコード数に応じて算出したギャラリーの高さをHightプロパティに設定します。
CountRows(Self.AllItems) * (Self.TemplateHeight+10)

これで、注文が4件ある顧客の枠は広く、2件しかない顧客の枠は狭く、自動で調整されるスマートな画面が完成します。

【コラム】2000件の壁を突破する「連携用ID列」

実務で数万件のデータを扱う場合、前述の「委任の警告」は無視できない問題になります。

SharePointのまま大量データを正しく扱いたい場合は、少し手間ですが以下の方法で回避可能です。

  1. 連携用フィールドの作成:子リスト(受注リスト)に、参照列とは別に「数値」型の列(例:ParentID_Num)を作成します。
  2. データの保存:データ登録時(Patch関数など)に、参照列だけでなく、この数値列にも親のID(1や2)を二重に保存するようにします。
  3. フィルタリング:Power Apps側の数式を以下のように変更します。
Filter('受注リスト', ParentID_Num = ThisItem.ID)

SharePointでは、数値列の比較であれば委任が可能です。この一手間を加えることで、SharePointリストでも大規模なデータを扱う「ネストギャラリー」を構築できます。

【参考】Dataverseなら「設定なし」で検索できる!

今回、SharePointリストで実装しましたが、もしあなたが「数万件のデータを扱いたい」「部分一致で検索したい」と考えているなら、以下の違いを知っておく必要があります。

SharePointリストでは「部分一致検索(〜を含む)」を行おうとすると委任警告が出てしまいますが、Dataverseなら標準機能で委任可能です。

特に、Filter 関数と in 演算子の組み合わせが最強です。

// Dataverseなら、この書き方で委任警告なし!
// 設定も不要で、大量データから部分一致検索ができます
Filter('学生情報', TextInput_検索.Text in 学生姓)

SharePointでは不可能なこの「検索の手軽さ」と「パフォーマンス」こそが、データソースにDataverseを選ぶ大きな理由の一つです。

アプリの規模が大きくなり、SharePointの制限(委任問題)に悩まされるようになったら、Dataverseへの移行を検討してみてください。

まとめ:まずは「一覧性」を手に入れよう

本記事では、SharePointリストとギャラリーのネストを使い、関連データを1画面に集約する方法を紹介しました。

この方法を使えば、「請求書ビューを作ってほしい」「印刷用に1画面にまとめてほしい」といった要望に応えることができます。

「でも、データ量が多いときはどうすればいいの?」

そんな方のために、次回は動作の軽さと管理のしやすさを重視した王道の設計パターン、「マスタ・詳細(分離型)」の構築手法を紹介する予定です。

ちょっと一息、いかがですか?

良いアイデアは、良い休憩から生まれます。
香り立つ一杯で、次のひらめきを。

お気に入りの一杯を、ぜひこちらから。▶