
本記事では、Power Appsで入れ子のギャラリー(Nested Gallery)を実装する際のポイントについて解説します。
入れ子のギャラリーを実装する際の注意点
入れ子のギャラリーを実装する際の注意点としては、次の三点が挙げられます:
- パフォーマンス問題
- ForAll関数の制約
- 二階層までの制限
パフォーマンス問題
ギャラリーコントロール内に入れ子ギャラリーを配置すると、ギャラリー内部でさらに別のギャラリーをレンダリングするため、パフォーマンスに大きな影響を与える可能性があります。特にデータ量が増加すると、パフォーマンスが著しく低下しますので、特別な理由がない限り、入れ子ギャラリーの実装は避けることを推奨します。
ForAll関数の制約
Power Apps製品自体の不具合で、入れ子のギャラリーのデータをForAll関数で取得できない事象がありあす。
二階層までの制限
Power Appsにはギャラリー階層の制限があり、最大二階層までしか入れ子のギャラリーを実装できません。つまり、ギャラリー内に別のギャラリーを配置することは可能ですが、そのさらに内側に入れ子のギャラリーを配置することはできません。この制限は、階層が深くなりすぎることでパフォーマンスに悪影響を及ぼすのを防ぐためです。
Power Appsの入れ子のギャラリーでデータ登録できない問題の解決策
上記でPower Apps製品自体の不具合でForAll関数で入れ子のギャラリーのデータを取得できないことを紹介しましたが、実際にはこの問題を回避する方法があります。以下に、具体的な解決策を実例を交えながら解説します。
解決策を以下で実例を見せながら解説します。
まず、以下の親テーブルと子テーブルを用意します:
親テーブルにはID、Value1、Value2列があります
ID | Value1 | Value2 |
P1 | 100 | 200 |
P2 | 10 | 20 |
P3 | 5 | 6 |
P4 | 1 | 2 |
子テールにはID、Parent_ID、Value1、Value2列があります
Child_ID | Parent_ID | Value1 | Value2 |
C1 | P1 | null | null |
C2 | P1 | null | null |
C3 | P2 | null | null |
C4 | P2 | null | null |
C5 | P3 | null | null |
C6 | P3 | null | null |
C7 | P4 | null | null |
二つのテーブルを用いて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関数で入れ子のギャラリーをデータ取得できない不具合を回避する方法を紹介しました。