From 452a848f718787c6302cce4ce92319ee765005ba Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Sun, 12 Nov 2017 11:46:00 +0100 Subject: [PATCH 1/7] IDEMPIERE-2361 / IDEMPIERE-581 / organize SysConfig --- org.adempiere.base/src/org/compiere/model/MSysConfig.java | 6 ++++-- .../src/org/adempiere/webui/adwindow/ADTabpanel.java | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MSysConfig.java b/org.adempiere.base/src/org/compiere/model/MSysConfig.java index 5238ad3e63..e64b48096e 100644 --- a/org.adempiere.base/src/org/compiere/model/MSysConfig.java +++ b/org.adempiere.base/src/org/compiere/model/MSysConfig.java @@ -39,10 +39,10 @@ import org.compiere.util.DisplayType; */ public class MSysConfig extends X_AD_SysConfig { - /** + /** * */ - private static final long serialVersionUID = -4917976995339273240L; + private static final long serialVersionUID = 2617379167881737860L; public static final String ADDRESS_VALIDATION = "ADDRESS_VALIDATION"; public static final String ALERT_SEND_ATTACHMENT_AS_XLS = "ALERT_SEND_ATTACHMENT_AS_XLS"; @@ -59,6 +59,7 @@ public class MSysConfig extends X_AD_SysConfig public static final String APPLICATION_MAIN_VERSION = "APPLICATION_MAIN_VERSION"; public static final String APPLICATION_MAIN_VERSION_SHOWN = "APPLICATION_MAIN_VERSION_SHOWN"; public static final String APPLICATION_OS_INFO_SHOWN = "APPLICATION_OS_INFO_SHOWN"; + public static final String APPLICATION_URL = "APPLICATION_URL"; public static final String ATTACH_EMBEDDED_2PACK = "ATTACH_EMBEDDED_2PACK"; public static final String AUTOMATIC_PACKIN_FOLDERS = "AUTOMATIC_PACKIN_FOLDERS"; public static final String AUTOMATIC_PACKIN_INITIAL_DELAY = "AUTOMATIC_PACKIN_INITIAL_DELAY"; @@ -138,6 +139,7 @@ public class MSysConfig extends X_AD_SysConfig public static final String SYSTEM_IN_MAINTENANCE_MODE = "SYSTEM_IN_MAINTENANCE_MODE"; public static final String SYSTEM_INSERT_CHANGELOG = "SYSTEM_INSERT_CHANGELOG"; public static final String SYSTEM_NATIVE_SEQUENCE = "SYSTEM_NATIVE_SEQUENCE"; + public static final String TOP_MARGIN_PIXELS_FOR_HEADER = "TOP_MARGIN_PIXELS_FOR_HEADER"; public static final String TRACE_ALL_TRX_CONNECTION_GET = "TRACE_ALL_TRX_CONNECTION_GET"; public static final String TWOPACK_COMMIT_DDL = "2PACK_COMMIT_DDL"; public static final String TWOPACK_HANDLE_TRANSLATIONS = "2PACK_HANDLE_TRANSLATIONS"; diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java index 60ddef96de..71c8e80c0e 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java @@ -302,7 +302,7 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer ClientInfo browserInfo = SessionManager.getAppDesktop().getClientInfo(); int browserHeight = browserInfo.desktopHeight; int prefHeight = Integer.valueOf(height.replace("px", "")); - int topmarginpx = MSysConfig.getIntValue("TOP_MARGIN_PIXELS_FOR_HEADER", 222); + int topmarginpx = MSysConfig.getIntValue(MSysConfig.TOP_MARGIN_PIXELS_FOR_HEADER, 222); int maxHeight = browserHeight - topmarginpx; if (prefHeight <= maxHeight) { height = Integer.toString(prefHeight) + "px"; From 2fdd02f65af8df129e19fc2771427579a4557edc Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Sun, 12 Nov 2017 11:46:49 +0100 Subject: [PATCH 2/7] IDEMPIERE-2361 / IDEMPIERE-581 / organize SysConfig --- .../WEB-INF/src/org/adempiere/webui/apps/AEnv.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java index d316ac2cc1..ec5f896301 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AEnv.java @@ -813,9 +813,9 @@ public final class AEnv private static String m_ApplicationUrl = null; public static String getApplicationUrl() { - String url = MSysConfig.getValue("APPLICATION_URL", Env.getAD_Client_ID(Env.getCtx())); + String url = MSysConfig.getValue(MSysConfig.APPLICATION_URL, Env.getAD_Client_ID(Env.getCtx())); if (!Util.isEmpty(url) && !url.equals("USE_HARDCODED")) - return MSysConfig.getValue("APPLICATION_URL", Env.getAD_Client_ID(Env.getCtx())); + return MSysConfig.getValue(MSysConfig.APPLICATION_URL, Env.getAD_Client_ID(Env.getCtx())); if (m_ApplicationUrl != null) return m_ApplicationUrl; int port = Executions.getCurrent().getServerPort(); From 87db4206500a5892e1c08c4470a78f2703d77348 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Sat, 11 Nov 2017 21:49:02 +0800 Subject: [PATCH 3/7] IDEMPIERE-3538 NPE happen if show dialog at time not yet complete login --- .../WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java | 7 +++++++ .../WEB-INF/src/org/adempiere/webui/ClientInfo.java | 2 +- .../WEB-INF/src/org/adempiere/webui/IWebClient.java | 5 ++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java index 35746720a7..725ba183b4 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java @@ -459,6 +459,8 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb } if (getDesktop() != null && getDesktop().getSession() != null) { getDesktop().getSession().setAttribute(CLIENT_INFO, clientInfo); + } else if (Executions.getCurrent() != null){ + Executions.getCurrent().getSession().setAttribute(CLIENT_INFO, clientInfo); } Env.setContext(Env.getCtx(), "#clientInfo_desktopWidth", clientInfo.desktopWidth); @@ -541,6 +543,11 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb Executions.sendRedirect("index.zul"); } + @Override + public ClientInfo getClientInfo() { + return clientInfo; + } + /** * @return string for setupload */ diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/ClientInfo.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/ClientInfo.java index 0dcd074d24..5cb588d96d 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/ClientInfo.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/ClientInfo.java @@ -103,7 +103,7 @@ public class ClientInfo implements Serializable { * @return the current clientinfo instance */ public static ClientInfo get() { - return SessionManager.getAppDesktop().getClientInfo(); + return SessionManager.getSessionApplication().getClientInfo(); } /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/IWebClient.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/IWebClient.java index f06952a169..59f783b7ef 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/IWebClient.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/IWebClient.java @@ -67,5 +67,8 @@ public interface IWebClient { * @return keylistener */ public abstract Keylistener getKeylistener(); - + + default ClientInfo getClientInfo() { + return getAppDeskop().getClientInfo(); + } } \ No newline at end of file From 8385b79f0a75f26b85fafa474a38da1358affa3f Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Mon, 13 Nov 2017 10:16:27 +0800 Subject: [PATCH 4/7] IDEMPIERE-3557 Field dependency analysis doesn't work with context variable using the : notation --- org.adempiere.base/src/org/compiere/model/GridTab.java | 3 ++- org.adempiere.base/src/org/compiere/util/Evaluator.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/org.adempiere.base/src/org/compiere/model/GridTab.java b/org.adempiere.base/src/org/compiere/model/GridTab.java index ffac3a3dca..52fe5abc7d 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTab.java +++ b/org.adempiere.base/src/org/compiere/model/GridTab.java @@ -2794,7 +2794,8 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable { MLookup mLookup = (MLookup)dependentField.getLookup(); // if the lookup is dynamic (i.e. contains this columnName as variable) - if (mLookup.getValidation().indexOf("@"+columnName+"@") != -1) + if (mLookup.getValidation().indexOf("@"+columnName+"@") != -1 + || mLookup.getValidation().matches(".*[@]"+columnName+"[:].+[@].*$")) { if (log.isLoggable(Level.FINE)) log.fine(columnName + " changed - " + dependentField.getColumnName() + " set to null"); diff --git a/org.adempiere.base/src/org/compiere/util/Evaluator.java b/org.adempiere.base/src/org/compiere/util/Evaluator.java index 9b56b85b5d..9ca826fba5 100644 --- a/org.adempiere.base/src/org/compiere/util/Evaluator.java +++ b/org.adempiere.base/src/org/compiere/util/Evaluator.java @@ -293,6 +293,8 @@ public class Evaluator variable = variable.replaceFirst("[0-9][0-9]*\\|", ""); if (variable.indexOf(".") > 0) variable = variable.substring(0, variable.indexOf(".")); + if (variable.indexOf(":") > 0) + variable = variable.substring(0, variable.indexOf(":")); list.add(variable); } } // parseDepends From fbb260a1ea492248e1a6b91c90a90d9576deddaa Mon Sep 17 00:00:00 2001 From: Andy Conn Date: Mon, 13 Nov 2017 15:52:21 +0100 Subject: [PATCH 5/7] IDEMPIERE-3530 Doc_Inventory.createFacts does not respect !line.isAcive() but MInventory.completeIt does. Posting fails. --- org.adempiere.base/src/org/compiere/acct/Doc_Inventory.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/org.adempiere.base/src/org/compiere/acct/Doc_Inventory.java b/org.adempiere.base/src/org/compiere/acct/Doc_Inventory.java index a819e82fcb..cf09b43379 100644 --- a/org.adempiere.base/src/org/compiere/acct/Doc_Inventory.java +++ b/org.adempiere.base/src/org/compiere/acct/Doc_Inventory.java @@ -107,6 +107,9 @@ public class Doc_Inventory extends Doc for (int i = 0; i < lines.length; i++) { MInventoryLine line = lines[i]; + if (!line.isActive()) + continue; + String docSubTypeInv; if (Util.isEmpty(parentDocSubTypeInv)) { // IDEMPIERE-675: for backward compatibility - to post old documents that could have subtypeinv empty From b689ad0495986d685ddbf11d21651a5e62f161a3 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 15 Nov 2017 10:46:11 +0100 Subject: [PATCH 6/7] IDEMPIERE-3559 DrillDown report didn't work because of two bug / integrate suggestions from Denis Kuznetsov --- .../src/org/adempiere/webui/apps/WReport.java | 16 ++++++++++++++-- .../adempiere/webui/window/ZkReportViewer.java | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/WReport.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/WReport.java index a940915d8f..0314848a7c 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/WReport.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/WReport.java @@ -167,8 +167,20 @@ public class WReport implements EventListener { private void launchReport (MPrintFormat pf) { int Record_ID = 0; - if (m_query.getRestrictionCount()==1 && m_query.getCode(0) instanceof Integer) - Record_ID = ((Integer)m_query.getCode(0)).intValue(); + if (m_query.getRestrictionCount() == 1) { + if (m_query.getColumnName(0).equals(m_query.getTableName()+"_ID")) { + Object vrec = m_query.getCode(0); + if (vrec instanceof Integer) { + Record_ID = ((Integer)m_query.getCode(0)).intValue(); + } else { + try { + Record_ID = Integer.parseInt(m_query.getCode(0).toString()); + } catch (NumberFormatException e) { + log.info(e.getMessage()); + } + } + } + } PrintInfo info = new PrintInfo( pf.getName(), pf.getAD_Table_ID(), diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java index bc181177e8..b5bf837898 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java @@ -996,7 +996,7 @@ public class ZkReportViewer extends Window implements EventListener, ITab return; } if (AD_Table_ID != 0) - new WReport (AD_Table_ID, query, component, 0); + new WReport (AD_Table_ID, query, component, m_WindowNo); else log.warning("No Table found for " + query.getWhereClause(true)); } // executeDrill From e7540e1c70b3979e0949a376acb17a903fbe58cb Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Thu, 16 Nov 2017 10:19:20 +0800 Subject: [PATCH 7/7] IDEMPIERE-3536 Dynamic validation not working correctly in Grid View --- .../src/org/adempiere/util/GridRowCtx.java | 131 +++++++++++------- .../webui/adwindow/GridTabRowRenderer.java | 2 +- .../adempiere/webui/adwindow/GridView.java | 8 +- .../org/adempiere/webui/editor/WEditor.java | 8 +- .../adempiere/webui/editor/WSearchEditor.java | 11 ++ .../webui/editor/WTableDirEditor.java | 12 +- 6 files changed, 112 insertions(+), 60 deletions(-) diff --git a/org.adempiere.base/src/org/adempiere/util/GridRowCtx.java b/org.adempiere.base/src/org/adempiere/util/GridRowCtx.java index 3039a21e0b..8c2ad82f39 100644 --- a/org.adempiere.base/src/org/adempiere/util/GridRowCtx.java +++ b/org.adempiere.base/src/org/adempiere/util/GridRowCtx.java @@ -5,9 +5,12 @@ package org.adempiere.util; import java.util.Collection; import java.util.Enumeration; +import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.Vector; import org.compiere.model.GridField; import org.compiere.model.GridTab; @@ -31,30 +34,23 @@ implements Evaluatee private final Properties ctx; private final GridTab gridTab; - private final GridTable gridTable; private final int windowNo; private final int row; + public GridRowCtx(Properties ctx, GridTab tab) + { + this(ctx, tab, -1); + } + public GridRowCtx(Properties ctx, GridTab tab, int row) { super(); this.ctx = ctx; this.gridTab = tab; - this.gridTable = tab.getTableModel(); this.windowNo = tab.getWindowNo(); this.row = row; } - public GridRowCtx(Properties ctx, GridTable table, int windowNo, int row) - { - super(); - this.ctx = ctx; - this.gridTab = null; - this.gridTable = table; - this.windowNo = windowNo; - this.row = row; - } - private String getColumnName(Object key) { if (! (key instanceof String) ) @@ -82,12 +78,13 @@ implements Evaluatee { return ctx.get(key); } + GridTable gridTable = gridTab.getTableModel(); int col = gridTable.findColumn(columnName); if (col == -1) { return ctx.get(key); } - Object value = gridTable.getValueAt(row, col); + Object value = gridTable.getValueAt(getRow(), col); if (value == null) { value = ""; @@ -107,6 +104,10 @@ implements Evaluatee return value.toString(); } + private int getRow() { + return row >= 0 ? row : gridTab.getCurrentRow(); + } + @Override public synchronized void clear() { ctx.clear(); @@ -115,22 +116,19 @@ implements Evaluatee @Override public synchronized Object clone() { final GridRowCtx grc; - if (this.gridTab != null) - grc = new GridRowCtx((Properties)this.ctx.clone(), this.gridTab, this.row); - else - grc = new GridRowCtx((Properties)this.ctx.clone(), this.gridTable, this.windowNo, this.row); + grc = new GridRowCtx((Properties)this.ctx.clone(), this.gridTab, this.row); return grc; } @Override public synchronized boolean contains(Object value) { - // TODO: check if that value exists in one of our GridFields - return this.ctx.contains(value); + return this.containsValue(value); } @Override public synchronized boolean containsKey(Object key) { + GridTable gridTable = gridTab.getTableModel(); String columnName = getColumnName(key); if (columnName != null && gridTable.findColumn(columnName) != -1) return true; @@ -139,20 +137,42 @@ implements Evaluatee @Override public boolean containsValue(Object value) { - // TODO: check if that value exists in one of our GridFields + if (value != null) { + GridField[] fields = gridTab.getFields(); + for(GridField field : fields) { + Object fieldValue = gridTab.getValue(getRow(), field.getColumnName()); + if (fieldValue != null && fieldValue.equals(value)) { + return true; + } + } + } return ctx.containsValue(value); } @Override public synchronized Enumeration elements() { - // TODO: implement for GridField values too - return ctx.elements(); + Vector list = new Vector<>(ctx.values()); + GridField[] fields = gridTab.getFields(); + for(GridField field : fields) { + Object fieldValue = gridTab.getValue(getRow(), field.getColumnName()); + if (fieldValue != null) { + list.add(fieldValue); + } + } + return list.elements(); } @Override public Set> entrySet() { - // TODO: implement for GridField values too - return ctx.entrySet(); + Set> set = new HashSet<>(ctx.entrySet()); + GridField[] fields = gridTab.getFields(); + Map fieldMap = new LinkedHashMap<>(); + for(GridField field : fields) { + Object fieldValue = gridTab.getValue(getRow(), field.getColumnName()); + fieldMap.put(field.getColumnName(), fieldValue); + } + set.addAll(fieldMap.entrySet()); + return set; } @Override @@ -162,38 +182,28 @@ implements Evaluatee @Override public synchronized Enumeration keys() { - // TODO: implement for GridField values too - return ctx.keys(); + Vector list = new Vector(ctx.keySet()); + GridField[] fields = gridTab.getFields(); + for(GridField field : fields) { + list.add(field.getColumnName()); + } + return list.elements(); } @Override public Set keySet() { - // TODO: implement for GridField values too - return ctx.keySet(); + Set set = new HashSet<>(ctx.keySet()); + GridField[] fields = gridTab.getFields(); + for(GridField field : fields) { + set.add(field.getColumnName()); + } + return set; } @Override public synchronized Object put(Object key, Object value) { - if (gridTab == null) - throw new IllegalStateException("Method not supported (gridTab is null)"); - if (gridTab.getCurrentRow() != row) - { - return ctx.put(key, value); - } - String columnName = getColumnName(key); - if (columnName == null) - { - return ctx.put(key, value); - } - GridField field = gridTab.getField(columnName); - if (field == null) - { - return ctx.put(key, value); - } - Object valueOld = field.getValue(); - field.setValue(value, false); - return valueOld; + return ctx.put(key, value); } @Override @@ -204,20 +214,37 @@ implements Evaluatee @Override public synchronized Object remove(Object key) { - // TODO: implement for GridField values too return ctx.remove(key); } @Override public synchronized int size() { - // TODO: implement for GridField values too - return ctx.size(); + return ctx.size() + gridTab.getFieldCount(); } @Override public synchronized String toString() { - // TODO: implement for GridField values too - return ctx.toString(); + StringBuilder builder = new StringBuilder(ctx.toString()); + if (builder.length() > 0) { + builder.deleteCharAt(builder.length()-1); + if (builder.length() > 1) { + builder.append(", "); + } + } else { + builder.append("{"); + } + GridField[] fields = gridTab.getFields(); + for(int i = 0; i < fields.length; i++) { + builder.append(fields[i].getColumnName()).append("="); + Object value = gridTab.getValue(getRow(), fields[i].getColumnName()); + builder.append(value==null ? "" : value.toString()); + if (i == fields.length-1) { + builder.append("}"); + } else { + builder.append(", "); + } + } + return builder.toString(); } @Override diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java index b3c582f6f3..08b7cbdd99 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java @@ -685,7 +685,7 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt } - Properties ctx = isDetailPane() ? new GridRowCtx(Env.getCtx(), gridTab, gridTab.getCurrentRow()) + Properties ctx = isDetailPane() ? new GridRowCtx(Env.getCtx(), gridTab) : gridPanelFields[i].getVO().ctx; //check context if (!gridPanelFields[i].isDisplayed(ctx, true)){ diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridView.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridView.java index 25b29ba933..936cdc4fe7 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridView.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridView.java @@ -1006,6 +1006,9 @@ public class GridView extends Vbox implements EventListener, IdSpace, IFi GridField mField = comp.getGridField(); if (mField != null) { + Properties ctx = isDetailPane() ? new GridRowCtx(Env.getCtx(), gridTab) + : mField.getVO().ctx; + if (noData) { comp.setReadWrite(false); @@ -1017,12 +1020,9 @@ public class GridView extends Vbox implements EventListener, IdSpace, IFi mField.refreshLookup(); comp.setReadWrite(rw); comp.setMandatory(mField.isMandatory(true)); // check context - comp.dynamicDisplay(); + comp.dynamicDisplay(ctx); } - Properties ctx = isDetailPane() ? new GridRowCtx(Env.getCtx(), gridTab, gridTab.getCurrentRow()) - : mField.getVO().ctx; - comp.setVisible((isHasCustomizeData || mField.isDisplayedGrid()) && mField.isDisplayed(ctx, true)); } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java index b818062846..a40c4fb50d 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java @@ -21,6 +21,7 @@ import java.awt.Color; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; +import java.util.Properties; import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.ClientInfo; @@ -542,10 +543,15 @@ public abstract class WEditor implements EventListener, PropertyChangeLis return this.mandatory; } + public void dynamicDisplay() + { + dynamicDisplay(gridField != null ? gridField.getVO().ctx : Env.getCtx()); + } + /** * allow subclass to perform dynamic loading of data */ - public void dynamicDisplay() + public void dynamicDisplay(Properties ctx) { if (gridField != null) { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java index 9a3ad5cbb1..1fff41fb75 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java @@ -24,6 +24,7 @@ import java.beans.PropertyChangeEvent; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Properties; import java.util.logging.Level; import org.adempiere.webui.ClientInfo; @@ -931,6 +932,16 @@ public class WSearchEditor extends WEditor implements ContextMenuListener, Value return null; } + + @Override + public void dynamicDisplay(Properties ctx) { + if (lookup instanceof MLookup) { + ((MLookup) lookup).getLookupInfo().ctx = ctx; + } + super.dynamicDisplay(ctx); + } + + static class CustomSearchBox extends Searchbox { /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java index 7311588092..e7482b4919 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java @@ -20,6 +20,7 @@ package org.adempiere.webui.editor; import java.beans.PropertyChangeEvent; import java.math.BigDecimal; import java.sql.Timestamp; +import java.util.Properties; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; @@ -40,6 +41,7 @@ import org.compiere.model.GridField; import org.compiere.model.Lookup; import org.compiere.model.MBPartnerLocation; import org.compiere.model.MLocation; +import org.compiere.model.MLookup; import org.compiere.model.MTable; import org.compiere.util.CCache; import org.compiere.util.CLogger; @@ -656,11 +658,17 @@ ContextMenuListener, IZoomableEditor } @Override - public void dynamicDisplay() - { + public void dynamicDisplay(Properties ctx) + { + if (lookup instanceof MLookup) + { + ((MLookup) lookup).getLookupInfo().ctx = ctx; + } if ((lookup != null) && (!lookup.isValidated() || !lookup.isLoaded() || (isReadWrite() && lookup.getSize() != getComponent().getItemCount()))) this.actionRefresh(); + + super.dynamicDisplay(ctx); } private static class EditorCombobox extends Combobox {