プログラマーになるのは諦めた

ノーコード・ローコード勉強するおじさんのブログ

Power Apps - リストのリレーションとSelectedとThisItem

こんにちはkickyです。

Power Appsにちょっとずつ慣れてきて、1つのフォームから1つずつリストを操作するのは分かりました、でももう少し複雑なデータ構造を作りたい場合はどうすれば良い?という疑問が当初ありました。データベースのリレーションってやつです。(一般的な用語なので知らない方はググってください)

2つの単純なリストを考えます。

f:id:kicky60136227:20210615223605p:plain

部署リストと氏名リストを作りました。一番左の「ID」は上から順に自動で振られたものです。氏名リストの「部署ID」が2つのリストのアイテムを紐づけて、データは1対多の関係になっています。

要は

営業部に佐藤さん、田中さん、伊藤さん

総務部に高橋さん、渡辺さん

経理部に鈴木さん

がそれぞれ所属している、ということを表します。

これをPower Appsで表示したい場合はどうなるでしょうか。色々な表示方法が考えられますが、代表的な2つのパターンを試してみます。

 

1つ目はクリックして選んだIDに対応するデータを表示する場合です。

これには「Selected」を使用します。

f:id:kicky60136227:20210615232131g:plain

左の緑エリアをGallery1、右のオレンジエリアをGallery2とします。

f:id:kicky60136227:20210616222954p:plain

Gallery1とGallery2は同じ階層にあります。

 

 Gallery1.Items

f:id:kicky60136227:20210616221529p:plain

 Gallery2.Items

f:id:kicky60136227:20210616221554p:plain

氏名リストのうち、Gallery1で選択(Selected)したIDと、部署IDが一致するもののみ表示するようにFilter関数でフィルタリングをしています。マウスでクリックするアイテム(=ID)を変えると、Gallery2のアイテムも変わっていく仕組みです。Selectedは最後に選んだものを保持するので、Navigate関数と組み合わせて新しいスクリーン上のギャラリーでデータを表示することもできます。

 

2つ目はギャラリーの中に小さなギャラリーを入れ子にする場合です。

これには「ThisItem」を使用します。

f:id:kicky60136227:20210616222132g:plain

親の緑エリアをGallery3、子のオレンジエリアをGallery4とします。

親ギャラリーのなかに子ギャラリーを入れています。親ギャラリー(緑エリア)を選んだ状態からギャラリー追加アイコンを押すことで、入れ子にできます。

f:id:kicky60136227:20210616223811p:plain

Gallery3の1つ下の階層にGallery4があります。

 

Gallery3.Items

f:id:kicky60136227:20210616223939p:plain

Gallery4.Items

f:id:kicky60136227:20210616224040p:plain

ギャラリーは複数のアイテムを表示することができますが、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については私よりも説明がお上手な

zezeze.hateblo.jp

Makoto Maedaさんのブログをご参照ください。