複数選択可能なコンボボックスでギャラリーをフィルターする方法を聞かれたので、メモ。
事前準備
以下のSharePointリストと、


以下のDataverseテーブルで、


複数選択可能なコンボボックスで上記2つをフィルターするときの式を考える。
※未選択時は全アイテム表示

※未選択時は全アイテム表示

このとき委任がきいているかを確認するため、データ行の制限を3にしておく。
委任がきいている場合→「ddd」「eee」のアイテムがフィルター後も表示される

委任がきいている場合→「ddd」「eee」のアイテムがフィルター後も表示される

SharePointリストの場合
最もシンプルな式は下図のようになると思うけど、残念ながらSharePointリストがデータソースだと委任の制限に引っかかってしまう。


委任を守りつつ複数の値でフィルターをかけたい場合、どうしても以下の図のような式になってしまうため、注意書きとして「先頭N個の選択までフィルタ可能」と書いておくしかないかなと。
※下図の例だと先頭3個まではフィルタ可能

※下図の例だと先頭3個まではフィルタ可能

Filter(SampleList As item, IsBlank(ComboBox1.SelectedItems) || IsEmpty(ComboBox1.SelectedItems) || (CountRows(ComboBox1.SelectedItems) > 0 && item.Title = Index(ComboBox1.SelectedItems,1).Value) || (CountRows(ComboBox1.SelectedItems) > 1 && item.Title = Index(ComboBox1.SelectedItems,2).Value) || (CountRows(ComboBox1.SelectedItems) > 2 && item.Title = Index(ComboBox1.SelectedItems,3).Value) )
※ちなみに以下の式だとギャラリー自体が動作しない。
これは、SelectedItemsが0個とかのときにIndex関数でアイテムにアクセスして内部でエラーが発生しているため(だと思われる)。

これは、SelectedItemsが0個とかのときにIndex関数でアイテムにアクセスして内部でエラーが発生しているため(だと思われる)。

Dataverseの場合
Dataverseの場合は以下の図のシンプルな式で委任機能も問題なく動作する。


Filter(SampleTable, IsBlank(ComboBox1_1.SelectedItems) || IsEmpty(ComboBox1_1.SelectedItems) || Name in ComboBox1_1.SelectedItems.タイトル )
やっぱりDataverseはとても楽。
おまけ:コンボボックスの選択肢がマスタテーブルを参照する場合
以下のように選択肢をマスタとして定義する場合は、


SharePointリストのギャラリーはこんな式になって、


Dataverseの式はこんな感じになる。


コメント