From f60f599619ec4206e4dd4626b3472f7ca0133fee Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Thu, 3 Oct 2024 05:06:31 +0200 Subject: [PATCH] IDEMPIERE-6013 Implement a way to filter dinamically records on MRole.addAccessSQL (#2471) - fix queries with alias (like InfoWindow) - fix InfoWindow issue when the table has no alias --- org.adempiere.base/src/org/compiere/model/MRole.java | 8 ++++++-- .../WEB-INF/src/org/adempiere/webui/info/InfoWindow.java | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MRole.java b/org.adempiere.base/src/org/compiere/model/MRole.java index efe4261a89..803c59cff8 100644 --- a/org.adempiere.base/src/org/compiere/model/MRole.java +++ b/org.adempiere.base/src/org/compiere/model/MRole.java @@ -2157,7 +2157,7 @@ public final class MRole extends X_AD_Role implements ImmutablePOSupport keyColumnName += getIdColumnName(TableName); //log.fine("addAccessSQL - " + TableName + "(" + AD_Table_ID + ") " + keyColumnName); - String recordWhere = getRecordWhere (AD_Table_ID, keyColumnName, rw); + String recordWhere = getRecordWhere (AD_Table_ID, keyColumnName, rw, TableName, ti[i].getSynonym()); if (recordWhere.length() > 0) { retSQL.append(" AND ").append(recordWhere); @@ -2492,9 +2492,11 @@ public final class MRole extends X_AD_Role implements ImmutablePOSupport * @param AD_Table_ID table * @param keyColumnName (fully qualified) key column name * @param rw true if read write + * @param tableName + * @param alias * @return where clause or "" */ - private String getRecordWhere (int AD_Table_ID, String keyColumnName, boolean rw) + private String getRecordWhere (int AD_Table_ID, String keyColumnName, boolean rw, String tableName, String alias) { loadRecordAccess(false); // @@ -2556,6 +2558,8 @@ public final class MRole extends X_AD_Role implements ImmutablePOSupport if (sb.length() > 0) sb.append(" AND "); String wherevr = Env.parseContext(p_ctx, 0, tvr.getCode(), false); + if (! Util.isEmpty(alias) && ! alias.equals(tableName)) + wherevr = wherevr.replaceAll("\\b" + tableName + "\\b", alias); sb.append(" (").append(wherevr).append(") "); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java index c0a40f04ea..663d239e7c 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/info/InfoWindow.java @@ -1221,7 +1221,10 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL if (p_whereClause != null && p_whereClause.trim().length() > 0) { builder.append(" AND "); } - builder.append(tableInfos[0].getSynonym()).append(".IsActive='Y'"); + String qualifiedTable = tableInfos[0].getSynonym(); + if (Util.isEmpty(qualifiedTable)) + qualifiedTable = tableInfos[0].getTableName(); + builder.append(qualifiedTable).append(".IsActive='Y'"); } int count = 0; int idx = 0;