オープンソースのERP iDempiereでは入力したデータを検索するのに、主に「検索ウィンドウ」、「Findウィンドウ」、「レポート」の3つの方法を使用していきます。
そこで、この3つの検索方法において、自由にテキストを入力できるフィールドの検索の挙動について調査及び研究し、その成果をまとめておきます。
検索ウィンドウにおける検索の設定
検索ウィンドウでは、検索対象となるフィールドに対して、どのような検索を行うのかクエリ条件オペレーターフィールドで選択する事ができます。
さらに、クエリDB関数を設定する事で、アルファベットの大文字/小文字を区別せず検索するような事もできます。
◆クエリ条件オペレーター
通常、テキスト入力系のフィールドを検索条件とする場合、クエリ条件オペレータは、「Like」か、「Full Like」を使用する事が多くなると思います。iDempiereでは、あいまい検索をしたい場合「%」を使用していきますが、「Like」を選択すると、%を指定しなくても前方一致検索となります。「Full Like」を選択した場合、%を制定しなくても部分一致検索となります。
「Like」において、部分一致検索を行いたい場合は、検索条件の先頭に「%」を自ら追加して下さい。
◆クエリDB関数
クエリDB関数で「Upper」を指定すると、検索の際にアルファベットは大文字として検索されます。つまり、大文字/小文字を区別せず検索する事ができます。
他に、どんな関数があるのか質問される事がありますが、気になる方は、InfoWindowのgetSQLWhere()メソッドを読んで色々と試してみて下さい。
Findウィンドウのテキスト入力フィールドの検索は、大文字/小文字を区別せず前方一致検索が基本
Findウィンドウにおいて、テキスト入力フィールドの検索は、大文字/小文字を区別せず(Upper検索)、前方一致検索が基本になります。部分一致にしたい場合は、自分で検索条件の前方に「%」を追加する必要があります。
レポートの検索は、完全一致が基本
レポートの検索では、テキスト入力フィールドは、完全一致が基本です。あまい検索したい場合は、「%」を追加する必要があります。
MQuery#get()メソッドにおいて、レポートの抽出条件となるパラメータの値を処理しているのですが、検索条件に「%」が含まれていない場合は、完全一致の「=」で検索し、含まれている場合は「LIKE」検索に切り替えています。
あいまい検索を行う可能性が高いフィールドの検索においては、あらかじめデフォルトロジックで「%」を設定しておくと、ユーザーの入力が少し楽になるかもしれません。しかしながら「%」だけのまま検索すると、検索対象のフィールドが空欄のデータは抽出対象外になりますので注意して下さい。
そしてアルファベットについて、大文字/小文字を区別して検索します。言い換えるとUpper検索はしません。
これらの仕様は、「検索ウィンドウ」や「Findウィンドウ」と異なりますが、レポートの仕組み的には致し方ない所かなと思います。
どうしてもレポートを使用して、「検索ウィンドウ」や「Findウィンドウ」と同じ挙動にしたい場合は、プロセスを活用してレポートを実装すれば同じような挙動にする事はできると思います。しかしながらパラメータ設定だけでできるレポートを、わざわざ実装してまで「検索ウィンドウ」や「Find」ウィンドウと同じ挙動にするかどうかは、よくよく検討して下さい。どうしても、同じような挙動にしたい場合は「検索ウィンドウ」をレポート的に活用してもらっても良いかなと思います。パラメータだけで作成できるレポートであれば、同じように検索ウィンドウでも作成できるはずですので!!