【Power Apps】Power Appsで入れ子のギャラリーを実装する際のポイント

本記事では、Power Appsで入れ子ギャラリー(Nested Gallery)を実装する際のポイントについて解説します。

入れ子のギャラリーを実装する際の注意点

入れ子のギャラリーを実装する際の注意点としては、次の三点が挙げられます:

  1. パフォーマンス問題
  2. ForAll関数の制約
  3. 二階層までの制限

パフォーマンス問題

ギャラリーコントロール内に入れ子ギャラリーを配置すると、ギャラリー内部でさらに別のギャラリーをレンダリングするため、パフォーマンスに大きな影響を与える可能性があります。特にデータ量が増加すると、パフォーマンスが著しく低下しますので、特別な理由がない限り、入れ子ギャラリーの実装は避けることを推奨します

ForAll関数の制約

Power Apps製品自体の不具合で、入れ子のギャラリーのデータをForAll関数で取得できない事象がありあす。

二階層までの制限

Power Appsにはギャラリー階層の制限があり、最大二階層までしか入れ子のギャラリーを実装できません。つまり、ギャラリー内に別のギャラリーを配置することは可能ですが、そのさらに内側に入れ子のギャラリーを配置することはできません。この制限は、階層が深くなりすぎることでパフォーマンスに悪影響を及ぼすのを防ぐためです。

Power Appsの入れ子のギャラリーでデータ登録できない問題の解決策

上記でPower Apps製品自体の不具合でForAll関数で入れ子のギャラリーのデータを取得できないことを紹介しましたが、実際にはこの問題を回避する方法があります。以下に、具体的な解決策を実例を交えながら解説します。

解決策を以下で実例を見せながら解説します。

まず、以下の親テーブルと子テーブルを用意します:

親テーブルにはID、Value1、Value2列があります

IDValue1Value2
P1100200
P21020
P356
P412

子テールにはID、Parent_ID、Value1、Value2列があります

Child_IDParent_IDValue1Value2
C1P1nullnull
C2P1nullnull
C3P2nullnull
C4P2nullnull
C5P3nullnull
C6P3nullnull
C7P4nullnull

二つのテーブルを用いてPower Appsで以下の画面を実装します:

「データ登録」ボタンのOnSelectプロパティに以下のコードを記述します:

ForAll(
Gallery4.AllItems As _rec, //ForAll関数で親のギャラリーのデータを一行ずつ取得
Patch(
ParentTable,//親テーブルにPatchする
LookUp(
ParentTable,
_rec.crcad_id = ID
),
{
value1: _rec.TextInput1_1.Text,
value2: _rec.TextInput1_2.Text
}
)
);
ForAll(
Gallery6.AllItems As _rec,//ForAll関数で子供のギャラリーのデータを一行ずつ取得
Patch(
ChildTable,//子テーブルにPatchする
LookUp(
ChildTable,
_rec.crcad_childid = childID
),
{
vallue1: _rec.TextInput5.Text,
value2: _rec.TextInput5_1.Text
}
)
);
Navigate(Screen1)//上記の処理が完了したらもう一度現在の画面に遷移する

動作確認をしてみると

親テーブルのデータが正常に登録されますが、子テーブルのデータが登録されない問題が発生します。

この原因は、Power Appsの不具合で、ForAll関数が入れ子のギャラリーのデータを取得できないからです。

解決策としては、親のギャラリーにテキストコントロールを追加し、そのテキストコントロールのTextプロパティに下記のコードを記述すれば:

CountRows(Gallery6.AllItems)

ForAll関数で子ギャラリーのデータを取得することができ、データを登録できるようになりました。

新しく追加されたテキストコントロールのVisibleプロパティにfalseを記述すれば、非表示にできます。

まとめ

今回の記事では、Power Appsで入れ子のギャラリーを実装する際の注意点を紹介しました。

特にForAll関数で入れ子のギャラリーをデータ取得できない不具合を回避する方法を紹介しました。

タイトルとURLをコピーしました