Power Apps キャンバスアプリで Dataverse 選択肢フィールドでソートするには
キャンバスアプリで Dataverse を使用しているときに、選択肢フィールドでソートしたい場合について。
普通に試すと、ソートができない
キャンバスアプリで選択肢フィールドを対象にSort()関数などでソートしようとすると、どうにもうまくいきません。通常のフィールドのように指定しても、エラーが出てしまいます。
現状私が確認した限りでは、Sort()やSortByColumns()でソートをする方法はなさそうです。
ビューでソートする
では詰みかと思いきや、そうでもありません。
Dataverseの ビュー の機能を使用すると、ビューで設定したフィルタ条件とソート順でキャンバスアプリにデータをもってくることができます。これを利用することで実現可能です。
手順
細かい手順は省きますが、ざっくり2ステップでソート済みデータをキャンバスアプリに持ってくることができます。
・ソート順を指定したビューを作成
・作成したビューをキャンバスアプリから参照
上記の手順で選択肢によるソートが実装できます。
動的にフィルタもしたいんだけど・・・
ユーザーからの入力値によって動的にしたい場合、ビューでは少し弱いです。できないわけではないんですが・・・。
全てのパターンをビューで網羅するのは厳しいので、その中から実際にユーザーが利用するパターンを洗い出して限定的にビューで実装する方向で一度検討してみてはいかがでしょうか。
蛇足:ソート用フィールドを追加するのは?
ソート用にフィールドを用意して保持しておく方法もあると言えばありますが、あまりおすすめできません。選択肢の中身を変えたときに対応させるのが面倒になりますし、メンテを忘れそうです。
蛇足:委任非対応でよければなんでもあり
コレクション化しているものを対象にする場合など、委任に対応できないことが問題でない場合は以下のようにするとソートができます。
Sort( colItems, Text( OptionSetField ), Ascending ) |
ただ、上記の例だとテキストに変換してソートしてしまうため、本来の並びと異なる可能性があります。
ソート順を変えたくない場合は、ソート順参照用のコレクションを作成しておき、
ForAll( Sequence(CountRows(Choices( ABC_Set)),1,1) As Index, Collect( colOptionSets, { Value:Last(FirstN(Choices( ABC_Set),Index.Value)).Value, Text:Text(Last(FirstN(Choices( ABC_Set),Index.Value)).Value), Index:Index.Value } ) ) |
ItemsではAddColumns()を使用してソート用インデックスフィールドを追加したテーブルを用いてソートすることで、ソートが可能です。が、ちょっと面倒。
SortByColumns( AddColumns( Test_Temp As Source, "OptionsetIndex", LookUp(colOptionSets,Value = Source.OptionSetField).Index ), "OptionsetIndex", Ascending ) |
そもそも委任に対応できていないので、使い所も限られてきます。一応ご紹介まで。
まとめ
・ひとまず、ビューを試してみるのがおすすめ。
・動的なフィルタには弱い。利用パターンを洗い出してみては。
・委任非対応でよければ、キャンバス側での実装はいくつか方法がある。が、やや面倒。
PR
アプリ作成支援や導入支援サービスを提供しています。
Power Apps / Power Automate 技術支援サービス | ZEE CitizenDevSupport