IDEMPIERE-2850 Allow to schedule background reports in xls

This commit is contained in:
Carlos Ruiz 2019-05-21 18:17:05 +02:00
parent adac5357f4
commit a1a7b80bd0
16 changed files with 681 additions and 91 deletions

View File

@ -0,0 +1,79 @@
SET SQLBLANKLINES ON
SET DEFINE OFF
-- IDEMPIERE-2850
-- May 20, 2019, 9:32:31 PM CEST
INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,PrintName,EntityType,AD_Element_UU) VALUES (203337,0,0,'Y',TO_DATE('2019-05-20 21:32:30','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-05-20 21:32:30','YYYY-MM-DD HH24:MI:SS'),100,'ReportOutputType','Report Output Type','Report Output Type','D','cd782f63-e5c5-4f12-8925-4b13733002b8')
;
-- May 20, 2019, 9:32:31 PM CEST
INSERT INTO AD_Reference (AD_Reference_ID,Name,ValidationType,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,IsOrderByValue,AD_Reference_UU) VALUES (200169,'ReportOutputType','L',0,0,'Y',TO_DATE('2019-05-20 21:32:31','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-05-20 21:32:31','YYYY-MM-DD HH24:MI:SS'),100,'D','N','b6fc4bb2-ce72-4de3-b753-302da5fd1173')
;
-- May 20, 2019, 9:32:32 PM CEST
INSERT INTO AD_Ref_List (AD_Ref_List_ID,Name,AD_Reference_ID,Value,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Ref_List_UU) VALUES (200470,'PDF',200169,'PDF',0,0,'Y',TO_DATE('2019-05-20 21:32:31','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-05-20 21:32:31','YYYY-MM-DD HH24:MI:SS'),100,'D','303c23cc-5dcf-4f5a-a105-8b62f856165a')
;
-- May 20, 2019, 9:32:32 PM CEST
INSERT INTO AD_Ref_List (AD_Ref_List_ID,Name,AD_Reference_ID,Value,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Ref_List_UU) VALUES (200471,'HTML',200169,'HTML',0,0,'Y',TO_DATE('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,'D','67cf2cdf-75a2-441c-ab33-12033e121e69')
;
-- May 20, 2019, 9:32:32 PM CEST
INSERT INTO AD_Ref_List (AD_Ref_List_ID,Name,AD_Reference_ID,Value,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Ref_List_UU) VALUES (200472,'Excel',200169,'XLS',0,0,'Y',TO_DATE('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,'D','0190b839-041b-43ae-a5f5-a52efb120e9d')
;
-- May 20, 2019, 9:32:33 PM CEST
INSERT INTO AD_Ref_List (AD_Ref_List_ID,Name,AD_Reference_ID,Value,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Ref_List_UU) VALUES (200473,'CSV',200169,'CSV',0,0,'Y',TO_DATE('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,'D','e0aa166a-b354-46d5-8a60-e2e21bf49f44')
;
-- May 20, 2019, 9:32:33 PM CEST
INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Reference_Value_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType) VALUES (213942,1,'Report Output Type',688,'ReportOutputType',4,'N','N','N','N','N',0,'N',17,200169,0,0,'Y',TO_DATE('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,203337,'Y','N','D','Y','N','N','Y','45acf545-7427-4c34-a6a5-c74b10ebb13b','Y',0,'N','N','N')
;
-- May 20, 2019, 9:32:33 PM CEST
ALTER TABLE AD_Scheduler ADD ReportOutputType VARCHAR2(4) DEFAULT NULL
;
-- May 20, 2019, 9:32:33 PM CEST
INSERT INTO AD_Val_Rule (AD_Val_Rule_ID,Name,Type,Code,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Val_Rule_UU) VALUES (200135,'PrintFormat for Process','S','AD_PrintFormat.AD_Table_ID IN (select coalesce(rv.ad_table_id,pp.ad_table_id) from ad_process p left join ad_reportview rv on p.ad_reportview_id=rv.ad_reportview_id left join ad_printformat pp on p.ad_printformat_id=pp.ad_printformat_id where p.ad_process_id=@AD_Process_ID@)',0,0,'Y',TO_DATE('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,'D','5b2362f8-10ed-4b0d-b636-c47b7cd15b78')
;
-- May 20, 2019, 9:32:34 PM CEST
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,Help,AD_Table_ID,AD_Val_Rule_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintName,FKConstraintType) VALUES (213943,0,'Print Format','Data Print Format','The print format determines how data is rendered for print.',688,200135,'AD_PrintFormat_ID',22,'N','N','N','N','N',0,'N',19,0,0,'Y',TO_DATE('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,1790,'Y','N','D','Y','N','N','Y','81d67ace-8a49-403c-bc6f-5604d944cfd8','Y',0,'N','N','ADPrintFormat_ADScheduler','S')
;
-- May 20, 2019, 9:32:34 PM CEST
ALTER TABLE AD_Scheduler ADD AD_PrintFormat_ID NUMBER(10) DEFAULT NULL
;
-- May 20, 2019, 9:32:34 PM CEST
INSERT INTO AD_Field (AD_Field_ID,Name,Description,Help,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLogic,DisplayLength,SeqNo,SortNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan,NumLines,IsQuickEntry,IsDefaultFocus,IsAdvancedField) VALUES (206075,'Print Format','Data Print Format','The print format determines how data is rendered for print.',589,213943,'Y','@AD_Process_ID.IsReport@=Y',0,64,0,'N','N','N','N',0,0,'Y',TO_DATE('2019-05-20 21:32:34','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-05-20 21:32:34','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','bc1c07e4-3306-466c-a14b-144eaf6c900e','Y',64,4,2,1,'N','N','N')
;
-- May 20, 2019, 9:32:34 PM CEST
INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLogic,DisplayLength,SeqNo,SortNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan,NumLines,IsQuickEntry,IsDefaultFocus,IsAdvancedField) VALUES (206076,'Report Output Type',589,213942,'Y','@AD_Process_ID.IsReport@=Y',0,65,0,'N','N','N','N',0,0,'Y',TO_DATE('2019-05-20 21:32:34','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2019-05-20 21:32:34','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','43f6c13e-6eb0-4a22-b293-49f980f40098','Y',65,1,1,1,'N','N','N')
;
-- May 20, 2019, 9:32:35 PM CEST
ALTER TABLE AD_Scheduler ADD CONSTRAINT ADPrintFormat_ADScheduler FOREIGN KEY (AD_PrintFormat_ID) REFERENCES ad_printformat(ad_printformat_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED
;
-- May 21, 2019, 1:03:56 PM CEST
UPDATE AD_SysConfig SET Description='Type of output in zkwebui for reports of type form, possible values are PDF, HTML, XLS, CSV',Updated=TO_DATE('2019-05-21 13:03:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_SysConfig_ID=200002
;
-- May 21, 2019, 1:04:10 PM CEST
UPDATE AD_SysConfig SET Description='Type of output in zkwebui for reports of type table, possible values are PDF, HTML, XLS, CSV',Updated=TO_DATE('2019-05-21 13:04:10','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_SysConfig_ID=200003
;
-- May 21, 2019, 1:04:51 PM CEST
UPDATE AD_SysConfig SET Description='Type of output in zkwebui for jasper reports, possible values are PDF, HTML, XLS, CSV, SSV',Updated=TO_DATE('2019-05-21 13:04:51','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_SysConfig_ID=200030
;
-- May 21, 2019, 2:59:39 PM CEST
UPDATE AD_Field SET DisplayLogic='@AD_Process_ID.IsReport@=Y & @AD_Process_ID.JasperReport=''''', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_DATE('2019-05-21 14:59:39','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206075
;
SELECT register_migration_script('201905202132_IDEMPIERE-2850.sql') FROM dual
;

View File

@ -0,0 +1,76 @@
-- IDEMPIERE-2850
-- May 20, 2019, 9:32:31 PM CEST
INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,PrintName,EntityType,AD_Element_UU) VALUES (203337,0,0,'Y',TO_TIMESTAMP('2019-05-20 21:32:30','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-05-20 21:32:30','YYYY-MM-DD HH24:MI:SS'),100,'ReportOutputType','Report Output Type','Report Output Type','D','cd782f63-e5c5-4f12-8925-4b13733002b8')
;
-- May 20, 2019, 9:32:31 PM CEST
INSERT INTO AD_Reference (AD_Reference_ID,Name,ValidationType,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,IsOrderByValue,AD_Reference_UU) VALUES (200169,'ReportOutputType','L',0,0,'Y',TO_TIMESTAMP('2019-05-20 21:32:31','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-05-20 21:32:31','YYYY-MM-DD HH24:MI:SS'),100,'D','N','b6fc4bb2-ce72-4de3-b753-302da5fd1173')
;
-- May 20, 2019, 9:32:32 PM CEST
INSERT INTO AD_Ref_List (AD_Ref_List_ID,Name,AD_Reference_ID,Value,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Ref_List_UU) VALUES (200470,'PDF',200169,'PDF',0,0,'Y',TO_TIMESTAMP('2019-05-20 21:32:31','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-05-20 21:32:31','YYYY-MM-DD HH24:MI:SS'),100,'D','303c23cc-5dcf-4f5a-a105-8b62f856165a')
;
-- May 20, 2019, 9:32:32 PM CEST
INSERT INTO AD_Ref_List (AD_Ref_List_ID,Name,AD_Reference_ID,Value,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Ref_List_UU) VALUES (200471,'HTML',200169,'HTML',0,0,'Y',TO_TIMESTAMP('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,'D','67cf2cdf-75a2-441c-ab33-12033e121e69')
;
-- May 20, 2019, 9:32:32 PM CEST
INSERT INTO AD_Ref_List (AD_Ref_List_ID,Name,AD_Reference_ID,Value,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Ref_List_UU) VALUES (200472,'Excel',200169,'XLS',0,0,'Y',TO_TIMESTAMP('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,'D','0190b839-041b-43ae-a5f5-a52efb120e9d')
;
-- May 20, 2019, 9:32:33 PM CEST
INSERT INTO AD_Ref_List (AD_Ref_List_ID,Name,AD_Reference_ID,Value,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Ref_List_UU) VALUES (200473,'CSV',200169,'CSV',0,0,'Y',TO_TIMESTAMP('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-05-20 21:32:32','YYYY-MM-DD HH24:MI:SS'),100,'D','e0aa166a-b354-46d5-8a60-e2e21bf49f44')
;
-- May 20, 2019, 9:32:33 PM CEST
INSERT INTO AD_Column (AD_Column_ID,Version,Name,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Reference_Value_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintType) VALUES (213942,1,'Report Output Type',688,'ReportOutputType',4,'N','N','N','N','N',0,'N',17,200169,0,0,'Y',TO_TIMESTAMP('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,203337,'Y','N','D','Y','N','N','Y','45acf545-7427-4c34-a6a5-c74b10ebb13b','Y',0,'N','N','N')
;
-- May 20, 2019, 9:32:33 PM CEST
ALTER TABLE AD_Scheduler ADD COLUMN ReportOutputType VARCHAR(4) DEFAULT NULL
;
-- May 20, 2019, 9:32:33 PM CEST
INSERT INTO AD_Val_Rule (AD_Val_Rule_ID,Name,Type,Code,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Val_Rule_UU) VALUES (200135,'PrintFormat for Process','S','AD_PrintFormat.AD_Table_ID IN (select coalesce(rv.ad_table_id,pp.ad_table_id) from ad_process p left join ad_reportview rv on p.ad_reportview_id=rv.ad_reportview_id left join ad_printformat pp on p.ad_printformat_id=pp.ad_printformat_id where p.ad_process_id=@AD_Process_ID@)',0,0,'Y',TO_TIMESTAMP('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,'D','5b2362f8-10ed-4b0d-b636-c47b7cd15b78')
;
-- May 20, 2019, 9:32:34 PM CEST
INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,Help,AD_Table_ID,AD_Val_Rule_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure,FKConstraintName,FKConstraintType) VALUES (213943,0,'Print Format','Data Print Format','The print format determines how data is rendered for print.',688,200135,'AD_PrintFormat_ID',22,'N','N','N','N','N',0,'N',19,0,0,'Y',TO_TIMESTAMP('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-05-20 21:32:33','YYYY-MM-DD HH24:MI:SS'),100,1790,'Y','N','D','Y','N','N','Y','81d67ace-8a49-403c-bc6f-5604d944cfd8','Y',0,'N','N','ADPrintFormat_ADScheduler','S')
;
-- May 20, 2019, 9:32:34 PM CEST
ALTER TABLE AD_Scheduler ADD COLUMN AD_PrintFormat_ID NUMERIC(10) DEFAULT NULL
;
-- May 20, 2019, 9:32:34 PM CEST
INSERT INTO AD_Field (AD_Field_ID,Name,Description,Help,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLogic,DisplayLength,SeqNo,SortNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan,NumLines,IsQuickEntry,IsDefaultFocus,IsAdvancedField) VALUES (206075,'Print Format','Data Print Format','The print format determines how data is rendered for print.',589,213943,'Y','@AD_Process_ID.IsReport@=Y',0,64,0,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2019-05-20 21:32:34','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-05-20 21:32:34','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','bc1c07e4-3306-466c-a14b-144eaf6c900e','Y',64,4,2,1,'N','N','N')
;
-- May 20, 2019, 9:32:34 PM CEST
INSERT INTO AD_Field (AD_Field_ID,Name,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLogic,DisplayLength,SeqNo,SortNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,XPosition,ColumnSpan,NumLines,IsQuickEntry,IsDefaultFocus,IsAdvancedField) VALUES (206076,'Report Output Type',589,213942,'Y','@AD_Process_ID.IsReport@=Y',0,65,0,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2019-05-20 21:32:34','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2019-05-20 21:32:34','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','43f6c13e-6eb0-4a22-b293-49f980f40098','Y',65,1,1,1,'N','N','N')
;
-- May 20, 2019, 9:32:35 PM CEST
ALTER TABLE AD_Scheduler ADD CONSTRAINT ADPrintFormat_ADScheduler FOREIGN KEY (AD_PrintFormat_ID) REFERENCES ad_printformat(ad_printformat_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED
;
-- May 21, 2019, 1:03:56 PM CEST
UPDATE AD_SysConfig SET Description='Type of output in zkwebui for reports of type form, possible values are PDF, HTML, XLS, CSV',Updated=TO_TIMESTAMP('2019-05-21 13:03:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_SysConfig_ID=200002
;
-- May 21, 2019, 1:04:10 PM CEST
UPDATE AD_SysConfig SET Description='Type of output in zkwebui for reports of type table, possible values are PDF, HTML, XLS, CSV',Updated=TO_TIMESTAMP('2019-05-21 13:04:10','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_SysConfig_ID=200003
;
-- May 21, 2019, 1:04:51 PM CEST
UPDATE AD_SysConfig SET Description='Type of output in zkwebui for jasper reports, possible values are PDF, HTML, XLS, CSV, SSV',Updated=TO_TIMESTAMP('2019-05-21 13:04:51','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_SysConfig_ID=200030
;
-- May 21, 2019, 2:59:39 PM CEST
UPDATE AD_Field SET DisplayLogic='@AD_Process_ID.IsReport@=Y & @AD_Process_ID.JasperReport=''''', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2019-05-21 14:59:39','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=206075
;
SELECT register_migration_script('201905202132_IDEMPIERE-2850.sql') FROM dual
;

View File

@ -62,6 +62,21 @@ public interface I_AD_Scheduler
*/ */
public int getAD_Org_ID(); public int getAD_Org_ID();
/** Column name AD_PrintFormat_ID */
public static final String COLUMNNAME_AD_PrintFormat_ID = "AD_PrintFormat_ID";
/** Set Print Format.
* Data Print Format
*/
public void setAD_PrintFormat_ID (int AD_PrintFormat_ID);
/** Get Print Format.
* Data Print Format
*/
public int getAD_PrintFormat_ID();
public org.compiere.model.I_AD_PrintFormat getAD_PrintFormat() throws RuntimeException;
/** Column name AD_Process_ID */ /** Column name AD_Process_ID */
public static final String COLUMNNAME_AD_Process_ID = "AD_Process_ID"; public static final String COLUMNNAME_AD_Process_ID = "AD_Process_ID";
@ -241,6 +256,15 @@ public interface I_AD_Scheduler
*/ */
public int getRecord_ID(); public int getRecord_ID();
/** Column name ReportOutputType */
public static final String COLUMNNAME_ReportOutputType = "ReportOutputType";
/** Set Report Output Type */
public void setReportOutputType (String ReportOutputType);
/** Get Report Output Type */
public String getReportOutputType();
/** Column name R_MailText_ID */ /** Column name R_MailText_ID */
public static final String COLUMNNAME_R_MailText_ID = "R_MailText_ID"; public static final String COLUMNNAME_R_MailText_ID = "R_MailText_ID";

View File

@ -90,7 +90,8 @@ public class MSchedule extends X_AD_Schedule
public boolean isOKtoRunOnIP() public boolean isOKtoRunOnIP()
{ {
String ipOnly = getRunOnlyOnIP(); String ipOnly = getRunOnlyOnIP();
if ((ipOnly == null) || (ipOnly.length() == 0)) // 0.0.0.0 = all ip address
if ((ipOnly == null) || (ipOnly.length() == 0) || "0.0.0.0".equals(ipOnly))
return true; return true;
StringTokenizer st = new StringTokenizer(ipOnly, ";"); StringTokenizer st = new StringTokenizer(ipOnly, ";");

View File

@ -31,7 +31,7 @@ public class X_AD_Scheduler extends PO implements I_AD_Scheduler, I_Persistent
/** /**
* *
*/ */
private static final long serialVersionUID = 20190106L; private static final long serialVersionUID = 20190521L;
/** Standard Constructor */ /** Standard Constructor */
public X_AD_Scheduler (Properties ctx, int AD_Scheduler_ID, String trxName) public X_AD_Scheduler (Properties ctx, int AD_Scheduler_ID, String trxName)
@ -77,6 +77,34 @@ public class X_AD_Scheduler extends PO implements I_AD_Scheduler, I_Persistent
return sb.toString(); return sb.toString();
} }
public org.compiere.model.I_AD_PrintFormat getAD_PrintFormat() throws RuntimeException
{
return (org.compiere.model.I_AD_PrintFormat)MTable.get(getCtx(), org.compiere.model.I_AD_PrintFormat.Table_Name)
.getPO(getAD_PrintFormat_ID(), get_TrxName()); }
/** Set Print Format.
@param AD_PrintFormat_ID
Data Print Format
*/
public void setAD_PrintFormat_ID (int AD_PrintFormat_ID)
{
if (AD_PrintFormat_ID < 1)
set_Value (COLUMNNAME_AD_PrintFormat_ID, null);
else
set_Value (COLUMNNAME_AD_PrintFormat_ID, Integer.valueOf(AD_PrintFormat_ID));
}
/** Get Print Format.
@return Data Print Format
*/
public int getAD_PrintFormat_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_AD_PrintFormat_ID);
if (ii == null)
return 0;
return ii.intValue();
}
public org.compiere.model.I_AD_Process getAD_Process() throws RuntimeException public org.compiere.model.I_AD_Process getAD_Process() throws RuntimeException
{ {
return (org.compiere.model.I_AD_Process)MTable.get(getCtx(), org.compiere.model.I_AD_Process.Table_Name) return (org.compiere.model.I_AD_Process)MTable.get(getCtx(), org.compiere.model.I_AD_Process.Table_Name)
@ -335,6 +363,31 @@ public class X_AD_Scheduler extends PO implements I_AD_Scheduler, I_Persistent
return ii.intValue(); return ii.intValue();
} }
/** ReportOutputType AD_Reference_ID=200169 */
public static final int REPORTOUTPUTTYPE_AD_Reference_ID=200169;
/** PDF = PDF */
public static final String REPORTOUTPUTTYPE_PDF = "PDF";
/** HTML = HTML */
public static final String REPORTOUTPUTTYPE_HTML = "HTML";
/** Excel = XLS */
public static final String REPORTOUTPUTTYPE_Excel = "XLS";
/** CSV = CSV */
public static final String REPORTOUTPUTTYPE_CSV = "CSV";
/** Set Report Output Type.
@param ReportOutputType Report Output Type */
public void setReportOutputType (String ReportOutputType)
{
set_Value (COLUMNNAME_ReportOutputType, ReportOutputType);
}
/** Get Report Output Type.
@return Report Output Type */
public String getReportOutputType ()
{
return (String)get_Value(COLUMNNAME_ReportOutputType);
}
public org.compiere.model.I_R_MailText getR_MailText() throws RuntimeException public org.compiere.model.I_R_MailText getR_MailText() throws RuntimeException
{ {
return (org.compiere.model.I_R_MailText)MTable.get(getCtx(), org.compiere.model.I_R_MailText.Table_Name) return (org.compiere.model.I_R_MailText)MTable.get(getCtx(), org.compiere.model.I_R_MailText.Table_Name)

View File

@ -866,7 +866,7 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
log.log(Level.SEVERE, "(w)", e); log.log(Level.SEVERE, "(w)", e);
throw new AdempiereException(e); throw new AdempiereException(e);
} }
return false; return true;
} // createHTML } // createHTML
@ -997,8 +997,9 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
catch (Exception e) catch (Exception e)
{ {
log.log(Level.SEVERE, "(w)", e); log.log(Level.SEVERE, "(w)", e);
}
return false; return false;
}
return true;
} // createCSV } // createCSV
/** /**
@ -1103,7 +1104,7 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
try try
{ {
if (file == null) if (file == null)
file = File.createTempFile ("ReportEngine", ".pdf"); file = File.createTempFile (makePrefix(getName()), ".pdf");
} }
catch (IOException e) catch (IOException e)
{ {
@ -1114,6 +1115,106 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
return null; return null;
} // getPDF } // getPDF
/**************************************************************************
* Create HTML file.
* (created in temporary storage)
* @return HTML file
*/
public File getHTML()
{
return getHTML(null);
} // getHTML
/**
* Create HTML file.
* @param file file
* @return HTML file
*/
public File getHTML(File file)
{
try
{
if (file == null)
file = File.createTempFile (makePrefix(getName()), ".html");
}
catch (IOException e)
{
log.log(Level.SEVERE, "", e);
}
if (createHTML(file, false, Env.getLanguage(getCtx())))
return file;
return null;
} // getHTML
/**************************************************************************
* Create CSV file.
* (created in temporary storage)
* @return CSV file
*/
public File getCSV()
{
return getCSV(null);
} // getCSV
/**
* Create CSV file.
* @param file file
* @return CSV file
*/
public File getCSV(File file)
{
try
{
if (file == null)
file = File.createTempFile (makePrefix(getName()), ".csv");
}
catch (IOException e)
{
log.log(Level.SEVERE, "", e);
}
if (createCSV(file, ',', Env.getLanguage(getCtx())))
return file;
return null;
} // getCSV
/**************************************************************************
* Create XLS file.
* (created in temporary storage)
* @return XLS file
*/
public File getXLS()
{
return getXLS(null);
} // getXLS
/**
* Create XLS file.
* @param file file
* @return XLS file
*/
public File getXLS(File file)
{
try
{
if (file == null)
file = File.createTempFile (makePrefix(getName()), ".xls");
}
catch (IOException e)
{
log.log(Level.SEVERE, "", e);
}
try
{
createXLS(file, Env.getLanguage(getCtx()));
return file;
}
catch (Exception e)
{
log.log(Level.SEVERE, "", e);
return null;
}
} // getXLS
/** /**
* Create PDF File * Create PDF File
* @param file file * @param file file
@ -1167,6 +1268,19 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
return file2.exists(); return file2.exists();
} // createPDF } // createPDF
private String makePrefix(String name) {
StringBuilder prefix = new StringBuilder();
char[] nameArray = name.toCharArray();
for (char ch : nameArray) {
if (Character.isLetterOrDigit(ch)) {
prefix.append(ch);
} else {
prefix.append("_");
}
}
return prefix.toString();
}
/** /**
* Create PDF as Data array * Create PDF as Data array
* @return pdf data * @return pdf data

View File

@ -93,9 +93,30 @@ public class ServerReportCtl {
// ================================== // ==================================
{ {
if (pi != null && pi.isBatch() && pi.isPrintPreview()) if (pi != null && pi.isBatch() && pi.isPrintPreview())
{
if ("HTML".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("html");
pi.setExportFile(re.getHTML());
}
else if ("CSV".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("csv");
pi.setExportFile(re.getCSV());
}
else if ("XLS".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("xls");
pi.setExportFile(re.getXLS());
}
else
{ {
pi.setPDFReport(re.getPDF()); pi.setPDFReport(re.getPDF());
} }
}
else else
{ {
createOutput(re, printerName); createOutput(re, printerName);
@ -261,11 +282,32 @@ public class ServerReportCtl {
String TableName = MTable.getTableName(ctx, format.getAD_Table_ID()); String TableName = MTable.getTableName(ctx, format.getAD_Table_ID());
MQuery query = MQuery.get (ctx, pi.getAD_PInstance_ID(), TableName); MQuery query = MQuery.get (ctx, pi.getAD_PInstance_ID(), TableName);
PrintInfo info = new PrintInfo(pi); PrintInfo info = new PrintInfo(pi);
re = new ReportEngine(ctx, format, query, info, pi.getTransactionName()); re = new ReportEngine(ctx, format, query, info, pi.isSummary(), pi.getTransactionName());
if (pi.isPrintPreview() && pi.isBatch()) if (pi.isPrintPreview() && pi.isBatch())
{
if ("HTML".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("html");
pi.setExportFile(re.getHTML());
}
else if ("CSV".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("csv");
pi.setExportFile(re.getCSV());
}
else if ("XLS".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("xls");
pi.setExportFile(re.getXLS());
}
else
{ {
pi.setPDFReport(re.getPDF()); pi.setPDFReport(re.getPDF());
} }
}
else else
{ {
createOutput(re, null); createOutput(re, null);
@ -284,9 +326,30 @@ public class ServerReportCtl {
} }
if (pi.isPrintPreview() && pi.isBatch()) if (pi.isPrintPreview() && pi.isBatch())
{
if ("HTML".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("html");
pi.setExportFile(re.getHTML());
}
else if ("CSV".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("csv");
pi.setExportFile(re.getCSV());
}
else if ("XLS".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("xls");
pi.setExportFile(re.getXLS());
}
else
{ {
pi.setPDFReport(re.getPDF()); pi.setPDFReport(re.getPDF());
} }
}
else else
{ {
createOutput(re, null); createOutput(re, null);
@ -321,9 +384,30 @@ public class ServerReportCtl {
ReportEngine re = new ReportEngine(Env.getCtx(), format, query, info); ReportEngine re = new ReportEngine(Env.getCtx(), format, query, info);
if (pi.isPrintPreview() && pi.isBatch()) if (pi.isPrintPreview() && pi.isBatch())
{
if ("HTML".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("html");
pi.setExportFile(re.getHTML());
}
else if ("CSV".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("csv");
pi.setExportFile(re.getCSV());
}
else if ("XLS".equals(pi.getReportType()))
{
pi.setExport(true);
pi.setExportFileExtension("xls");
pi.setExportFile(re.getXLS());
}
else
{ {
pi.setPDFReport(re.getPDF()); pi.setPDFReport(re.getPDF());
} }
}
else else
{ {
createOutput(re, null); createOutput(re, null);

View File

@ -173,6 +173,7 @@ public class ProcessInfo implements Serializable
} }
public void setReportType(String reportType) { public void setReportType(String reportType) {
if (!Util.isEmpty(reportType))
this.reportType = reportType; this.reportType = reportType;
} }

View File

@ -346,9 +346,15 @@ public class FinReport extends SvrProcess
// Create Report // Create Report
if (Ini.isClient()) if (Ini.isClient())
{
if (getProcessInfo().getTransientObject() == null)
getProcessInfo().setTransientObject (getPrintFormat()); getProcessInfo().setTransientObject (getPrintFormat());
}
else else
{
if (getProcessInfo().getSerializableObject() == null)
getProcessInfo().setSerializableObject(getPrintFormat()); getProcessInfo().setSerializableObject(getPrintFormat());
}
if (log.isLoggable(Level.FINE)) log.fine((System.currentTimeMillis() - m_start) + " ms"); if (log.isLoggable(Level.FINE)) log.fine((System.currentTimeMillis() - m_start) + " ms");
return ""; return "";

View File

@ -108,13 +108,14 @@ import net.sf.jasperreports.export.ExporterOutput;
import net.sf.jasperreports.export.SimpleCsvExporterConfiguration; import net.sf.jasperreports.export.SimpleCsvExporterConfiguration;
import net.sf.jasperreports.export.SimpleExporterConfiguration; import net.sf.jasperreports.export.SimpleExporterConfiguration;
import net.sf.jasperreports.export.SimpleExporterInput; import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleHtmlExporterConfiguration; import net.sf.jasperreports.export.SimpleHtmlExporterOutput;
import net.sf.jasperreports.export.SimpleHtmlReportConfiguration;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput; import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
import net.sf.jasperreports.export.SimplePdfExporterConfiguration; import net.sf.jasperreports.export.SimplePdfExporterConfiguration;
import net.sf.jasperreports.export.SimplePrintServiceExporterConfiguration; import net.sf.jasperreports.export.SimplePrintServiceExporterConfiguration;
import net.sf.jasperreports.export.SimpleTextExporterConfiguration; import net.sf.jasperreports.export.SimpleTextExporterConfiguration;
import net.sf.jasperreports.export.SimpleWriterExporterOutput; import net.sf.jasperreports.export.SimpleWriterExporterOutput;
import net.sf.jasperreports.export.SimpleXlsExporterConfiguration; import net.sf.jasperreports.export.SimpleXlsReportConfiguration;
import net.sf.jasperreports.export.SimpleXmlExporterOutput; import net.sf.jasperreports.export.SimpleXmlExporterOutput;
/** /**
@ -724,6 +725,9 @@ public class ReportStarter implements ProcessCall, ClientProcess
if (reportPathList.length == 1) { if (reportPathList.length == 1) {
if (log.isLoggable(Level.INFO)) log.info( "ReportStarter.startProcess run report -"+jasperPrint.getName()); if (log.isLoggable(Level.INFO)) log.info( "ReportStarter.startProcess run report -"+jasperPrint.getName());
JRViewerProvider viewerLauncher = Service.locator().locate(JRViewerProvider.class).getService(); JRViewerProvider viewerLauncher = Service.locator().locate(JRViewerProvider.class).getService();
if (!Util.isEmpty(processInfo.getReportType())) {
jasperPrint.setProperty("IDEMPIERE_REPORT_TYPE", processInfo.getReportType());
}
viewerLauncher.openViewer(jasperPrint, pi.getTitle()); viewerLauncher.openViewer(jasperPrint, pi.getTitle());
} else { } else {
jasperPrintList.add(jasperPrint); jasperPrintList.add(jasperPrint);
@ -785,17 +789,25 @@ public class ReportStarter implements ProcessCall, ClientProcess
JRTextExporter export = new JRTextExporter(jasperContext); JRTextExporter export = new JRTextExporter(jasperContext);
SimpleTextExporterConfiguration config = new SimpleTextExporterConfiguration(); SimpleTextExporterConfiguration config = new SimpleTextExporterConfiguration();
export.setConfiguration(config); export.setConfiguration(config);
export.setExporterOutput(new SimpleWriterExporterOutput(strm));
exporter = export; exporter = export;
} else if (ext.equals("html") || ext.equals("htm")) { } else if (ext.equals("html") || ext.equals("htm")) {
HtmlExporter export = new HtmlExporter(jasperContext); HtmlExporter exporterHTML = new HtmlExporter();
SimpleHtmlExporterConfiguration config = new SimpleHtmlExporterConfiguration(); SimpleHtmlReportConfiguration htmlConfig = new SimpleHtmlReportConfiguration();
export.setConfiguration(config); htmlConfig.setEmbedImage(true);
exporter = export; htmlConfig.setAccessibleHtml(true);
exporterHTML.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList));
exporterHTML.setExporterOutput(new SimpleHtmlExporterOutput(file));
exporterHTML.setConfiguration(htmlConfig);
exporter = exporterHTML;
} else if (ext.equals("xls")) { } else if (ext.equals("xls")) {
JRXlsExporter export = new JRXlsExporter(jasperContext); JRXlsExporter exporterXLS = new JRXlsExporter(jasperContext);
SimpleXlsExporterConfiguration config = new SimpleXlsExporterConfiguration(); SimpleXlsReportConfiguration xlsConfig = new SimpleXlsReportConfiguration();
export.setConfiguration(config); xlsConfig.setOnePagePerSheet(false);
exporter = export; exporterXLS.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList));
exporterXLS.setExporterOutput(new SimpleOutputStreamExporterOutput(strm));
exporterXLS.setConfiguration(xlsConfig);
exporter = exporterXLS;
} else { } else {
log.severe("FileInvalidExtension="+ext); log.severe("FileInvalidExtension="+ext);
strm.close(); strm.close();

View File

@ -43,6 +43,7 @@ import org.compiere.model.MScheduler;
import org.compiere.model.MSchedulerLog; import org.compiere.model.MSchedulerLog;
import org.compiere.model.MSchedulerPara; import org.compiere.model.MSchedulerPara;
import org.compiere.model.MUser; import org.compiere.model.MUser;
import org.compiere.print.MPrintFormat;
import org.compiere.process.ProcessInfo; import org.compiere.process.ProcessInfo;
import org.compiere.process.ProcessInfoUtil; import org.compiere.process.ProcessInfoUtil;
import org.compiere.process.ServerProcessCtl; import org.compiere.process.ServerProcessCtl;
@ -91,16 +92,17 @@ public class Scheduler extends AdempiereServer
*/ */
protected void doWork () protected void doWork ()
{ {
m_summary = new StringBuffer(get(getCtx(), AD_Scheduler_ID).toString()) MScheduler scheduler = get(getCtx(), AD_Scheduler_ID);
m_summary = new StringBuffer(scheduler.toString())
.append(" - "); .append(" - ");
// Prepare a ctx for the report/process - BF [1966880] // Prepare a ctx for the report/process - BF [1966880]
MClient schedclient = MClient.get(getCtx(), get(getCtx(), AD_Scheduler_ID).getAD_Client_ID()); MClient schedclient = MClient.get(getCtx(), scheduler.getAD_Client_ID());
Env.setContext(getCtx(), "#AD_Client_ID", schedclient.getAD_Client_ID()); Env.setContext(getCtx(), "#AD_Client_ID", schedclient.getAD_Client_ID());
Env.setContext(getCtx(), "#AD_Language", schedclient.getAD_Language()); Env.setContext(getCtx(), "#AD_Language", schedclient.getAD_Language());
Env.setContext(getCtx(), "#AD_Org_ID", get(getCtx(), AD_Scheduler_ID).getAD_Org_ID()); Env.setContext(getCtx(), "#AD_Org_ID", scheduler.getAD_Org_ID());
if (get(getCtx(), AD_Scheduler_ID).getAD_Org_ID() != 0) { if (scheduler.getAD_Org_ID() != 0) {
MOrgInfo schedorg = MOrgInfo.get(getCtx(), get(getCtx(), AD_Scheduler_ID).getAD_Org_ID(), null); MOrgInfo schedorg = MOrgInfo.get(getCtx(), scheduler.getAD_Org_ID(), null);
if (schedorg.getM_Warehouse_ID() > 0) if (schedorg.getM_Warehouse_ID() > 0)
Env.setContext(getCtx(), "#M_Warehouse_ID", schedorg.getM_Warehouse_ID()); Env.setContext(getCtx(), "#M_Warehouse_ID", schedorg.getM_Warehouse_ID());
} }
@ -108,14 +110,14 @@ public class Scheduler extends AdempiereServer
Env.setContext(getCtx(), "#SalesRep_ID", getAD_User_ID()); Env.setContext(getCtx(), "#SalesRep_ID", getAD_User_ID());
// TODO: It can be convenient to add AD_Scheduler.AD_Role_ID // TODO: It can be convenient to add AD_Scheduler.AD_Role_ID
MUser scheduser = MUser.get(getCtx(), getAD_User_ID()); MUser scheduser = MUser.get(getCtx(), getAD_User_ID());
MRole[] schedroles = scheduser.getRoles(get(getCtx(), AD_Scheduler_ID).getAD_Org_ID()); MRole[] schedroles = scheduser.getRoles(scheduler.getAD_Org_ID());
if (schedroles != null && schedroles.length > 0) if (schedroles != null && schedroles.length > 0)
Env.setContext(getCtx(), "#AD_Role_ID", schedroles[0].getAD_Role_ID()); // first role, ordered by AD_Role_ID Env.setContext(getCtx(), "#AD_Role_ID", schedroles[0].getAD_Role_ID()); // first role, ordered by AD_Role_ID
Timestamp ts = new Timestamp(System.currentTimeMillis()); Timestamp ts = new Timestamp(System.currentTimeMillis());
SimpleDateFormat dateFormat4Timestamp = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat dateFormat4Timestamp = new SimpleDateFormat("yyyy-MM-dd");
Env.setContext(getCtx(), "#Date", dateFormat4Timestamp.format(ts)+" 00:00:00" ); // JDBC format Env.setContext(getCtx(), "#Date", dateFormat4Timestamp.format(ts)+" 00:00:00" ); // JDBC format
MProcess process = new MProcess(getCtx(), get(getCtx(), AD_Scheduler_ID).getAD_Process_ID(), null); MProcess process = new MProcess(getCtx(), scheduler.getAD_Process_ID(), null);
try try
{ {
m_trx = Trx.get(Trx.createTrxName("Scheduler"), true); m_trx = Trx.get(Trx.createTrxName("Scheduler"), true);
@ -137,10 +139,10 @@ public class Scheduler extends AdempiereServer
} }
// //
int no = get(getCtx(), AD_Scheduler_ID).deleteLog(); int no = scheduler.deleteLog();
m_summary.append(" Logs deleted=").append(no); m_summary.append(" Logs deleted=").append(no);
// //
MSchedulerLog pLog = new MSchedulerLog(get(getCtx(), AD_Scheduler_ID), m_summary.toString()); MSchedulerLog pLog = new MSchedulerLog(scheduler, m_summary.toString());
pLog.setReference("#" + String.valueOf(p_runCount) pLog.setReference("#" + String.valueOf(p_runCount)
+ " - " + TimeUtil.formatElapsed(new Timestamp(p_startWork))); + " - " + TimeUtil.formatElapsed(new Timestamp(p_startWork)));
pLog.saveEx(); pLog.saveEx();
@ -155,32 +157,52 @@ public class Scheduler extends AdempiereServer
protected String runProcess(MProcess process) throws Exception protected String runProcess(MProcess process) throws Exception
{ {
if (log.isLoggable(Level.INFO)) log.info(process.toString()); if (log.isLoggable(Level.INFO)) log.info(process.toString());
MScheduler scheduler = get(getCtx(), AD_Scheduler_ID);
boolean isReport = (process.isReport() || process.getAD_ReportView_ID() > 0 || process.getJasperReport() != null || process.getAD_PrintFormat_ID() > 0); boolean isReport = (process.isReport() || process.getAD_ReportView_ID() > 0 || process.getJasperReport() != null || process.getAD_PrintFormat_ID() > 0);
String schedulerName = Env.parseContext(getCtx(), -1, get(getCtx(), AD_Scheduler_ID).getName(), false, true); String schedulerName = Env.parseContext(getCtx(), -1, scheduler.getName(), false, true);
// Process (see also MWFActivity.performWork // Process (see also MWFActivity.performWork
int AD_Table_ID = get(getCtx(), AD_Scheduler_ID).getAD_Table_ID(); int AD_Table_ID = scheduler.getAD_Table_ID();
int Record_ID = get(getCtx(), AD_Scheduler_ID).getRecord_ID(); int Record_ID = scheduler.getRecord_ID();
// //
MPInstance pInstance = new MPInstance(process, Record_ID); MPInstance pInstance = new MPInstance(process, Record_ID);
fillParameter(pInstance); fillParameter(pInstance);
// //
ProcessInfo pi = new ProcessInfo (process.getName(), process.getAD_Process_ID(), AD_Table_ID, Record_ID); ProcessInfo pi = new ProcessInfo (process.getName(), process.getAD_Process_ID(), AD_Table_ID, Record_ID);
pi.setAD_User_ID(getAD_User_ID()); pi.setAD_User_ID(getAD_User_ID());
pi.setAD_Client_ID(get(getCtx(), AD_Scheduler_ID).getAD_Client_ID()); pi.setAD_Client_ID(scheduler.getAD_Client_ID());
pi.setAD_PInstance_ID(pInstance.getAD_PInstance_ID()); pi.setAD_PInstance_ID(pInstance.getAD_PInstance_ID());
pi.setAD_Process_UU(process.getAD_Process_UU()); pi.setAD_Process_UU(process.getAD_Process_UU());
pi.setIsBatch(true); pi.setIsBatch(true);
pi.setPrintPreview(true); pi.setPrintPreview(true);
pi.setReportType(scheduler.getReportOutputType());
int AD_PrintFormat_ID = scheduler.getAD_PrintFormat_ID();
if (AD_PrintFormat_ID > 0)
{
MPrintFormat format = new MPrintFormat(Env.getCtx(), AD_PrintFormat_ID, null);
pi.setSerializableObject(format);
}
MUser from = new MUser(getCtx(), pi.getAD_User_ID(), null); MUser from = new MUser(getCtx(), pi.getAD_User_ID(), null);
pi.setTransactionName(m_trx != null ? m_trx.getTrxName() : null); pi.setTransactionName(m_trx != null ? m_trx.getTrxName() : null);
if (!Util.isEmpty(process.getJasperReport()))
{
pi.setExport(true);
if ("HTML".equals(pi.getReportType()))
pi.setExportFileExtension("html");
else if ("CSV".equals(pi.getReportType()))
pi.setExportFileExtension("csv");
else if ("XLS".equals(pi.getReportType()))
pi.setExportFileExtension("xls");
else
pi.setExportFileExtension("pdf");
}
ServerProcessCtl.process(pi, m_trx); ServerProcessCtl.process(pi, m_trx);
if ( pi.isError() ) // note, this call close the transaction, don't use m_trx below if ( pi.isError() ) // note, this call close the transaction, don't use m_trx below
{ {
// notify supervisor if error // notify supervisor if error
int supervisor = get(getCtx(), AD_Scheduler_ID).getSupervisor_ID(); int supervisor = scheduler.getSupervisor_ID();
if (supervisor > 0) if (supervisor > 0)
{ {
MUser user = new MUser(getCtx(), supervisor, null); MUser user = new MUser(getCtx(), supervisor, null);
@ -192,20 +214,20 @@ public class Scheduler extends AdempiereServer
if (email) if (email)
{ {
MClient client = MClient.get(get(getCtx(), AD_Scheduler_ID).getCtx(), get(getCtx(), AD_Scheduler_ID).getAD_Client_ID()); MClient client = MClient.get(scheduler.getCtx(), scheduler.getAD_Client_ID());
client.sendEMail(from, user, schedulerName, pi.getSummary() + " " + pi.getLogInfo(), null); client.sendEMail(from, user, schedulerName, pi.getSummary() + " " + pi.getLogInfo(), null);
} }
if (notice) { if (notice) {
int AD_Message_ID = 442; // HARDCODED ProcessRunError int AD_Message_ID = 442; // HARDCODED ProcessRunError
MNote note = new MNote(getCtx(), AD_Message_ID, supervisor, null); MNote note = new MNote(getCtx(), AD_Message_ID, supervisor, null);
note.setClientOrg(get(getCtx(), AD_Scheduler_ID).getAD_Client_ID(), get(getCtx(), AD_Scheduler_ID).getAD_Org_ID()); note.setClientOrg(scheduler.getAD_Client_ID(), scheduler.getAD_Org_ID());
note.setTextMsg(schedulerName+"\n"+pi.getSummary()); note.setTextMsg(schedulerName+"\n"+pi.getSummary());
note.setRecord(MPInstance.Table_ID, pi.getAD_PInstance_ID()); note.setRecord(MPInstance.Table_ID, pi.getAD_PInstance_ID());
note.saveEx(); note.saveEx();
String log = pi.getLogInfo(true); String log = pi.getLogInfo(true);
if (log != null && log.trim().length() > 0) { if (log != null && log.trim().length() > 0) {
MAttachment attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null); MAttachment attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null);
attachment.setClientOrg(get(getCtx(), AD_Scheduler_ID).getAD_Client_ID(), get(getCtx(), AD_Scheduler_ID).getAD_Org_ID()); attachment.setClientOrg(scheduler.getAD_Client_ID(), scheduler.getAD_Org_ID());
attachment.setTextMsg(schedulerName); attachment.setTextMsg(schedulerName);
attachment.addEntry("ProcessLog.html", log.getBytes("UTF-8")); attachment.addEntry("ProcessLog.html", log.getBytes("UTF-8"));
attachment.saveEx(); attachment.saveEx();
@ -215,12 +237,12 @@ public class Scheduler extends AdempiereServer
} }
// always notify recipients // always notify recipients
Integer[] userIDs = get(getCtx(), AD_Scheduler_ID).getRecipientAD_User_IDs(); Integer[] userIDs = scheduler.getRecipientAD_User_IDs();
if (userIDs.length > 0) if (userIDs.length > 0)
{ {
ProcessInfoUtil.setLogFromDB(pi); ProcessInfoUtil.setLogFromDB(pi);
List<File> fileList = new ArrayList<File>(); List<File> fileList = new ArrayList<File>();
if (isReport) { if (isReport && pi.getPDFReport() != null) {
fileList.add(pi.getPDFReport()); fileList.add(pi.getPDFReport());
} }
if (pi.isExport() && pi.getExportFile() != null) if (pi.isExport() && pi.getExportFile() != null)
@ -239,10 +261,10 @@ public class Scheduler extends AdempiereServer
if (isReport) if (isReport)
AD_Message_ID = 884; // HARDCODED SchedulerResult AD_Message_ID = 884; // HARDCODED SchedulerResult
MNote note = new MNote(getCtx(), AD_Message_ID, userIDs[i].intValue(), null); MNote note = new MNote(getCtx(), AD_Message_ID, userIDs[i].intValue(), null);
note.setClientOrg(get(getCtx(), AD_Scheduler_ID).getAD_Client_ID(), get(getCtx(), AD_Scheduler_ID).getAD_Org_ID()); note.setClientOrg(scheduler.getAD_Client_ID(), scheduler.getAD_Org_ID());
if (isReport) { if (isReport) {
note.setTextMsg(schedulerName); note.setTextMsg(schedulerName);
note.setDescription(get(getCtx(), AD_Scheduler_ID).getDescription()); note.setDescription(scheduler.getDescription());
note.setRecord(AD_Table_ID, Record_ID); note.setRecord(AD_Table_ID, Record_ID);
} else { } else {
note.setTextMsg(schedulerName + "\n" + pi.getSummary()); note.setTextMsg(schedulerName + "\n" + pi.getSummary());
@ -253,7 +275,7 @@ public class Scheduler extends AdempiereServer
if (fileList != null && !fileList.isEmpty()) { if (fileList != null && !fileList.isEmpty()) {
// Attachment // Attachment
attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null); attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null);
attachment.setClientOrg(get(getCtx(), AD_Scheduler_ID).getAD_Client_ID(), get(getCtx(), AD_Scheduler_ID).getAD_Org_ID()); attachment.setClientOrg(scheduler.getAD_Client_ID(), scheduler.getAD_Org_ID());
attachment.setTextMsg(schedulerName); attachment.setTextMsg(schedulerName);
for (File entry : fileList) for (File entry : fileList)
attachment.addEntry(entry); attachment.addEntry(entry);
@ -263,7 +285,7 @@ public class Scheduler extends AdempiereServer
if (log != null && log.trim().length() > 0) { if (log != null && log.trim().length() > 0) {
if (attachment == null) { if (attachment == null) {
attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null); attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null);
attachment.setClientOrg(get(getCtx(), AD_Scheduler_ID).getAD_Client_ID(), get(getCtx(), AD_Scheduler_ID).getAD_Org_ID()); attachment.setClientOrg(scheduler.getAD_Client_ID(), scheduler.getAD_Org_ID());
attachment.setTextMsg(schedulerName); attachment.setTextMsg(schedulerName);
} }
attachment.addEntry("ProcessLog.html", log.getBytes("UTF-8")); attachment.addEntry("ProcessLog.html", log.getBytes("UTF-8"));
@ -276,11 +298,11 @@ public class Scheduler extends AdempiereServer
if (email) if (email)
{ {
MMailText mailTemplate = new MMailText(getCtx(), get(getCtx(), AD_Scheduler_ID).getR_MailText_ID(), null); MMailText mailTemplate = new MMailText(getCtx(), scheduler.getR_MailText_ID(), null);
String mailContent = ""; String mailContent = "";
if (mailTemplate.is_new()){ if (mailTemplate.is_new()){
mailContent = get(getCtx(), AD_Scheduler_ID).getDescription(); mailContent = scheduler.getDescription();
}else{ }else{
mailTemplate.setUser(user); mailTemplate.setUser(user);
mailTemplate.setLanguage(Env.getContext(getCtx(), "#AD_Language")); mailTemplate.setLanguage(Env.getContext(getCtx(), "#AD_Language"));
@ -289,7 +311,7 @@ public class Scheduler extends AdempiereServer
schedulerName = mailTemplate.getMailHeader(); schedulerName = mailTemplate.getMailHeader();
} }
MClient client = MClient.get(get(getCtx(), AD_Scheduler_ID).getCtx(), get(getCtx(), AD_Scheduler_ID).getAD_Client_ID()); MClient client = MClient.get(scheduler.getCtx(), scheduler.getAD_Client_ID());
if (fileList != null && !fileList.isEmpty()) { if (fileList != null && !fileList.isEmpty()) {
client.sendEMailAttachments(from, user, schedulerName, mailContent, fileList); client.sendEMailAttachments(from, user, schedulerName, mailContent, fileList);
} else { } else {
@ -312,13 +334,14 @@ public class Scheduler extends AdempiereServer
} // runProcess } // runProcess
protected int getAD_User_ID() { protected int getAD_User_ID() {
MScheduler scheduler = get(getCtx(), AD_Scheduler_ID);
int AD_User_ID; int AD_User_ID;
if (get(getCtx(), AD_Scheduler_ID).getSupervisor_ID() > 0) if (scheduler.getSupervisor_ID() > 0)
AD_User_ID = get(getCtx(), AD_Scheduler_ID).getSupervisor_ID(); AD_User_ID = scheduler.getSupervisor_ID();
else if (get(getCtx(), AD_Scheduler_ID).getCreatedBy() > 0) else if (scheduler.getCreatedBy() > 0)
AD_User_ID = get(getCtx(), AD_Scheduler_ID).getCreatedBy(); AD_User_ID = scheduler.getCreatedBy();
else if (get(getCtx(), AD_Scheduler_ID).getUpdatedBy() > 0) else if (scheduler.getUpdatedBy() > 0)
AD_User_ID = get(getCtx(), AD_Scheduler_ID).getUpdatedBy(); AD_User_ID = scheduler.getUpdatedBy();
else else
AD_User_ID = 100; //fall back to SuperUser AD_User_ID = 100; //fall back to SuperUser
return AD_User_ID; return AD_User_ID;

View File

@ -66,7 +66,6 @@ import org.compiere.model.MPInstancePara;
import org.compiere.model.MProcess; import org.compiere.model.MProcess;
import org.compiere.model.MRole; import org.compiere.model.MRole;
import org.compiere.model.MSysConfig; import org.compiere.model.MSysConfig;
import org.compiere.model.MTable;
import org.compiere.model.MUser; import org.compiere.model.MUser;
import org.compiere.model.Query; import org.compiere.model.Query;
import org.compiere.model.X_AD_ReportView; import org.compiere.model.X_AD_ReportView;
@ -103,7 +102,7 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
/** /**
* *
*/ */
private static final long serialVersionUID = 2821858988648268894L; private static final long serialVersionUID = 8232462327114180974L;
private static final String ON_COMPLETE = "onComplete"; private static final String ON_COMPLETE = "onComplete";
private static final String ON_STATUS_UPDATE = "onStatusUpdate"; private static final String ON_STATUS_UPDATE = "onStatusUpdate";
@ -258,9 +257,9 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
protected HtmlBasedComponent topParameterLayout; protected HtmlBasedComponent topParameterLayout;
protected HtmlBasedComponent bottomParameterLayout; protected HtmlBasedComponent bottomParameterLayout;
protected HtmlBasedComponent mainParameterLayout; protected HtmlBasedComponent mainParameterLayout;
private WTableDirEditor fPrintFormat; protected WTableDirEditor fPrintFormat;
private WEditor fLanguageType; private WEditor fLanguageType;
private Listbox freportType; protected Listbox freportType;
private Checkbox chbIsSummary; private Checkbox chbIsSummary;
protected Button bOK; protected Button bOK;
protected Button bCancel; protected Button bCancel;
@ -410,7 +409,7 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
} }
protected void reportOptionLayout(HtmlBasedComponent bottomParameterLayout) { protected void reportOptionLayout(HtmlBasedComponent bottomParameterLayout) {
if (!isReport()) if (!isReport() && !isJasperReport())
return;//if not a report not need show this pannel return;//if not a report not need show this pannel
// option control // option control
@ -419,14 +418,22 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
reportOptionLayout.setValign("middle"); reportOptionLayout.setValign("middle");
bottomParameterLayout.appendChild(reportOptionLayout); bottomParameterLayout.appendChild(reportOptionLayout);
Label lreportType = new Label(Msg.translate(Env.getCtx(), "view.report"));
lreportType.setSclass("option-input-parameter view-report-label");
freportType = new Listbox(); freportType = new Listbox();
freportType.setSclass("option-input-parameter view-report-list"); freportType.setSclass("option-input-parameter view-report-list");
reportOptionLayout.appendChild(lreportType);
reportOptionLayout.appendChild(freportType);
if (isJasperReport())
listReportTypeJasper();
if (!isReport())
return;
chbIsSummary = new Checkbox(); chbIsSummary = new Checkbox();
chbIsSummary.setSclass("option-input-parameter"); chbIsSummary.setSclass("option-input-parameter");
Label lPrintFormat = new Label(Msg.translate(Env.getCtx(), "AD_PrintFormat_ID")); Label lPrintFormat = new Label(Msg.translate(Env.getCtx(), "AD_PrintFormat_ID"));
lPrintFormat.setSclass("option-input-parameter print-format-label"); lPrintFormat.setSclass("option-input-parameter print-format-label");
Label lreportType = new Label(Msg.translate(Env.getCtx(), "view.report"));
lreportType.setSclass("option-input-parameter view-report-label");
Label lIsSummary = new Label(Msg.translate(Env.getCtx(), "Summary")); Label lIsSummary = new Label(Msg.translate(Env.getCtx(), "Summary"));
lIsSummary.setSclass("option-input-parameter"); lIsSummary.setSclass("option-input-parameter");
@ -443,8 +450,6 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
} }
fPrintFormat.getComponent().setSclass("option-input-parameter print-format-list"); fPrintFormat.getComponent().setSclass("option-input-parameter print-format-list");
fPrintFormat.getComponent().setPlaceholder(lPrintFormat.getValue()); fPrintFormat.getComponent().setPlaceholder(lPrintFormat.getValue());
reportOptionLayout.appendChild(lreportType);
reportOptionLayout.appendChild(freportType);
reportOptionLayout.appendChild(lIsSummary); reportOptionLayout.appendChild(lIsSummary);
reportOptionLayout.appendChild(chbIsSummary); reportOptionLayout.appendChild(chbIsSummary);
} }
@ -452,7 +457,11 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
protected boolean isReport () { protected boolean isReport () {
MProcess pr = new MProcess(m_ctx, m_AD_Process_ID, null); MProcess pr = new MProcess(m_ctx, m_AD_Process_ID, null);
return pr.isReport() && pr.getJasperReport() == null; return pr.isReport() && pr.getJasperReport() == null;
}
protected boolean isJasperReport () {
MProcess pr = new MProcess(m_ctx, m_AD_Process_ID, null);
return pr.isReport() && pr.getJasperReport() != null;
} }
protected void savePrameterLayout(HtmlBasedComponent bottomParameterLayout) { protected void savePrameterLayout(HtmlBasedComponent bottomParameterLayout) {
@ -566,23 +575,41 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
log.log(Level.SEVERE, e.getLocalizedMessage()); log.log(Level.SEVERE, e.getLocalizedMessage());
} }
fillReportType(m_isCanExport);
setReportTypeAndPrintFormat(getLastRun());
}
private void listReportTypeJasper()
{
boolean m_isCanExport = MRole.getDefault().isCanExport();
fillReportType(m_isCanExport);
setReportTypeAndPrintFormat(getLastRun());
}
private MPInstance getLastRun() {
final String where = "AD_Process_ID = ? AND AD_User_ID = ? AND Name IS NULL ";
return new Query(Env.getCtx(), MPInstance.Table_Name, where, null)
.setOnlyActiveRecords(true).setClient_ID()
.setParameters(m_AD_Process_ID, Env.getContextAsInt(Env.getCtx(), "#AD_User_ID"))
.setOrderBy("Created DESC")
.first();
}
private void fillReportType(boolean m_isCanExport) {
freportType.removeAllItems(); freportType.removeAllItems();
freportType.setMold("select"); freportType.setMold("select");
freportType.appendItem("", "");
freportType.appendItem("PDF", "PDF");
freportType.appendItem("HTML", "HTML"); freportType.appendItem("HTML", "HTML");
if (m_isCanExport) if (m_isCanExport)
{ {
freportType.appendItem("PDF", "PDF");
freportType.appendItem("Excel", "XLS"); freportType.appendItem("Excel", "XLS");
freportType.appendItem("CSV", "CSV");
} }
freportType.setSelectedIndex(-1); freportType.setSelectedIndex(-1);
String where = "AD_Process_ID = ? AND AD_User_ID = ? AND Name IS NULL ";
MPInstance lastrun = MTable.get(Env.getCtx(), MPInstance.Table_Name).createQuery(where, null).setOnlyActiveRecords(true).setClient_ID()
.setParameters(m_AD_Process_ID, Env.getContextAsInt(Env.getCtx(), "#AD_User_ID")).setOrderBy("Created DESC").first();
setReportTypeAndPrintFormat(lastrun);
} }
private void setReportTypeAndPrintFormat(MPInstance instance) private void setReportTypeAndPrintFormat(MPInstance instance)
@ -607,12 +634,15 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
} }
protected void saveReportOption (){ protected void saveReportOption (){
if (!isReport()){ if (!isReport() && !isJasperReport()){
return; return;
} }
if(freportType.getSelectedItem() != null) { if(freportType.getSelectedItem() != null) {
getProcessInfo().setReportType(freportType.getSelectedItem().getValue().toString()); getProcessInfo().setReportType(freportType.getSelectedItem().getValue().toString());
} }
if (!isReport()){
return;
}
if(fPrintFormat != null && fPrintFormat.getValue() != null) { if(fPrintFormat != null && fPrintFormat.getValue() != null) {
MPrintFormat format = new MPrintFormat(m_ctx, (Integer) fPrintFormat.getValue(), null); MPrintFormat format = new MPrintFormat(m_ctx, (Integer) fPrintFormat.getValue(), null);
if (format != null) { if (format != null) {
@ -709,9 +739,14 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
} }
protected void saveReportOptionToInstance (MPInstance instance){ protected void saveReportOptionToInstance (MPInstance instance){
if (!isReport()) if (!isReport() && !isJasperReport())
return; return;
if (freportType.getSelectedItem() != null)
instance.setReportType(freportType.getSelectedItem().getValue().toString());
if (!isReport())
return;
Object value = fPrintFormat.getValue(); Object value = fPrintFormat.getValue();
if (value == null){ if (value == null){
instance.setAD_PrintFormat_ID(0); instance.setAD_PrintFormat_ID(0);
@ -728,7 +763,6 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
} }
} }
instance.setReportType(freportType.getSelectedItem().getValue().toString());
instance.setIsSummary(chbIsSummary.isSelected()); instance.setIsSummary(chbIsSummary.isSelected());
} }
@ -874,6 +908,12 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
instance.setIsRunAsJob(true); instance.setIsRunAsJob(true);
instance.setIsProcessing(true); instance.setIsProcessing(true);
instance.setNotificationType(getNotificationType()); instance.setNotificationType(getNotificationType());
instance.setReportType(m_pi.getReportType());
instance.setIsSummary(m_pi.isSummary());
instance.setAD_Language_ID(m_pi.getLanguageID());
if (m_pi.getSerializableObject() != null && m_pi.getSerializableObject() instanceof MPrintFormat) {
instance.setAD_PrintFormat_ID(((MPrintFormat)m_pi.getSerializableObject()).getAD_PrintFormat_ID());
}
instance.saveEx(); instance.saveEx();
m_pi.setAD_PInstance_ID(instance.getAD_PInstance_ID()); m_pi.setAD_PInstance_ID(instance.getAD_PInstance_ID());
@ -1154,15 +1194,27 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI
int AD_User_ID = Env.getAD_User_ID(m_ctx); int AD_User_ID = Env.getAD_User_ID(m_ctx);
try { try {
m_pi.setSummary(""); // reset summary
MProcess process = new MProcess(m_ctx, m_pi.getAD_Process_ID(), null); MProcess process = new MProcess(m_ctx, m_pi.getAD_Process_ID(), null);
if (process.isReport() && process.getJasperReport() != null) {
if (!Util.isEmpty(process.getJasperReport()))
{
m_pi.setExport(true);
if ("HTML".equals(m_pi.getReportType()))
m_pi.setExportFileExtension("html");
else if ("CSV".equals(m_pi.getReportType()))
m_pi.setExportFileExtension("csv");
else if ("XLS".equals(m_pi.getReportType()))
m_pi.setExportFileExtension("xls");
else
m_pi.setExportFileExtension("pdf");
}
}
ServerProcessCtl.process(m_pi, null); ServerProcessCtl.process(m_pi, null);
ProcessInfoUtil.setLogFromDB(m_pi); ProcessInfoUtil.setLogFromDB(m_pi);
if (!m_pi.isError()) if (!m_pi.isError())
{ {
boolean isReport = (process.isReport() || process.getAD_ReportView_ID() > 0 || process.getJasperReport() != null || process.getAD_PrintFormat_ID() > 0); boolean isReport = (process.isReport() || process.getAD_ReportView_ID() > 0 || process.getJasperReport() != null || process.getAD_PrintFormat_ID() > 0);
if (isReport) if (isReport && m_pi.getPDFReport() != null)
{ {
download(m_pi.getPDFReport()); download(m_pi.getPDFReport());
} }

View File

@ -23,6 +23,7 @@ import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.component.Window; import org.adempiere.webui.component.Window;
import org.adempiere.webui.event.DialogEvents; import org.adempiere.webui.event.DialogEvents;
import org.adempiere.webui.util.ZKUpdateUtil; import org.adempiere.webui.util.ZKUpdateUtil;
import org.compiere.print.MPrintFormat;
import org.compiere.process.ProcessInfo; import org.compiere.process.ProcessInfo;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.Env; import org.compiere.util.Env;
@ -221,6 +222,15 @@ public class ProcessModalDialog extends AbstractProcessDialog implements EventLi
Events.echoEvent(ON_OK_ECHO, this, null); Events.echoEvent(ON_OK_ECHO, this, null);
return; return;
} }
if(fPrintFormat != null && fPrintFormat.getValue() != null) {
MPrintFormat format = new MPrintFormat(Env.getCtx(), (Integer) fPrintFormat.getValue(), null);
if (format != null) {
getProcessInfo().setSerializableObject(format);
}
}
if(freportType != null && freportType.getSelectedItem() != null) {
getProcessInfo().setReportType(freportType.getSelectedItem().getValue().toString());
}
startProcess(); startProcess();
} }

View File

@ -134,8 +134,11 @@ public class ZkJRViewer extends Window implements EventListener<Event>, ITabOnCl
private void init() { private void init() {
final boolean isCanExport=MRole.getDefault().isCanExport(); final boolean isCanExport=MRole.getDefault().isCanExport();
defaultType = jasperPrint.getProperty("IDEMPIERE_REPORT_TYPE");
if (Util.isEmpty(defaultType)) {
defaultType = MSysConfig.getValue(MSysConfig.ZK_REPORT_JASPER_OUTPUT_TYPE, "PDF", defaultType = MSysConfig.getValue(MSysConfig.ZK_REPORT_JASPER_OUTPUT_TYPE, "PDF",
Env.getAD_Client_ID(Env.getCtx()), Env.getAD_Org_ID(Env.getCtx()));//It gets default Jasper output type Env.getAD_Client_ID(Env.getCtx()), Env.getAD_Org_ID(Env.getCtx()));//It gets default Jasper output type
}
Borderlayout layout = new Borderlayout(); Borderlayout layout = new Borderlayout();
layout.setStyle("position: absolute; height: 99%; width: 99%"); layout.setStyle("position: absolute; height: 99%; width: 99%");

View File

@ -274,11 +274,12 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
previewType.setMold("select"); previewType.setMold("select");
previewType.appendItem("HTML", "HTML"); previewType.appendItem("HTML", "HTML");
previewType.appendItem("PDF", "PDF");
if ( m_isCanExport ) if ( m_isCanExport )
{ {
previewType.appendItem("PDF", "PDF");
previewType.appendItem("Excel", "XLS"); previewType.appendItem("Excel", "XLS");
previewType.appendItem("CSV", "CSV");
} }
toolBar.appendChild(previewType); toolBar.appendChild(previewType);
@ -290,10 +291,12 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
if (m_reportEngine.getReportType() != null) if (m_reportEngine.getReportType() != null)
{ {
if (m_reportEngine.getReportType().equals("PDF") && m_isCanExport) if (m_reportEngine.getReportType().equals("PDF"))
pTypeIndex = 1; pTypeIndex = 1;
else if (m_reportEngine.getReportType().equals("XLS") && m_isCanExport) else if (m_reportEngine.getReportType().equals("XLS") && m_isCanExport)
pTypeIndex = 2; pTypeIndex = 2;
else if (m_reportEngine.getReportType().equals("CSV") && m_isCanExport)
pTypeIndex = 3;
} }
else else
{ {
@ -305,10 +308,12 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
if ("HTML".equals(type)) { if ("HTML".equals(type)) {
pTypeIndex = 0; pTypeIndex = 0;
} else if ("PDF".equals(type) && m_isCanExport) { } else if ("PDF".equals(type)) {
pTypeIndex = 1; pTypeIndex = 1;
} else if ("XLS".equals(type) && m_isCanExport) { } else if ("XLS".equals(type) && m_isCanExport) {
pTypeIndex = 2; pTypeIndex = 2;
} else if ("CSV".equals(type) && m_isCanExport) {
pTypeIndex = 3;
} }
} }
@ -651,6 +656,8 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
future = Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(new HTMLRendererRunnable(this),getDesktop())); future = Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(new HTMLRendererRunnable(this),getDesktop()));
} else if ("XLS".equals(previewType.getSelectedItem().getValue())) { } else if ("XLS".equals(previewType.getSelectedItem().getValue())) {
future = Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(new XLSRendererRunnable(this),getDesktop())); future = Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(new XLSRendererRunnable(this),getDesktop()));
} else if ("CSV".equals(previewType.getSelectedItem().getValue())) {
future = Adempiere.getThreadPoolExecutor().submit(new DesktopRunnable(new CSVRendererRunnable(this),getDesktop()));
} }
} }
@ -1674,4 +1681,47 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
} }
} }
static class CSVRendererRunnable extends ContextRunnable implements IServerPushCallback {
private ZkReportViewer viewer;
public CSVRendererRunnable(ZkReportViewer viewer) {
super();
this.viewer = viewer;
}
@Override
protected void doRun() {
try {
String path = System.getProperty("java.io.tmpdir");
String prefix = viewer.makePrefix(viewer.m_reportEngine.getName());
if (log.isLoggable(Level.FINE))
{
log.log(Level.FINE, "Path="+path + " Prefix="+prefix);
}
File file = File.createTempFile(prefix, ".csv", new File(path));
viewer.m_reportEngine.createCSV(file, ',', AEnv.getLanguage(Env.getCtx()));
viewer.media = new AMedia(file.getName(), "csv", "text/csv", file, true);
} catch (Exception e) {
if (e instanceof RuntimeException)
throw (RuntimeException)e;
else
throw new RuntimeException(e);
} finally {
Desktop desktop = AEnv.getDesktop();
if (desktop != null && desktop.isAlive()) {
new ServerPushTemplate(desktop).executeAsync(this);
}
}
}
@Override
public void updateUI() {
viewer.labelDrill.setVisible(false);
viewer.comboDrill.setVisible(false);
viewer.onPreviewReport();
}
}
} }

View File

@ -272,6 +272,8 @@ public abstract class AbstractProcessCtl implements Runnable
m_pi.setClassName(ProcessUtil.JASPER_STARTER_CLASS); m_pi.setClassName(ProcessUtil.JASPER_STARTER_CLASS);
startProcess(); startProcess();
MPInstance pinstance = new MPInstance(Env.getCtx(), m_pi.getAD_PInstance_ID(), null); MPInstance pinstance = new MPInstance(Env.getCtx(), m_pi.getAD_PInstance_ID(), null);
if (m_pi.getReportType() != null)
pinstance.setReportType(m_pi.getReportType());
String errmsg = pinstance.getErrorMsg(); String errmsg = pinstance.getErrorMsg();
if (Util.isEmpty(errmsg, true)) if (Util.isEmpty(errmsg, true))
errmsg = "Rows=" + String.valueOf(m_pi.getRowCount()); errmsg = "Rows=" + String.valueOf(m_pi.getRowCount());