【JPIERE-0466】最大クエリレコード数に達した時のウィンドウ制御

iDempiereの標準データ入力画面のウィンドウでは、パフォーマンスの向上のために、ウィンドウに表示するレコード件数を制限する事ができます。

その制限が適用された時に、ウィンドウ上にメッセージを表示させるようにしました。そして、システムコンフィグ設定により、新規レコードの登録を制限できるようにしました。

【補足説明】メッセージを表示するのは一番上の親タブだけです。

最大レコード数に達した時にメッセージを表示させるのは一番上の親タブだけになります。

【前提】最大クエリレコード数の設定

ウィンドウの最大クエリレコードの数の設定は、iDempiere7.1より"ダブ"で設定する事ができるようになりました。また、これまでの職責での設定も有効です。ダブで設定した数値と職責で設定されている数値を比較して、小さい数値が、適用されます。

タブの最大クエリレコード数の設定

職責の最大クエリレコード数の設定

【補足説明】iDempiere7.1のウィンドウの最大クエリレコード数の仕様変更

iDempiere7.1より、タブの設定に最大クエリレコードが追加されました。これにより、タブ毎に最大クエリレコード数を設定する事ができます。タブで設定されている値と、職責に設定されている値を比較して、小さい方の値が適用されます。

タブの最大クエリレコード数を0にすると、職責の値は無視されて、最大クエリレコード数の制限が適用されませんので注意して下さい。

最大クエリレコード数を設定する場合には、10以上の数値を入力して下さい。

最大クエリレコード数に達した時のメッセージ

このメッセージは、システムコンフィグ設定でJP_FINDWINDOW_COUNTNにする事によって表示されます。詳しくは、【JPIERE-0181】FindWindowクラスのパフォーマンス改善 を参照して下さい。

最大クエリレコード数に達した時の操作の課題と対応

新規レコードを登録した後でのリフレッシュ

最大クエリレコード数に達している状態で、新規レコードを登録すると、登録後に実行されるリフレッシュ処理で、新規に登録したレコードが、表示されるレコードから漏れる事があります。最大クエリレコード数まで表示しているので、それに含まれないと漏れるのは致し方ありませんが、実際にこれが起こると、新規レコードを保存した後で同じデータを更新しようと思っていた時など、戸惑います。

 そのような事を防ぐために、最大クエリレコード数に達している時には、新規レコードを登録できないように制御できるようにしました。システムコンフィグ設定で、JP_FindWindow_Count_Action_Controlの値をYにすると、最大クエリレコード数に達した時に、新規レコードが登録できなくなります。

最大クエリレコード数に達した時のメッセージにも、新規レコードの登録ができない旨のメッセージが表示されます。

新規レコードアイコンが非アクティブになって、押すことができません。

新規レコードを登録できないと不便なように思うかもしれませんが、検索アイコンを押して表示されるFind Windowから、新規レコードを作成する事ができます!!ここから、作成する事で、新規レコードだけのウィンドウになりますのでパフォーマンスも良いのでオススメです。

上記の"検索アイコン"をクリックして、表示される検索パネルをFind Windowと言います。

【補足説明】保存時の注意点

ウィンドウでは、保存ボタンを押して保存処理した後で、自動的にウィンドウのリフレッシュが行われます。その際に、画面上に表示されているレコードの表示条件に応じてもういちどSQLが実行されます。大量にデータが登録されている場合で、インデックスが適用されない条件で、ウィンドウに大量のデータを表示しているようなケースで、保存ボタンを押すと、リフレッシュに思わぬ時間がかかってしまう場合があります。

 Find windowで検索して表示される時間と同じ程度の時間が保存処理にもかかる場合があります。そのため、Find Windowでよく検索に使用されるようなカラムには、あらかじめインデックスをはっておく必要がありますし、最大クエリレコード数も、あまり大きな数値を設定しない方が良いと思います。

【カスタマイズポイント】保存ボタンの制御

上記の【補足説明】で説明した通り、大量ボリュームの環境で、Find Windowの検索条件が"ゆるく"て、大量のデータがウィドウの表示対象になり、表示に時間がかかった場合に、表示されたレコードを更新すると、さらに表示にかかった時間と同程度の時間がかかってしまう事があります。

 このような事を避けるためには、ここで新規レコードボタンを押せないように制御したように、最大クエリレコード数に達した時に、保存ボタンを押せないように制御する方法は検討で.きるかなと思います。

 また、大量データの環境の場合、データを更新する際には検索ウィンドウ -> ウィンドウの操作導線にする事もオススメです。検索ウィンドウからズームする事で、表示されるデータが絞り込まれているので、パフォーマンスよく更新する事ができるはずです。

参照:【iDempiere Lab】1000万伝票1億明細を登録した感想と大量データへの対策

カスタマイズ情報

修正クラス

  • org.adempiere.webui.adwindow.AbstractADWindowContent

追加メッセージ

  • JP_FindWindow_Count_Action_Control

カスタマイズ履歴

2023年6月4日(v10) 最大クエリレコード数に達した警告の2重表示の修正

ウィンドウを開いて、検索アイコンをクリックして検索した際に、最大クエリレコードに達した場合に、警告表示が2重で表示される場合があったのを解消しました。