【iDempiere Lab】品目検索ウィンドウ(Product Info)の軽量化

品目検索ウィンドウ(Product Info)の軽量化の必要性

 品目検索ウィンドウ(Product Info)は、品目マスタを検索しその在庫状況などを確認するとともに、選択した品目マスタを入力フィールドに入力する事ができる、とても便利な機能です。

品目検索ウィンドウ(Product Info)
品目検索ウィンドウ(Product Info)

 品目マスタを選択入力する際に、在庫状況も確認できる事は本当に便利なのですが、実はこの処理はけっこう重たい処理になります。検索の都度、現在の在庫数量を計算していますので、表示される品目マスタが数百件程度なら良いですが、1万件を超えるような場合は、かなりサーバーに負荷がかかりますし、表示するまでの時間もかかります。

品目検索ウィンドウ(Product Info)の在庫数量表示
品目検索ウィンドウ(Product Info)の在庫数量表示

 サーバーに余計な負荷がかからないように、業務担当者には検索条件を有効に活用して、検索結果の表示件数を絞り込むようにしてもらう事も大切です。そもそも1万件を超える検索結果から探している品目マスタを見つけるのは至難の業ですので、業務担当者は普通に検索で絞り込んでから品目マスタを選択するようになると思います。

 しかし、だからといってシステム的になにも制御しなくて良いとも思えません。だれかが間違って条件指定せずに検索してしまうと、件数によっては結果がいつになっても返ってこない事もありえますし、サーバーに余計な負荷がかかって他の人の迷惑にもなりかねません。

 そのような事を防ぐには、何らかの対策が必要です。

 その対策の1つが、検索ウィンドウでの検索レコード数の制限です。このカスタマイズは、全ての検索ウィンドウで有効です。しかしながら、このレコード数の制限を1万件としていた場合、品目検索ウィンドウにとっては、高負荷になるのは間違いありません。

 そこで、本日の研究内容である、品目検索ウィンドウの軽量化が必要になります。在庫情報など、処理が重たい情報は、検索結果に直接は表示しないようにする事で処理の軽量化を図ります。

品目検索ウィンドウ(Product Info)の処理の軽量化

 処理の軽量化として行った事は次の通りです。

  • メインの検索結果に表示される在庫数量は「利用可能数量(Available Qutantity)」だけ表示するようする(※品目検索ウィンドウの仕様上表示する必要がある)。
  • メインの検索結果に表示する「利用可能数量(Available Qutantity)」は"99,999(※在庫数量を管理しない品目マスタで表示される数値と同じ)"にする。⇒在庫数量は品目マスタを選択すれば、検索ウィンドウ下段のサブのタブに表示される。
軽量化後の品目検索ウィンドウ(クリックして拡大してご確認下さい)
軽量化後の品目検索ウィンドウ(クリックして拡大してご確認下さい)

 検索した結果の全件の在庫情報を計算し、表示させようとするのが重くなる原因なので、メインとなる直接の結果表示からは、在庫数量の表示は事実上なくして、選択した品目の在庫数量だけを下段のサブの画面に表示させる事により、品目検索ウィンドウにとっては相当な負荷の軽減になります。

 

品目検索ウィンドウの軽量化の結果

 品目検索ウィンドウの処理の軽量化の施策の前と後とで、私の環境で簡単な性能評価をしてみました。

検索結果表示件数 軽量化前の検索結果表示時間 軽量化後の検索結果表示時間
 100件  2秒以下  2秒以下
1,000件  4~5秒程度  2秒以下
10,000件  20秒前後 3秒前後
100,000件  約200秒 3秒前後

 軽量化の施策の前は、検索結果のマスタ件数が多くなればなるほど、在庫数量を計算する量も増えるので表示するための時間も比例して増える感じです。しかし、軽量化後はとりあえずマスタを表示するだけに近い処理になりますので、マスタ件数や在庫取引のデータが増えても、それほど検索結果の表示時間には影響しません。

 このカスタマイズはコーディングが不要で、すぐに適用できるカスタマイズですが、その方法は、iDempiereの検索ウィンドウのパラメータ設定を"ハック"するようなマニアックな方法になります。

 品目マスタが数千件レベルになってきたら、施した方が良いカスタマイズの1つかなと思いますので、必要性を感じた方はこちらよりお問い合わせ下さい。

関連するコンテンツ