From 5130d05ce091324f2b228f3154e2402b419fe08a Mon Sep 17 00:00:00 2001 From: teo_sarca Date: Wed, 14 Feb 2007 13:49:13 +0000 Subject: [PATCH] bug fix [ 1659737 ] InfoGeneral not working with virtual columns --- .../org/compiere/apps/search/InfoGeneral.java | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/client/src/org/compiere/apps/search/InfoGeneral.java b/client/src/org/compiere/apps/search/InfoGeneral.java index 0adb682238..d04bff5ef8 100644 --- a/client/src/org/compiere/apps/search/InfoGeneral.java +++ b/client/src/org/compiere/apps/search/InfoGeneral.java @@ -32,7 +32,12 @@ import org.compiere.util.*; /** * Generic Table Search - * + *

+ * Change log: + *

+ * * @author Jorg Janke * @version $Id: InfoGeneral.java,v 1.3 2006/10/06 00:42:38 jjanke Exp $ */ @@ -76,6 +81,8 @@ public class InfoGeneral extends Info private Info_Column[] m_generalLayout; /** list of query columns */ private ArrayList m_queryColumns = new ArrayList(); + /** list of query columns (SQL) */ + private ArrayList m_queryColumnsSql = new ArrayList(); // Static data private CLabel label1 = new CLabel(); @@ -185,7 +192,7 @@ public class InfoGeneral extends Info private boolean initInfoTable () { // Get Query Columns ------------------------------------------------- - String sql = "SELECT c.ColumnName, t.AD_Table_ID, t.TableName " + String sql = "SELECT c.ColumnName, t.AD_Table_ID, t.TableName, c.ColumnSql " + "FROM AD_Table t" + " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID)" + "WHERE c.AD_Reference_ID=10" @@ -206,6 +213,12 @@ public class InfoGeneral extends Info while (rs.next()) { m_queryColumns.add(rs.getString(1)); + String columnSql = rs.getString(4); + if (columnSql != null && columnSql.length() > 0) + m_queryColumnsSql.add(columnSql); + else + m_queryColumnsSql.add(rs.getString(1)); + if (AD_Table_ID == 0) { AD_Table_ID = rs.getInt(2); @@ -229,8 +242,10 @@ public class InfoGeneral extends Info log.finest("Table " + tableName + ", ID=" + AD_Table_ID + ", QueryColumns #" + m_queryColumns.size()); // Only 4 Query Columns - while (m_queryColumns.size() > 4) + while (m_queryColumns.size() > 4) { m_queryColumns.remove(m_queryColumns.size()-1); + m_queryColumnsSql.remove(m_queryColumnsSql.size()-1); + } // Set Title String title = Msg.translate(Env.getCtx(), tableName + "_ID"); // best bet if (title.endsWith("_ID")) @@ -240,7 +255,7 @@ public class InfoGeneral extends Info // Get Display Columns ----------------------------------------------- ArrayList list = new ArrayList(); - sql = "SELECT c.ColumnName, c.AD_Reference_ID, c.IsKey, f.IsDisplayed, c.AD_Reference_Value_ID " + sql = "SELECT c.ColumnName, c.AD_Reference_ID, c.IsKey, f.IsDisplayed, c.AD_Reference_Value_ID, c.ColumnSql " + "FROM AD_Column c" + " INNER JOIN AD_Table t ON (c.AD_Table_ID=t.AD_Table_ID)" + " INNER JOIN AD_Tab tab ON (t.AD_Window_ID=tab.AD_Window_ID)" @@ -263,8 +278,12 @@ public class InfoGeneral extends Info boolean isKey = rs.getString(3).equals("Y"); boolean isDisplayed = rs.getString(4).equals("Y"); int AD_Reference_Value_ID = rs.getInt(5); + // teo_sarca + String columnSql = rs.getString(6); + if (columnSql == null || columnSql.length() == 0) + columnSql = columnName; // Default - StringBuffer colSql = new StringBuffer(columnName); + StringBuffer colSql = new StringBuffer(columnSql); Class colClass = null; // if (isKey) @@ -291,12 +310,12 @@ public class InfoGeneral extends Info { if (Env.isBaseLanguage(Env.getCtx(), "AD_Ref_List")) colSql = new StringBuffer("(SELECT l.Name FROM AD_Ref_List l WHERE l.AD_Reference_ID=") - .append(AD_Reference_Value_ID).append(" AND l.Value=").append(columnName) + .append(AD_Reference_Value_ID).append(" AND l.Value=").append(columnSql) .append(") AS ").append(columnName); else colSql = new StringBuffer("(SELECT t.Name FROM AD_Ref_List l, AD_Ref_List_Trl t " + "WHERE l.AD_Ref_List_ID=t.AD_Ref_List_ID AND l.AD_Reference_ID=") - .append(AD_Reference_Value_ID).append(" AND l.Value=").append(columnName) + .append(AD_Reference_Value_ID).append(" AND l.Value=").append(columnSql) .append(" AND t.AD_Language='").append(Env.getAD_Language(Env.getCtx())) .append("') AS ").append(columnName); colClass = String.class; @@ -361,7 +380,7 @@ public class InfoGeneral extends Info { if (!(value.equals("") || value.equals("%")) && index < m_queryColumns.size()) { - sql.append(" AND UPPER(").append(m_queryColumns.get(index).toString()).append(") LIKE '"); + sql.append(" AND UPPER(").append(m_queryColumnsSql.get(index).toString()).append(") LIKE '"); sql.append(value); if (value.endsWith("%")) sql.append("'");