複数選択可能なコンボボックスでギャラリーをフィルターする方法を聞かれたので、メモ。
事前準備
以下の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の式はこんな感じになる。







コメント