details:   https://code.openbravo.com/erp/devel/pi/rev/920bfe823a1a
changeset: 35046:920bfe823a1a
user:      Atul Gaware <atul.gaware <at> openbravo.com>
date:      Fri Nov 16 15:01:39 2018 +0530
summary:   Fixes Issue 39619:ReportMaterialTransactionEditionJR consumes a lot 
of
memory and produces a system crash

For avoiding system crash, data is fetched with limit of preference
ReportLimit. If data count is more than ReportLimit, warning message
is shown to use apply more selective filters.

details:   https://code.openbravo.com/erp/devel/pi/rev/cde51d307460
changeset: 35047:cde51d307460
user:      Sandra Huguet <sandra.huguet <at> openbravo.com>
date:      Tue Nov 20 15:46:26 2018 +0100
summary:   related to issue 39619 use advisePopUp from HttpSecureAppServlet

diffstat:

 src/org/openbravo/erpCommon/ad_reports/InoutEdition_data.xsql                  
|   6 +-
 src/org/openbravo/erpCommon/ad_reports/ReportMaterialTransactionEditionJR.java 
|  36 +++++++--
 2 files changed, 33 insertions(+), 9 deletions(-)

diffs (126 lines):

diff -r 79cf23e89b27 -r cde51d307460 
src/org/openbravo/erpCommon/ad_reports/InoutEdition_data.xsql
--- a/src/org/openbravo/erpCommon/ad_reports/InoutEdition_data.xsql     Tue Nov 
20 13:36:52 2018 +0100
+++ b/src/org/openbravo/erpCommon/ad_reports/InoutEdition_data.xsql     Tue Nov 
20 15:46:26 2018 +0100
@@ -12,7 +12,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2001-2016 Openbravo SLU 
+ * All portions are Copyright (C) 2001-2018 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -28,6 +28,7 @@
     <SqlMethodComment></SqlMethodComment>
     <Sql>
     <![CDATA[
+      SELECT B.* FROM (
       SELECT M_INOUT.DOCUMENTNO AS DOCUMENTNO, M_INOUT.MOVEMENTDATE AS 
MOVEMENTDATE, C_BPARTNER.NAME AS CLIENT_NAME, M_PRODUCT.NAME AS PRODUCT_NAME, 
SUM(M_INOUTLINE.MOVEMENTQTY) AS QUANTITYORDER, C_UOM.NAME AS UOMNAME,
       (CASE M_INOUT.ISSOTRX 
                WHEN 'Y' THEN TO_CHAR(AD_MESSAGE_GET2('GOODSSHIPMENT',?))
@@ -51,6 +52,7 @@
       GROUP BY C_BPARTNER.NAME, M_PRODUCT.NAME, C_UOM.NAME, 
M_INOUT.DOCUMENTNO, M_INOUT.MOVEMENTDATE, M_INOUT.ISSOTRX, M_LOCATOR.VALUE, 
M_WAREHOUSE.NAME,
       M_INOUTLINE.C_AUM, M_INOUTLINE.AUMQTY
       ORDER BY C_BPARTNER.NAME, M_INOUT.MOVEMENTDATE
+      ) B
      ]]></Sql>
     <Parameter name="adLanguage"/>
     <Parameter name="adLanguage"/>
@@ -61,6 +63,8 @@
     <Parameter name="cBPartnerId" optional="true" after="1=1"><![CDATA[AND 
M_INOUT.C_BPARTNER_ID = ?]]></Parameter>
     <Parameter name="mWarehouseId" optional="true" after="1=1"><![CDATA[AND 
M_INOUT.M_WAREHOUSE_ID = ?]]></Parameter>
     <Parameter name="cProjectId" optional="true" after="1=1"><![CDATA[AND 
M_INOUT.C_PROJECT_ID = ?]]></Parameter>
+    <Parameter name="pgLimit" type="argument" optional="true" after=") 
B"><![CDATA[LIMIT ]]></Parameter>
+    <Parameter name="oraLimit1" type="argument" optional="true" after=") 
B"><![CDATA[WHERE ROWNUM <= ]]></Parameter>
   </SqlMethod>
   <SqlMethod name="selectShipment" type="preparedStatement" return="multiple">
     <SqlMethodComment></SqlMethodComment>
diff -r 79cf23e89b27 -r cde51d307460 
src/org/openbravo/erpCommon/ad_reports/ReportMaterialTransactionEditionJR.java
--- 
a/src/org/openbravo/erpCommon/ad_reports/ReportMaterialTransactionEditionJR.java
    Tue Nov 20 13:36:52 2018 +0100
+++ 
b/src/org/openbravo/erpCommon/ad_reports/ReportMaterialTransactionEditionJR.java
    Tue Nov 20 15:46:26 2018 +0100
@@ -11,7 +11,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2001-2017 Openbravo SLU 
+ * All portions are Copyright (C) 2001-2018 Openbravo SLU 
  * All Rights Reserved.
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -27,6 +27,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.lang.StringUtils;
 import org.openbravo.base.secureApp.HttpSecureAppServlet;
 import org.openbravo.base.secureApp.VariablesSecureApp;
 import org.openbravo.database.ConnectionProvider;
@@ -58,7 +59,7 @@
       String strmWarehouseId = vars.getStringParameter("inpmWarehouseId");
       String strcProjectId = vars.getStringParameter("inpcProjectId");
       printPageHtml(response, vars, strdateFrom, strdateTo, strcBpartnetId, 
strmWarehouseId,
-          strcProjectId, "html");
+          strcProjectId, "html", request);
     } else if (vars.commandIn("EDIT_PDF")) {
       if (log4j.isDebugEnabled()) {
         log4j.debug("WE EDIT THE PDF");
@@ -69,7 +70,7 @@
       String strmWarehouseId = vars.getStringParameter("inpmWarehouseId");
       String strcProjectId = vars.getStringParameter("inpcProjectId");
       printPageHtml(response, vars, strdateFrom, strdateTo, strcBpartnetId, 
strmWarehouseId,
-          strcProjectId, "pdf");
+          strcProjectId, "pdf", request);
     } else {
       pageErrorPopUp(response);
     }
@@ -152,26 +153,45 @@
 
   private void printPageHtml(HttpServletResponse response, VariablesSecureApp 
vars,
       String strdateFrom, String strdateTo, String strcBpartnetId, String 
strmWarehouseId,
-      String strcProjectId, String strOutput) throws IOException, 
ServletException {
+      String strcProjectId, String strOutput, HttpServletRequest request) 
throws IOException,
+      ServletException {
+
+    InoutEditionData[] data = null;
+    int limit = Integer.parseInt(Utility.getPreference(vars, "ReportsLimit", 
""));
+    ConnectionProvider readOnlyCP = 
DalConnectionProvider.getReadOnlyConnectionProvider();
+
     if (log4j.isDebugEnabled()) {
       log4j.debug("Output: dataSheet");
     }
 
-    InoutEditionData[] data = null;
+    String pgLimit = null, oraLimit = null;
+    if (StringUtils.equalsIgnoreCase(readOnlyCP.getRDBMS(), "ORACLE")) {
+      oraLimit = String.valueOf(limit + 1);
+    } else {
+      pgLimit = String.valueOf(limit + 1);
+    }
     String discard[] = { "discard" };
-    ConnectionProvider readOnlyCP = 
DalConnectionProvider.getReadOnlyConnectionProvider();
     data = InoutEditionData.select(readOnlyCP, vars.getLanguage(), 
Utility.getContext(readOnlyCP,
         vars, "#AccessibleOrgTree", "ReportMaterialTransactionEditionJR"), 
Utility.getContext(
         readOnlyCP, vars, "#User_Client", 
"ReportMaterialTransactionEditionJR"), strdateFrom,
-        strdateTo, strcBpartnetId, strmWarehouseId, strcProjectId);
+        strdateTo, strcBpartnetId, strmWarehouseId, strcProjectId, pgLimit, 
oraLimit);
 
-    if (data.length < 1) {
+    if (data == null || data.length == 0) {
       discard[0] = "selEliminar";
     }
+
+    if (limit > 0 && data.length > limit) {
+      String msgbody = Utility.messageBD(readOnlyCP, "ReportsLimit", 
vars.getLanguage());
+      msgbody = msgbody.replace("@limit@", String.valueOf(limit));
+      advisePopUp(request, response, "WARNING",
+          Utility.messageBD(this, "ReportsLimitHeader", vars.getLanguage()), 
msgbody);
+      return;
+    }
     String strReportName = 
"@basedesign@/org/openbravo/erpCommon/ad_reports/ReportMaterialTransactionEditionJR.jrxml";
 
     HashMap<String, Object> parameters = new HashMap<String, Object>();
     renderJR(vars, response, strReportName, strOutput, parameters, data, null);
+
   }
 
   public String getServletInfo() {


_______________________________________________
Openbravo-commits mailing list
Openbravo-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to