diff --git a/org.adempiere.base.process/src/org/idempiere/process/MaintainSupportRoles.java b/org.adempiere.base.process/src/org/idempiere/process/MaintainSupportRoles.java index 52a883e649..2bb487eced 100644 --- a/org.adempiere.base.process/src/org/idempiere/process/MaintainSupportRoles.java +++ b/org.adempiere.base.process/src/org/idempiere/process/MaintainSupportRoles.java @@ -105,7 +105,6 @@ public class MaintainSupportRoles extends SvrProcess { } else if (ACTION_DELETE.equals(p_IsActive)) { if (ur != null) { ur.deleteEx(true); - ur.saveEx(); cnt++; } } diff --git a/org.adempiere.base/src/org/compiere/model/PO.java b/org.adempiere.base/src/org/compiere/model/PO.java index d10e313ab6..6870422c65 100644 --- a/org.adempiere.base/src/org/compiere/model/PO.java +++ b/org.adempiere.base/src/org/compiere/model/PO.java @@ -2271,7 +2271,8 @@ public abstract class PO msg = (val != null ? val + ": " : "") + err.getName(); if (msg == null || msg.length() == 0) msg = "SaveError"; - throw new AdempiereException(msg); + Exception ex = CLogger.retrieveException(); + throw new AdempiereException(msg, ex); } } @@ -3563,7 +3564,8 @@ public abstract class PO msg = err.getName(); if (msg == null || msg.length() == 0) msg = "DeleteError"; - throw new AdempiereException(msg); + Exception ex = CLogger.retrieveException(); + throw new AdempiereException(msg, ex); } } @@ -4846,7 +4848,7 @@ public abstract class PO if ("DBExecuteError".equals(msg)) info = "DBExecuteError:" + info; // Unique Constraint - Exception e = CLogger.retrieveException(); + Exception e = CLogger.peekException(); if (DBException.isUniqueContraintError(e)) { boolean found = false; diff --git a/org.adempiere.base/src/org/compiere/util/CLogger.java b/org.adempiere.base/src/org/compiere/util/CLogger.java index a9e2278da9..90ed937d48 100644 --- a/org.adempiere.base/src/org/compiere/util/CLogger.java +++ b/org.adempiere.base/src/org/compiere/util/CLogger.java @@ -199,7 +199,7 @@ public class CLogger extends Logger { ValueNamePair vp = (ValueNamePair) Env.getCtx().get(LAST_ERROR); return vp; - } // retrieveError + } // peekError /** * Get Error message from stack @@ -225,6 +225,16 @@ public class CLogger extends Logger return ex; } // retrieveError + /** + * Peek Exception from Stack + * @return last exception + */ + public static Exception peekException() + { + Exception ex = (Exception) Env.getCtx().get(LAST_EXCEPTION); + return ex; + } // peekException + /** * Save Warning as ValueNamePair. * @param AD_Message message key diff --git a/org.adempiere.base/src/org/compiere/util/Env.java b/org.adempiere.base/src/org/compiere/util/Env.java index d1c9022d9b..5f05d24d82 100644 --- a/org.adempiere.base/src/org/compiere/util/Env.java +++ b/org.adempiere.base/src/org/compiere/util/Env.java @@ -1665,14 +1665,25 @@ public final class Env else tableName = foreignTable; MTable table = MTable.get(ctx, tableName); - if (table != null && (tableName.equalsIgnoreCase(foreignTable) || tableName.equalsIgnoreCase(po.get_TableName()))) { + String keyCol = tableName + "_ID"; + boolean isSubTypeTable = false; + if (! Util.isEmpty(foreignTable) && ! tableName.equalsIgnoreCase(foreignTable)) { + // verify if is a subtype table + if ( table.getKeyColumns() != null + && table.getKeyColumns().length == 1 + && table.getKeyColumns()[0].equals(foreignTable + "_ID")) { + isSubTypeTable = true; + keyCol = foreignTable + "_ID"; + } + } + if (table != null && (isSubTypeTable || tableName.equalsIgnoreCase(foreignTable) || tableName.equalsIgnoreCase(po.get_TableName()))) { String columnName = tblIndex > 0 ? format.substring(tblIndex + 1) : format; MColumn column = table.getColumn(columnName); if (column != null) { if (column.isSecure()) { outStr.append("********"); } else { - String value = DB.getSQLValueString(trxName,"SELECT " + columnName + " FROM " + tableName + " WHERE " + tableName + "_ID = ?", (Integer)v); + String value = DB.getSQLValueString(trxName,"SELECT " + columnName + " FROM " + tableName + " WHERE " + keyCol + "=?", (Integer)v); if (value != null) outStr.append(value); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java index 6b80d15194..0c7952fbb6 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java @@ -58,6 +58,7 @@ import org.adempiere.webui.component.Panel; import org.adempiere.webui.component.Row; import org.adempiere.webui.component.Rows; import org.adempiere.webui.component.Tabpanel; +import org.adempiere.webui.component.Textbox; import org.adempiere.webui.component.ToolBar; import org.adempiere.webui.component.ToolBarButton; import org.adempiere.webui.component.Window; @@ -716,11 +717,6 @@ public class FindWindow extends Window implements EventListener, ValueCha GridField mField = m_findFields[i]; boolean isDisplayed = mField.isDisplayed(); - if (DisplayType.isText(mField.getVO().displayType)) { - // for string fields allow searching long strings - useful for like and similar to searches - mField.getVO().FieldLength = 32767; // a conservative max literal string - like oracle extended - mField.getVO().DisplayLength = mField.getVO().FieldLength; - } if (mField.getVO().displayType == DisplayType.YesNo || mField.isEncrypted() || mField.isEncryptedColumn()) { // Make Yes-No searchable as list GridFieldVO vo = mField.getVO(); @@ -1191,7 +1187,8 @@ public class FindWindow extends Window implements EventListener, ValueCha editor.addValueChangeListener(this); Label label = editor.getLabel(); Component fieldEditor = editor.getComponent(); - //Fix miss lable of checkbox + setLengthStringField(mField, fieldEditor); + //Fix miss label of checkbox label.setValue(mField.getHeader()); // if (displayLength > 0) // set it back @@ -1256,6 +1253,13 @@ public class FindWindow extends Window implements EventListener, ValueCha return true; } // addSelectionColumn + private void setLengthStringField(GridField field, Component fieldEditor) { + if (DisplayType.isText(field.getVO().displayType) && fieldEditor instanceof Textbox) { + // for string fields allow searching long strings - useful for like and similar to searches + ((Textbox) fieldEditor).setMaxlength(32767); // a conservative max literal string - like oracle extended + } + } + public void onEvent(Event event) throws Exception { m_createNew = false; @@ -2191,6 +2195,7 @@ public class FindWindow extends Window implements EventListener, ValueCha editor = new WStringEditor(findField); findField.addPropertyChangeListener(editor); } + setLengthStringField(findField, editor.getComponent()); editor.addValueChangeListener(this); editor.setValue(null); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WTextEditorDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WTextEditorDialog.java index ea62e8ead3..a37a2deb30 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WTextEditorDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WTextEditorDialog.java @@ -273,7 +273,11 @@ public class WTextEditorDialog extends Window implements EventListener{ .and(Sanitizers.LINKS) .and(Sanitizers.STYLES) .and(Sanitizers.TABLES); - return policy.sanitize(untrustedHTML); - } + String ret = policy.sanitize(untrustedHTML); + ret = ret.replaceAll("#", "#"); + ret = ret.replaceAll("@", "@"); + + return ret; + } }