Power Apps - リストのリレーションとSelectedとThisItem
こんにちはkickyです。
Power Appsにちょっとずつ慣れてきて、1つのフォームから1つずつリストを操作するのは分かりました、でももう少し複雑なデータ構造を作りたい場合はどうすれば良い?という疑問が当初ありました。データベースのリレーションってやつです。(一般的な用語なので知らない方はググってください)
2つの単純なリストを考えます。
部署リストと氏名リストを作りました。一番左の「ID」は上から順に自動で振られたものです。氏名リストの「部署ID」が2つのリストのアイテムを紐づけて、データは1対多の関係になっています。
要は
営業部に佐藤さん、田中さん、伊藤さん
総務部に高橋さん、渡辺さん
経理部に鈴木さん
がそれぞれ所属している、ということを表します。
これをPower Appsで表示したい場合はどうなるでしょうか。色々な表示方法が考えられますが、代表的な2つのパターンを試してみます。
1つ目はクリックして選んだIDに対応するデータを表示する場合です。
これには「Selected」を使用します。
左の緑エリアをGallery1、右のオレンジエリアをGallery2とします。
Gallery1とGallery2は同じ階層にあります。
Gallery1.Items
Gallery2.Items
氏名リストのうち、Gallery1で選択(Selected)したIDと、部署IDが一致するもののみ表示するようにFilter関数でフィルタリングをしています。マウスでクリックするアイテム(=ID)を変えると、Gallery2のアイテムも変わっていく仕組みです。Selectedは最後に選んだものを保持するので、Navigate関数と組み合わせて新しいスクリーン上のギャラリーでデータを表示することもできます。
2つ目はギャラリーの中に小さなギャラリーを入れ子にする場合です。
これには「ThisItem」を使用します。
親の緑エリアをGallery3、子のオレンジエリアをGallery4とします。
親ギャラリーのなかに子ギャラリーを入れています。親ギャラリー(緑エリア)を選んだ状態からギャラリー追加アイコンを押すことで、入れ子にできます。
Gallery3の1つ下の階層にGallery4があります。
Gallery3.Items
Gallery4.Items
ギャラリーは複数のアイテムを表示することができますが、ThisItemでそのアイテムを指定できます。つまりGallery3のThisItemは
1行目 ThisItem.部署 : "営業部" , ThisItem.ID : 1
2行名 ThisItem.部署 : "総務部" , ThisItem.ID : 2
3行目 ThisItem.部署 : "経理部" , ThisItem.ID : 3
といった具合です。子ギャラリーのGallery4では、親ギャラリーGallery3のThisItem.IDと、氏名リストの部署IDが一致するもののみ表示するようにFilter関数でフィルタリングをしています。
以上、リレーションのリストを2通りの方法で試してみました。キャンバスアプリはあまり複雑なデータベースには向かないので素直にモデル駆動型(Dataverse)を使いましょう、というのがセオリーのようですが、ライセンスの関係で使えなかったりするので(弊社もそう)これくらいのリレーションであれば表示できますよ、というご紹介でした。
ThisItemとSelectedについては私よりも説明がお上手な
Makoto Maedaさんのブログをご参照ください。