はじめに
こんにちは、reireです。
Power Appsではよく物品管理系のアプリなどが開発事例として取り上げらあれるかつ、
実際の需要も多いと思います。
そういったシステムを開発していると要件として上がりやすいのが、
「物品ごとに閲覧、操作できるユーザーをグループ分けしたい」というもの。
このグループ分けがユーザープロファイルの「department」や「jobTitle」準拠なら簡単なのですが、
現実はさらに細分化された、独自のグループかつ、複数選択可能な選択肢列だったりします…
要するに、以下のようなテーブル2つの紐づけが必要な場面
この場合、
れいれ
→物品Aと物品Bが閲覧できる
テスト太郎
→物品B、物品C、物品Dが閲覧できる
課長
→物品A、物品B、物品C、物品Eが閲覧できる
といった具合です。
今回は、このような2つの複数選択できる選択肢列のANDを取る処理について記載していきます。
実装
といってもそんな難しいことはしません。
まずコントロールとデータソースはこんな感じ
(寝起きなのでデザインがデフォルトなのは許してください…)
今回は検証をしやすくするために、ユーザーをドロップダウンで選択できるようにしています。
今のところ、所属グループがG1しかないユーザーでも、G2、G3の物品が閲覧できてしまっています。
ここで画像右のGallery1のItemsに工夫をします。
Filter(
ItemTable,
IsBlank(
LookUp(
Dropdown1.Selected.UserGroup As group,
group.Value in ShowColumns(ThisRecord.EditGroup,Value)
)
) = false
)
すると…
この通り、所属するグループ列でItemTableをフィルターできています!
ただ実際に試していただくとお分かりになると思いますが、
今回の関数式かつ、データソースにSharePoint Listsを使用していると、
いつもの「委任の警告」が出てきます。
各Listsで想定されるレコード数が2000件以下であれば無視しても構わないのですが、
警告が出続けるのも気分が悪いです。
対処として、以下のようにすると警告を回避できます。
ClearCollect(colUserGroup,Self.Selected.UserGroup);
ClearCollect(colItemTable,ItemTable);
Filter(
colItemTable,
IsBlank(
LookUp(
colUserGroup As group,
group.Value in ShowColumns(ThisRecord.EditGroup,Value)
)
) = false
)
要は、Listsのデータを一度コレクションに格納しちゃいましょうよって話ですね。
今回は記事上での記述を楽にするためにItemTableのデータもDropdown1のOnChange内で取得していますが、
例えばApp.OnStartやScreen1.OnVisibleなど、もしくは更新ボタンを作成するなどでもいいと思います。
おわり
今回は2つの選択肢列のANDを取る方法について書いてみました。
依頼のあったアプリの開発中このような要件に突き当たり、
実装に地味に苦戦したりしたので備忘録も兼ねて記事にしてみました。
Power AppsにしろPower Automateにしろ、
独自の関数でデータを扱わなければいけないのでこの辺は苦労しますね…
あ~…、
SQLで操作できたら一瞬なんだけどな~~~~~!
それでは