【JPIERE-0181】FindWindowクラスのパフォーマンス改善

 FindWindowクラスは、iDempiereのウィンドウで虫眼鏡アイコンを押すと呼び出され、データ検索を担います。

データ検索を担うFindWindowクラス
データ検索を担うFindWindowクラス

 このFindWindowクラスですが、実際にデータ検索を行い、データを表示するまでの間に、データ件数を複数回カウントしています。データ件数を複数回カウントする事は無駄でありシステムリソースを浪費し、ユーザーにとっても操作感が悪くなります。

 そこで、JPiereでは、システムリソースを大幅に浪費する可能性があるウィンドウについては、データ件数のカウントを1回で済むように、改善致しました。なお、改善の対象となるシステムリソースを大幅に浪費する可能性があるウィンドウとは、テーブルの大量データフラグがONになっているか、もしくはウィンドウタイプがトランザクションのウィンドウです。

 そして、タブのWhere条件に、"<ターブル名+_ID> = 0"の条件が含まれている場合は、登録専用のウィンドウとして、データ件数のカウントを行わないようにしています。

技術情報

更新クラス

  • org.adempiere.webui.window.FindWindow(jpiere.modification.org.adempiere.ui.zk)

カスタマイズ履歴

2022年6月11日(v9):検索時のレコードカウントの制御

FindWindowでの検索時にレコード件数をカウントする処理を行うかどうか、システムコンフィグ設定で設定できるようにしました。

◆JP_FINDWINDOW_COUNT_CHECK

Y もしくは N を設定して下さい。

 Yを設定すると、iDempiereの標準的挙動となり、検索時にレコード件数をカウントして、0件であったり表示件数を超えた場合にダイアログボックスでエラーメッセージを表示してくれます。FindWindowを閉じる事が無いので、操作性には優れているかなと思います。しかし、一方で、検索の都度カウント処理が行われるので、システムリソースをその分費やす事になります。

 Nを設定すると、FindWindowでは検索時にレコード件数はカウントしないので、その分、処理が軽くなります。一方で、検索時にレコード件数が0件の場合などでも一度、FindWindowが閉じられます。またレコード制限にひっかっかっても、制限数のレコードまでウィンドウに表示されます。

 大量ボリュームのデータ環境において、検索パフォーマンスが悪くなったら、N にして試してみて下さい。

 

2020年4月21日

Find Windowにレコード件数を表示させるかどうか、システムコンフィグ設定で制御できるようにしました。システムコンフィグ設定の「JP_FINDWINDOW_COUNT」の値を"Y"にすると、Find Windowにレコード件数のカウントが表示されます。"N"にすると表示されず、カウントをしないためパフォーマンスが向上します。

2020年4月28日

Find Windowにおけるレコード件数のカウントを行わなくても問題の無い箇所があったのでパフォーマンス向上を目的としてコメントアウトしました。

◆cmd_ok_Simple()メソッド

レコード件数が0件ではなかったらdispose()メソッドを読んでいますが、cmd_ok_simple()メソッドの呼び出しもとで、dispose()メソッドを読んでいるので、このカウント自体行わなくてもシステム制御上問題ありません。

◆cmd_ok_Advanced()メソッド

レコード件数が0件ではなかったらdispose()メソッドを読んでいますが、cmd_ok_Advanced()メソッドの呼び出しもとで、dispose()メソッドを読んでいるので、このカウント自体行わなくてもシステム制御上問題ありません。