【iDempiere Lab】テキスト入力フィールドの検索について

 オープンソースのERP iDempiereでは入力したデータを検索するのに、主に「検索ウィンドウ」、「Findウィンドウ」、「レポート」の3つの方法を使用していきます。

 そこで、この3つの検索方法において、自由にテキストを入力できるフィールドの検索の挙動について調査及び研究し、その成果をまとめておきます。

検索ウィンドウ

検索ウィンドウはその名の通り、データを検索する専用の画面ですので、検索方法は色々と定義する事ができます。

検索ウィンドウ
検索ウィンドウ

検索ウィンドウにおける検索の設定

検索ウィンドウでは、検索対象となるフィールドに対して、どのような検索を行うのかクエリ条件オペレーターフィールドで選択する事ができます。

さらに、クエリDB関数を設定する事で、アルファベットの大文字/小文字を区別せず検索するような事もできます。

◆クエリ条件オペレーター

通常、テキスト入力系のフィールドを検索条件とする場合、クエリ条件オペレータは、「Like」か、「Full Like」を使用する事が多くなると思います。iDempiereでは、あいまい検索をしたい場合「%」を使用していきますが、「Like」を選択すると、%を指定しなくても前方一致検索となります。「Full Like」を選択した場合、%を制定しなくても部分一致検索となります。

InfoWindow#setParameter()メソッド
InfoWindow#setParameter()メソッド

「Like」において、部分一致検索を行いたい場合は、検索条件の先頭に「%」を自ら追加して下さい。

Likeにおける部分一致検索
Likeにおける部分一致検索

 

◆クエリDB関数

クエリDB関数で「Upper」を指定すると、検索の際にアルファベットは大文字として検索されます。つまり、大文字/小文字を区別せず検索する事ができます。

他に、どんな関数があるのか質問される事がありますが、気になる方は、InfoWindowのgetSQLWhere()メソッドを読んで色々と試してみて下さい。

InfoWindow#getSQLWhere()メソッド
InfoWindow#getSQLWhere()メソッド

Findウィンドウ

Findウィンドウは、ウィンドウの検索アイコンをクリックした時に表示される検索の事です。

Findウィンドウ
Findウィンドウ

Findウィンドウのテキスト入力フィールドの検索は、大文字/小文字を区別せず前方一致検索が基本

Findウィンドウにおいて、テキスト入力フィールドの検索は、大文字/小文字を区別せず(Upper検索)、前方一致検索が基本になります。部分一致にしたい場合は、自分で検索条件の前方に「%」を追加する必要があります。

 

FindWindow#cmd_SaveSimple()メソッド
FindWindow#cmd_SaveSimple()メソッド

レポート

レポートでは、検索条件に合致したデータを一覧表示します。

一覧レポート
一覧レポート

レポートの検索は、完全一致が基本

レポートの検索では、テキスト入力フィールドは、完全一致が基本です。あまい検索したい場合は、「%」を追加する必要があります。

MQuery#get()メソッドにおいて、レポートの抽出条件となるパラメータの値を処理しているのですが、検索条件に「%」が含まれていない場合は、完全一致の「=」で検索し、含まれている場合は「LIKE」検索に切り替えています。

MQuery#get()メソッド
MQuery#get()メソッド

あいまい検索を行う可能性が高いフィールドの検索においては、あらかじめデフォルトロジックで「%」を設定しておくと、ユーザーの入力が少し楽になるかもしれません。しかしながら「%」だけのまま検索すると、検索対象のフィールドが空欄のデータは抽出対象外になりますので注意して下さい。

レポートとプロセスのパラメータ設定
レポートとプロセスのパラメータ設定

そしてアルファベットについて、大文字/小文字を区別して検索します。言い換えるとUpper検索はしません。

これらの仕様は、「検索ウィンドウ」や「Findウィンドウ」と異なりますが、レポートの仕組み的には致し方ない所かなと思います。

どうしてもレポートを使用して、「検索ウィンドウ」や「Findウィンドウ」と同じ挙動にしたい場合は、プロセスを活用してレポートを実装すれば同じような挙動にする事はできると思います。しかしながらパラメータ設定だけでできるレポートを、わざわざ実装してまで「検索ウィンドウ」や「Find」ウィンドウと同じ挙動にするかどうかは、よくよく検討して下さい。どうしても、同じような挙動にしたい場合は「検索ウィンドウ」をレポート的に活用してもらっても良いかなと思います。パラメータだけで作成できるレポートであれば、同じように検索ウィンドウでも作成できるはずですので!!