【iDempiere Lab】地域(都道府県)の選択リストをソートする

 iDempiereアイデンピエレ)に関わらずCompiereコンピエール)の頃より、住所登録などの際に都道府県を選択入力する時に、何もカスタマイズしないとリスト表示される都道府県の並びが、北海道を01番とするいわゆる都道府県番号順にはなっておらず多くの人にとって違和感があり、選択入力したい都道府県が探しにくい状態になっています。

 そこで、今日の研究日誌では、都道府県を都道府県番号順にソートする方法を調査及び研究したいと思います。

何もカスタマイズしない状態の都道府県のリスト表示

 まずは、はじめに何もカスタマイズしないと、都道府県のリスト表示がどのように表示されるのか確認しておきたいと思います。

何もカスタマイズしない状態での都道府県の並び順
何もカスタマイズしない状態での都道府県の並び順

 愛知県、愛媛県、茨城県・・・私(萩原秀明)の実家の茨城県が3番目に表示されて、うれしいですが、この順番では、都道府県を実際に選択入力する際には、戸惑うのが目に見えますね。日本人であれば、北から北海道、青森とはじまって、最後に沖縄という並び順になっていて欲しいものだと思います。

地域(都道府県)テーブルを外部参照している場合のカスタマイズ

地域(Region)マスタ

地域マスタ
地域マスタ

 都道府県のデータは地域(C_Region)テーブルに格納されています。「名称(Name)」フィールドのテキストは、住所などを印刷する時に使用するため都道府県名以外の情報は入れたくないので、「説明(Desctiption)」欄の先頭に、都道府県番号を入れてソートする準備をしておきます。

グリッド表示
グリッド表示

テーブルとカラムの設定

テーブルとカラムの設定
テーブルとカラムの設定

 リファレンスが"Table Direct"になっていると思い通りに並び順を制御する事ができないので、"Table"に変更して、リファレンスキーに「C_Region-地域」を選択します。

 リファレンスの「C_Region-地域」はテーブルバリデーションなので、リスト表示させるデータをSQL ORDER BY句を記述する事で制御する事ができるため、「説明(Description)」でソートするように記述します。

 

設定変更後の都道府県のリスト表示

 都道府県番号順にソートされて、違和感なくオペレーションできるようになるかと思います。

住所(リファレンス(Display Type)がLocation)フィールドのポップアップウィンドウのカスタマイズ

 テーブルとカラムウィンドウのカラムの設定でリファレンス(Display Type)にLocationが選択されている場合には、住所をポップアップウィンドウで入力できるようになっており、そこでも都道府県をリストから選択できるようになっているのですが、この場合は、上記の方法では対応できません。

取引先マスタの住所タブの住所フィールドのポップアップ
取引先マスタの住所タブの住所フィールドのポップアップ

 住所入力のポップアップウィンドウは、コーディングされているのでソースコードを修正(Modification)する必要があります。

MRegion.toString()
MRegion.toString()

MRegionクラスのpublic static MRegion[] getRegions (Properties ctx, int C_Country_ID)メソッドの中でソートしてリスト表示しているのですが、toStringメソッドの戻り値をもとにソートしているので、 toStringメソッドの戻り値をDescriptionに変えてあげれば、都道府県番号順で表示する事ができます。

カスタマイズ後の住所入力ポップアップウィンドウの都道府県の並び順
カスタマイズ後の住所入力ポップアップウィンドウの都道府県の並び順

参考サイト

関連するコンテンツ