From 5aa1701d019c7d6c03476651d3333a7392b1b3b0 Mon Sep 17 00:00:00 2001 From: Nicolas Micoud Date: Wed, 2 Apr 2014 19:59:25 -0500 Subject: [PATCH] IDEMPIERE-1845 Allow Scheduler to use default logic based on SQL --- .../oracle/201303212222_IDEMPIERE-1845.sql | 14 +++++++ .../201303212222_IDEMPIERE-1845.sql | 11 ++++++ .../server/org/compiere/server/Scheduler.java | 38 +++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 migration/i2.0/oracle/201303212222_IDEMPIERE-1845.sql create mode 100644 migration/i2.0/postgresql/201303212222_IDEMPIERE-1845.sql diff --git a/migration/i2.0/oracle/201303212222_IDEMPIERE-1845.sql b/migration/i2.0/oracle/201303212222_IDEMPIERE-1845.sql new file mode 100644 index 0000000000..a03d518249 --- /dev/null +++ b/migration/i2.0/oracle/201303212222_IDEMPIERE-1845.sql @@ -0,0 +1,14 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- Mar 21, 2014 10:20:57 PM CET +-- IDEMPIERE-1845 +UPDATE AD_Field SET IsAdvancedField='Y',Updated=TO_DATE('2014-03-21 22:20:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=9448 +; + +-- Mar 21, 2014 10:20:59 PM CET +UPDATE AD_Field SET IsAdvancedField='Y',Updated=TO_DATE('2014-03-21 22:20:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202528 +; + +SELECT register_migration_script('201303212222_IDEMPIERE-1845.sql') FROM dual +; \ No newline at end of file diff --git a/migration/i2.0/postgresql/201303212222_IDEMPIERE-1845.sql b/migration/i2.0/postgresql/201303212222_IDEMPIERE-1845.sql new file mode 100644 index 0000000000..69637f3fd8 --- /dev/null +++ b/migration/i2.0/postgresql/201303212222_IDEMPIERE-1845.sql @@ -0,0 +1,11 @@ +-- Mar 21, 2014 10:20:57 PM CET +-- IDEMPIERE-1845 +UPDATE AD_Field SET IsAdvancedField='Y',Updated=TO_TIMESTAMP('2014-03-21 22:20:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=9448 +; + +-- Mar 21, 2014 10:20:59 PM CET +UPDATE AD_Field SET IsAdvancedField='Y',Updated=TO_TIMESTAMP('2014-03-21 22:20:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202528 +; + +SELECT register_migration_script('201303212222_IDEMPIERE-1845.sql') FROM dual +; \ No newline at end of file diff --git a/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java b/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java index cc8478b088..6c35cf1039 100644 --- a/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java +++ b/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java @@ -18,6 +18,9 @@ package org.compiere.server; import java.io.File; import java.math.BigDecimal; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Properties; @@ -40,10 +43,12 @@ import org.compiere.print.ReportEngine; import org.compiere.process.ProcessInfo; import org.compiere.process.ProcessInfoUtil; import org.compiere.process.ServerProcessCtl; +import org.compiere.util.DB; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.TimeUtil; import org.compiere.util.Trx; +import org.compiere.util.Util; /** @@ -402,6 +407,39 @@ public class Scheduler extends AdempiereServer if (variable == null || (variable != null && variable.length() == 0)) value = null; + else if (variable.startsWith("@SQL=")) { + String defStr = ""; + String sql = variable.substring(5); // w/o tag + //sql = Env.parseContext(m_vo.ctx, m_vo.WindowNo, sql, false, true); // replace variables + //hengsin, capture unparseable error to avoid subsequent sql exception + sql = Env.parseContext(m_schedulerctx, 0, sql, false, false); // replace variables + if (sql.equals("")) + log.log(Level.WARNING, "(" + sPara.getColumnName() + ") - Default SQL variable parse failed: " + variable); + else { + PreparedStatement stmt = null; + ResultSet rs = null; + try { + stmt = DB.prepareStatement(sql, null); + rs = stmt.executeQuery(); + if (rs.next()) + defStr = rs.getString(1); + else { + if (log.isLoggable(Level.INFO)) + log.log(Level.INFO, "(" + sPara.getColumnName() + ") - no Result: " + sql); + } + } + catch (SQLException e) { + log.log(Level.WARNING, "(" + sPara.getColumnName() + ") " + sql, e); + } + finally{ + DB.close(rs, stmt); + rs = null; + stmt = null; + } + } + if (!Util.isEmpty(defStr)) + value = defStr; + } // SQL Statement else if ( variable.indexOf('@') != -1 && variable.indexOf('@') != variable.lastIndexOf('@')) // we have a variable / BF [1926032] {