diff --git a/org.adempiere.base/src/org/compiere/model/GridField.java b/org.adempiere.base/src/org/compiere/model/GridField.java index 9a17331c92..65966e45fc 100644 --- a/org.adempiere.base/src/org/compiere/model/GridField.java +++ b/org.adempiere.base/src/org/compiere/model/GridField.java @@ -434,7 +434,8 @@ public class GridField } //check tab context - if (checkContext && getGridTab() != null) + if (checkContext && getGridTab() != null && + ! "Y".equals(Env.getContext(Env.getCtx(), getWindowNo(), "_QUICK_ENTRY_MODE_"))) { if (getGridTab().isReadOnly()) { diff --git a/org.adempiere.base/src/org/compiere/model/PO.java b/org.adempiere.base/src/org/compiere/model/PO.java index a00eedcc16..c024ac7be2 100644 --- a/org.adempiere.base/src/org/compiere/model/PO.java +++ b/org.adempiere.base/src/org/compiere/model/PO.java @@ -2646,10 +2646,10 @@ public abstract class PO else { if (m_trxName == null) - log.log(Level.WARNING, "#" + no + log.log(Level.WARNING, "Update return " + no + " instead of 1" + " - " + p_info.getTableName() + "." + where); else - log.log(Level.WARNING, "#" + no + log.log(Level.WARNING, "Update return " + no + " instead of 1" + " - [" + m_trxName + "] - " + p_info.getTableName() + "." + where); } return ok; diff --git a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLStatementElementHandler.java b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLStatementElementHandler.java index 4ba2cf0a1c..519c16932f 100644 --- a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLStatementElementHandler.java +++ b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLStatementElementHandler.java @@ -49,15 +49,13 @@ public class SQLStatementElementHandler extends AbstractElementHandler { sql = sql.substring(0, sql.length() - 1); Savepoint savepoint = null; PreparedStatement pstmt = null; + X_AD_Package_Imp_Detail impDetail = null; try { // NOTE Postgres needs to commit DDL statements // add a SQL command just with COMMIT if you want to simulate the Oracle behavior (commit on DDL) // Use savepoint here so that SQL exception would not rollback the whole process - if (DB.isPostgreSQL()) - { - Trx trx = Trx.get(getTrxName(ctx), true); - savepoint = trx.setSavepoint(null); - } + Trx trx = Trx.get(getTrxName(ctx), true); + savepoint = trx.setSavepoint(null); pstmt = DB.prepareStatement(sql, getTrxName(ctx)); if (DBType.equals("ALL")) { @@ -86,27 +84,23 @@ public class SQLStatementElementHandler extends AbstractElementHandler { DB.close(stmt); stmt = null; } - } - - X_AD_Package_Imp_Detail impDetail = createImportDetail(ctx, element.qName, "", - 0); - logImportDetail (ctx, impDetail, 1, "SQLStatement",1,"Execute"); + } } catch (Exception e) { - if (DB.isPostgreSQL()) { - // rollback immediately postgres on exception to avoid a wrong SQL stop the whole process - if (savepoint != null) - { - Trx trx = Trx.get(getTrxName(ctx), false); - try { - trx.rollback(savepoint); - } catch (SQLException e1) {} - savepoint = null; + // rollback immediately on exception to avoid a wrong SQL stop the whole process + if (savepoint != null) + { + Trx trx = Trx.get(getTrxName(ctx), false); + try { + if (trx.getConnection() != null) + trx.getConnection().rollback(savepoint); + } catch (SQLException e1) { + //a rollback or commit have happens making the savepoint becomes invalid. + //rollback trx to continue + trx.rollback(); } + savepoint = null; } log.log(Level.SEVERE,"SQLSatement", e); - X_AD_Package_Imp_Detail impDetail = createImportDetail(ctx, element.qName, "", - 0); - logImportDetail (ctx, impDetail, 0, "SQLStatement",1,"Execute"); } finally { DB.close(pstmt); pstmt = null; @@ -114,9 +108,18 @@ public class SQLStatementElementHandler extends AbstractElementHandler { Trx trx = Trx.get(getTrxName(ctx), false); try { trx.releaseSavepoint(savepoint); - } catch (SQLException e) {} + } catch (SQLException e) { + if (DB.isPostgreSQL()) { + //a commit or rollback have happens that make the savepoint invalid. + //need to call rollback to continue + trx.commit(); + } + } } } + impDetail = createImportDetail(ctx, element.qName, "", + 0); + logImportDetail (ctx, impDetail, 1, "SQLStatement",1,"Execute"); } public void endElement(PIPOContext ctx, Element element) throws SAXException { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java index 943a5d6d40..4be45892a1 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java @@ -1387,7 +1387,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements boolean changed = e.isChanged() || e.isInserting(); boolean readOnly = adTabbox.getSelectedGridTab().isReadOnly(); - boolean processed = "Y".equals(Env.getContext(Env.getCtx(), getWindowNo(), "Processed", true)); + boolean processed = adTabbox.getSelectedGridTab().isProcessed(); boolean insertRecord = !readOnly; if (!detailTab) { @@ -1410,7 +1410,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements } else { - adTabbox.updateDetailPaneToolbar(changed, readOnly || processed); + adTabbox.updateDetailPaneToolbar(changed, readOnly); } toolbar.enableIgnore(adTabbox.needSave(true, false) || adTabbox.getSelectedGridTab().isNew() || diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java index d2d73ff822..fb052fc091 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java @@ -542,7 +542,7 @@ public class DetailPane extends Panel implements EventListener, IdSpace { Toolbar toolbar = (Toolbar) tabpanel.getFirstChild(); IADTabpanel adtab = getADTabpanel(index); - if (adtab!=null && adtab.getGridTab().isSortTab()) + if (adtab!=null && (adtab.getGridTab().isSortTab() || adtab.getGridTab().isReadOnly())) readOnly = true; boolean insertRecord = !readOnly;