diff --git a/org.adempiere.base/src/org/compiere/process/ProcessInfo.java b/org.adempiere.base/src/org/compiere/process/ProcessInfo.java
index 56c2e52d03..0742c93d4c 100644
--- a/org.adempiere.base/src/org/compiere/process/ProcessInfo.java
+++ b/org.adempiere.base/src/org/compiere/process/ProcessInfo.java
@@ -42,7 +42,7 @@ public class ProcessInfo implements Serializable
/**
*
*/
- private static final long serialVersionUID = 1426147857271483561L;
+ private static final long serialVersionUID = 1371812474929601477L;
/**
* Constructor
@@ -137,6 +137,9 @@ public class ProcessInfo implements Serializable
/** Export File */
private File m_exportFile = null;
+ /** Row count */
+ private int m_rowCount;
+
/**
* String representation
* @return String representation
@@ -761,4 +764,13 @@ public class ProcessInfo implements Serializable
{
m_Record_IDs = Record_IDs;
}
+
+ public void setRowCount(int rowCount) {
+ m_rowCount = rowCount;
+ }
+
+ public int getRowCount() {
+ return m_rowCount;
+ }
+
} // ProcessInfo
diff --git a/org.adempiere.report.jasper/src/org/compiere/report/ReportStarter.java b/org.adempiere.report.jasper/src/org/compiere/report/ReportStarter.java
index 9f213ed9f9..2e5b420423 100644
--- a/org.adempiere.report.jasper/src/org/compiere/report/ReportStarter.java
+++ b/org.adempiere.report.jasper/src/org/compiere/report/ReportStarter.java
@@ -53,8 +53,8 @@ import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JRPropertiesUtil;
import net.sf.jasperreports.engine.JRQuery;
+import net.sf.jasperreports.engine.JRVariable;
import net.sf.jasperreports.engine.JasperCompileManager;
-import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JRDesignQuery;
@@ -67,6 +67,8 @@ import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter;
import net.sf.jasperreports.engine.export.JRTextExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXmlExporter;
+import net.sf.jasperreports.engine.fill.JRBaseFiller;
+import net.sf.jasperreports.engine.fill.JRFiller;
import net.sf.jasperreports.engine.fill.JRSwapFileVirtualizer;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.util.JRSwapFile;
@@ -351,6 +353,8 @@ public class ReportStarter implements ProcessCall, ClientProcess
private boolean startProcess0(Properties ctx, ProcessInfo pi, Trx trx)
{
processInfo = pi;
+ int nrows = 0;
+ Object onrows = null;
String Name=pi.getTitle();
int AD_PInstance_ID=pi.getAD_PInstance_ID();
int Record_ID=pi.getRecord_ID();
@@ -603,8 +607,10 @@ public class ReportStarter implements ProcessCall, ClientProcess
params.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
DefaultJasperReportsContext jasperContext = DefaultJasperReportsContext.getInstance();
JRPropertiesUtil.getInstance(jasperContext).setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");
- JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, params, conn);
-
+ JRBaseFiller filler = JRFiller.createFiller(jasperContext, jasperReport);
+ JasperPrint jasperPrint = filler.fill(params, conn);
+ onrows = filler.getVariableValue(JRVariable.REPORT_COUNT);
+
if (!processInfo.isExport())
{
if (reportData.isDirectPrint())
@@ -734,6 +740,10 @@ public class ReportStarter implements ProcessCall, ClientProcess
}
}
+ if (onrows != null && onrows instanceof Integer) {
+ nrows = (Integer) onrows;
+ processInfo.setRowCount(nrows);
+ }
reportResult( AD_PInstance_ID, null, trxName);
return true;
}
diff --git a/org.adempiere.server-feature/server.product.launch b/org.adempiere.server-feature/server.product.launch
index 07a3f843fe..55d4794405 100644
--- a/org.adempiere.server-feature/server.product.launch
+++ b/org.adempiere.server-feature/server.product.launch
@@ -21,7 +21,7 @@
-
+
diff --git a/org.adempiere.ui/src/org/compiere/apps/AbstractProcessCtl.java b/org.adempiere.ui/src/org/compiere/apps/AbstractProcessCtl.java
index def4c8350f..d893aa7bed 100644
--- a/org.adempiere.ui/src/org/compiere/apps/AbstractProcessCtl.java
+++ b/org.adempiere.ui/src/org/compiere/apps/AbstractProcessCtl.java
@@ -26,6 +26,7 @@ import org.adempiere.util.IProcessUI;
import org.adempiere.util.ProcessUtil;
import org.compiere.db.CConnection;
import org.compiere.interfaces.Server;
+import org.compiere.model.MPInstance;
import org.compiere.model.MRule;
import org.compiere.print.ReportCtl;
import org.compiere.process.ClientProcess;
@@ -37,6 +38,7 @@ import org.compiere.util.Env;
import org.compiere.util.Ini;
import org.compiere.util.Msg;
import org.compiere.util.Trx;
+import org.compiere.util.Util;
import org.compiere.wf.MWFProcess;
/**
@@ -268,6 +270,14 @@ public abstract class AbstractProcessCtl implements Runnable
m_pi.setReportingProcess(true);
m_pi.setClassName(ProcessUtil.JASPER_STARTER_CLASS);
startProcess();
+ MPInstance pinstance = new MPInstance(Env.getCtx(), m_pi.getAD_PInstance_ID(), null);
+ String errmsg = pinstance.getErrorMsg();
+ if (Util.isEmpty(errmsg, true))
+ errmsg = "Rows=" + String.valueOf(m_pi.getRowCount());
+ else
+ errmsg += " Rows=" + m_pi.getRowCount();
+ pinstance.setErrorMsg(errmsg);
+ pinstance.saveEx();
unlock();
return;
}
@@ -278,6 +288,14 @@ public abstract class AbstractProcessCtl implements Runnable
// Start Report -----------------------------------------------
boolean ok = ReportCtl.start(m_processUI, windowno, m_pi, IsDirectPrint);
m_pi.setSummary("Report", !ok);
+ MPInstance pinstance = new MPInstance(Env.getCtx(), m_pi.getAD_PInstance_ID(), null);
+ String errmsg = pinstance.getErrorMsg();
+ if (Util.isEmpty(errmsg, true))
+ errmsg = "Rows=" + String.valueOf(m_pi.getRowCount());
+ else
+ errmsg += " Rows=" + m_pi.getRowCount();
+ pinstance.setErrorMsg(errmsg);
+ pinstance.saveEx();
unlock ();
}
/**********************************************************************
diff --git a/org.adempiere.ui/src/org/compiere/print/ReportCtl.java b/org.adempiere.ui/src/org/compiere/print/ReportCtl.java
index 3d4cb6d6ac..08e75c5b20 100644
--- a/org.adempiere.ui/src/org/compiere/print/ReportCtl.java
+++ b/org.adempiere.ui/src/org/compiere/print/ReportCtl.java
@@ -16,6 +16,16 @@
*****************************************************************************/
package org.compiere.print;
+import static org.compiere.model.SystemIDs.PROCESS_RPT_C_DUNNING;
+import static org.compiere.model.SystemIDs.PROCESS_RPT_C_INVOICE;
+import static org.compiere.model.SystemIDs.PROCESS_RPT_C_ORDER;
+import static org.compiere.model.SystemIDs.PROCESS_RPT_C_PAYMENT;
+import static org.compiere.model.SystemIDs.PROCESS_RPT_C_PROJECT;
+import static org.compiere.model.SystemIDs.PROCESS_RPT_C_RFQRESPONSE;
+import static org.compiere.model.SystemIDs.PROCESS_RPT_FINREPORT;
+import static org.compiere.model.SystemIDs.PROCESS_RPT_FINSTATEMENT;
+import static org.compiere.model.SystemIDs.PROCESS_RPT_M_INOUT;
+
import java.util.Properties;
import java.util.logging.Level;
@@ -27,7 +37,6 @@ import org.compiere.model.MProcess;
import org.compiere.model.MQuery;
import org.compiere.model.MTable;
import org.compiere.model.PrintInfo;
-import static org.compiere.model.SystemIDs.*;
import org.compiere.process.ProcessInfo;
import org.compiere.util.CLogger;
import org.compiere.util.Env;
@@ -66,6 +75,7 @@ public class ReportCtl
/** Static Logger */
private static CLogger s_log = CLogger.getCLogger (ReportCtl.class);
+ private volatile static ProcessInfo m_pi;
/**
* Create Report.
@@ -113,6 +123,7 @@ public class ReportCtl
{
if (s_log.isLoggable(Level.INFO)) s_log.info("start - " + pi);
+ m_pi = pi;
/**
* Order Print
*/
@@ -363,6 +374,8 @@ public class ReportCtl
private static void createOutput(ReportEngine re, boolean printPreview, String printerName)
{
+ if (m_pi != null)
+ m_pi.setRowCount(re.getPrintData().getRowCount());
if (printPreview)
preview(re);
else {