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