今回はちょっとした不具合のお話です。
現在プレビュー中のドロップダウン モダンコントロールですが、Itemsに外部データソースを直接指定すると、Sort・SortByColumns関数での並び替えが反映されない不具合が発生しています。
不具合の概要
ドロップダウン モダンコントロールは、フィールドで一番上に設定した列がコントロールの表示列となる仕様です。クラシックのドロップダウンではValueプロパティで指定していた部分ですね。
そして、外部データソースから直接参照したときだけ、この表示されている列の値の昇順に固定されてしまい、ItemプロパティにSort関数・SortByColumn関数をかけても無視されてしまう事象が発生しています。
たとえば「2025年4月」・「2025年5月」のような「期間名」列を表示させつつ、「2025/4/1」・「2025/5/1」のような日付データが格納されている「開始日」列を基準に並び替えさせようとしても、DataverseやSharePointを直接差戦勝させてしまうとSort関数の結果が反映されず、期間名を文字列として認識した昇順になってしまいます。
※2025年10月→11月→12月→4月→5月…という並び順になってしまう。
Sort('期間マスタテーブル', 開始日, SortOrder.Ascending)

SharePointリストだけでなく、Dataverseにしても同様です。

そもそも、ローカルにコレクションや変数のテーブルを参照しているときは既定の順序が維持されており、本来は表示列の昇順に自動的に並び替わる仕様ですらありません。明らかに外部データソースに接続したときだけ別の挙動をしています。
どういう場面で困るか
先程の例では会計年度の情報を定義したテーブルを、期間名を表示させつつ開始日で並び替えをさせようとして、うまくいきませんでした。
それ以外にも、
- 社員テーブルで和名を表示させ、ふりがな列基準で正確な五十音順に並び替える
- 商品名を表示させ、商品コードを基準に並び替える
のようなことができなくなってしまいます。
Filter関数の結果はきちんと反映される
ドロップダウンでよく使いそうなもう一つの関数であるFilter関数の結果は正常に反映されます。しかし、並び順は相変わらず表示列の昇順に固定されます。
現状の代替策
そもそもドロップダウン モダンコントロールは2025/9/21時点ではプレビュー段階なので、実運用するアプリには入れないほうが良いというのは大前提ですが、現状の代替策も記しておきます。
1. コンボボックス モダンコントロールで代用する

類似機能を持つコンボボックス モダンコントロールはすでにGA(一般提供が開始)されています。
コンボボックスは選択肢をテキスト検索できる機能を持つ、ドロップダウンの上位互換ともいえる存在です。
こちらでは不具合が発生しないため、少しカスタマイズして限りなくドロップダウンに近い振る舞いをさせれば、ドロップダウンの代用になります。
- InputTextHolder =
Self.Selected.<表示列名>
- IsSearchable =
false
個人的には後続の2つの策より見た目が好みなので、最近開発したアプリではこの方法を使いました。
2. クラシック ドロップダウンコントロールを使う
クラシック ドロップダウンコントロールなら正常に並び替えを適用させることができます。
そもそもの話ですが、ドロップダウン モダンコントロールは明らかにクラシックコントロールより機能性が劣化しているため、無理に使う必要はありません。
現状モダンを選択するメリットは、
- 見た目が若干イケている
- ピッカー表示が実行端末のOS固有のものになる
- ValidationStateプロパティで選択の有効性を定義し、エラーの際に赤枠表示にできる
くらいしかありません。
一番悩まず簡単に使える策はこちらかもしれませんね。
3. コレクションや変数に保存したものをItemsに指定する

ローカルに保存したものは正常に並び替えできるため、UpdateContextやClearCollect関数でローカルに保存してから表示するのも手です。
ただし、この場合は委任問題に注意しましょう。気をつけないとデータソースの件数が増えたときに必要な選択肢が欠けてしまう可能性があります。
【まとめ】モダンコントロールはまだまだ不安定なので注意
プレビューマークが外れたモダンコントロールも増えてきましたが、まだまだ不安定なものも多いです。
日本のコミュニティでは騒がれていない細かな不具合もあるので、情報収集とテストは念入りにしていきましょう。
コメント