📄 mlookupfactory.java
字号:
}
// Not Translated
else
{
realSQL.append(TableName).append(".").append(KeyColumn).append(",");
if (KeyColumn.endsWith("_ID"))
realSQL.append("NULL,");
if (isValueDisplayed)
realSQL.append(TableName).append(".Value || '-' || ");
realSQL.append(TableName).append(".").append(DisplayColumn);
realSQL.append(",").append(TableName).append(".IsActive");
realSQL.append(" FROM ").append(TableName);
}
// add WHERE clause
MQuery zoomQuery = null;
if (WhereClause != null)
{
String where = WhereClause;
if (where.indexOf("@") != -1)
where = Env.parseContext(ctx, WindowNo, where, false);
if (where.length() == 0 && WhereClause.length() != 0)
s_log.severe ("Could not resolve: " + WhereClause);
// We have no context
if (where.length() != 0)
{
realSQL.append(" WHERE ").append(where);
if (where.indexOf(".") == -1)
s_log.log(Level.SEVERE, "getLookup_Table - " + TableName
+ ": WHERE should be fully qualified: " + WhereClause);
zoomQuery = new MQuery (TableName);
zoomQuery.addRestriction(where);
}
}
// Order By qualified term or by Name
if (OrderByClause != null)
{
realSQL.append(" ORDER BY ").append(OrderByClause);
if (OrderByClause.indexOf(".") == -1)
s_log.log(Level.SEVERE, "getLookup_Table - " + TableName
+ ": ORDER BY must fully qualified: " + OrderByClause);
}
else
realSQL.append(" ORDER BY 3");
s_log.finest("AD_Reference_Value_ID=" + AD_Reference_Value_ID + " - " + realSQL);
retValue = new MLookupInfo (realSQL.toString(), TableName,
TableName + "." + KeyColumn, ZoomWindow, ZoomWindowPO, zoomQuery);
s_cacheRefTable.put(key, retValue.cloneIt());
return retValue;
} // getLookup_Table
/**
* Get Embedded Lookup SQL for Table Lookup
* @param language report language
* @param BaseColumn base column name
* @param BaseTable base table name
* @param AD_Reference_Value_ID reference value
* @return SELECT Name FROM Table
*/
static public String getLookup_TableEmbed (Language language,
String BaseColumn, String BaseTable, int AD_Reference_Value_ID)
{
String sql = "SELECT t.TableName,ck.ColumnName AS KeyColumn,"
+ "cd.ColumnName AS DisplayColumn,rt.isValueDisplayed,cd.IsTranslated "
+ "FROM AD_Ref_Table rt"
+ " INNER JOIN AD_Table t ON (rt.AD_Table_ID=t.AD_Table_ID)"
+ " INNER JOIN AD_Column ck ON (rt.AD_Key=ck.AD_Column_ID)"
+ " INNER JOIN AD_Column cd ON (rt.AD_Display=cd.AD_Column_ID) "
+ "WHERE rt.AD_Reference_ID=?"
+ " AND rt.IsActive='Y' AND t.IsActive='Y'";
//
String KeyColumn, DisplayColumn, TableName;
boolean IsTranslated, isValueDisplayed;
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, AD_Reference_Value_ID);
ResultSet rs = pstmt.executeQuery();
if (!rs.next())
{
s_log.log(Level.SEVERE, "Cannot find Reference Table, ID=" + AD_Reference_Value_ID
+ ", Base=" + BaseTable + "." + BaseColumn);
rs.close();
pstmt.close();
return null;
}
TableName = rs.getString(1);
KeyColumn = rs.getString(2);
DisplayColumn = rs.getString(3);
isValueDisplayed = rs.getString(4).equals("Y");
IsTranslated = rs.getString(5).equals("Y");
rs.close();
pstmt.close();
}
catch (SQLException e)
{
s_log.log(Level.SEVERE, sql, e);
return null;
}
StringBuffer embedSQL = new StringBuffer("SELECT ");
// Translated
if (IsTranslated && !Env.isBaseLanguage(language, TableName))
{
if (isValueDisplayed)
embedSQL.append(TableName).append(".Value||'-'||");
embedSQL.append(TableName).append("_Trl.").append(DisplayColumn);
//
embedSQL.append(" FROM ").append(TableName)
.append(" INNER JOIN ").append(TableName).append("_TRL ON (")
.append(TableName).append(".").append(KeyColumn)
.append("=").append(TableName).append("_Trl.").append(KeyColumn)
.append(" AND ").append(TableName).append("_Trl.AD_Language='")
.append(language.getAD_Language()).append("')");
}
// Not Translated
else
{
if (isValueDisplayed)
embedSQL.append(TableName).append(".Value||'-'||");
embedSQL.append(TableName).append(".").append(DisplayColumn);
//
embedSQL.append(" FROM ").append(TableName);
}
embedSQL.append(" WHERE ").append(BaseTable).append(".").append(BaseColumn);
embedSQL.append("=").append(TableName).append(".").append(KeyColumn);
return embedSQL.toString();
} // getLookup_TableEmbed
/**************************************************************************
* Get Lookup SQL for direct Table Lookup
* @param ctx context for access
* @param language report language
* @param ColumnName column name
* @param WindowNo Window (for SOTrx)
* @return SELECT Key, NULL, Name, IsActive from Table (fully qualified)
*/
static private MLookupInfo getLookup_TableDir (Properties ctx, Language language,
int WindowNo, String ColumnName)
{
if (!ColumnName.endsWith("_ID"))
{
s_log.log(Level.SEVERE, "Key does not end with '_ID': " + ColumnName);
return null;
}
// Hardcoded BPartner Org
if (ColumnName.equals("AD_OrgBP_ID"))
ColumnName = "AD_Org_ID";
String TableName = ColumnName.substring(0,ColumnName.length()-3);
boolean isSOTrx = !"N".equals(Env.getContext(ctx, WindowNo, "IsSOTrx"));
int ZoomWindow = 0;
int ZoomWindowPO = 0;
// get display column names
String sql0 = "SELECT c.ColumnName,c.IsTranslated,c.AD_Reference_ID,"
+ "c.AD_Reference_Value_ID,t.AD_Window_ID,t.PO_Window_ID "
+ "FROM AD_Table t"
+ " INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID) "
+ "WHERE TableName=?"
+ " AND c.IsIdentifier='Y' "
+ "ORDER BY c.SeqNo";
//
String KeyColumn = ColumnName;
//
ArrayList<LookupDisplayColumn> list = new ArrayList<LookupDisplayColumn>();
boolean isTranslated = false;
//
try
{
PreparedStatement pstmt = DB.prepareStatement(sql0, null);
pstmt.setString(1, TableName);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
LookupDisplayColumn ldc = new LookupDisplayColumn (rs.getString(1),
"Y".equals(rs.getString(2)), rs.getInt(3), rs.getInt(4));
list.add (ldc);
// s_log.fine("getLookup_TableDir: " + ColumnName + " - " + ldc);
//
if (!isTranslated && ldc.IsTranslated)
isTranslated = true;
ZoomWindow = rs.getInt(5);
ZoomWindowPO = rs.getInt(6);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
s_log.log(Level.SEVERE, sql0, e);
return null;
}
// Do we have columns ?
if (list.size() == 0)
{
s_log.log(Level.SEVERE, "No Identifier records found: " + ColumnName);
return null;
}
StringBuffer realSQL = new StringBuffer("SELECT ");
realSQL.append(TableName).append(".").append(KeyColumn).append(",NULL,");
StringBuffer displayColumn = new StringBuffer();
int size = list.size();
// Get Display Column
for (int i = 0; i < size; i++)
{
if (i > 0)
displayColumn.append(" ||'_'|| " );
LookupDisplayColumn ldc = (LookupDisplayColumn)list.get(i);
// translated
if (ldc.IsTranslated && !Env.isBaseLanguage(language, TableName))
displayColumn.append(TableName).append("_Trl.").append(ldc.ColumnName);
// date
else if (DisplayType.isDate(ldc.DisplayType))
{
displayColumn.append(DB.TO_CHAR(TableName + "." + ldc.ColumnName, ldc.DisplayType, language.getAD_Language()));
}
// TableDir
else if ((ldc.DisplayType == DisplayType.TableDir || ldc.DisplayType == DisplayType.Search)
&& ldc.ColumnName.endsWith("_ID"))
{
String embeddedSQL = getLookup_TableDirEmbed(language, ldc.ColumnName, TableName);
if (embeddedSQL != null)
displayColumn.append("(").append(embeddedSQL).append(")");
}
// Table
else if (ldc.DisplayType == DisplayType.Table && ldc.AD_Reference_ID != 0)
{
String embeddedSQL = getLookup_TableEmbed (language, ldc.ColumnName, TableName, ldc.AD_Reference_ID);
if (embeddedSQL != null)
displayColumn.append("(").append(embeddedSQL).append(")");
}
// number
else if (DisplayType.isNumeric(ldc.DisplayType))
{
displayColumn.append(DB.TO_CHAR(TableName + "." + ldc.ColumnName, ldc.DisplayType, language.getAD_Language()));
}
// String
else
displayColumn.append(TableName).append(".").append(ldc.ColumnName);
}
realSQL.append(displayColumn.toString());
realSQL.append(",").append(TableName).append(".IsActive");
// Translation
if (isTranslated && !Env.isBaseLanguage(language, TableName))
{
realSQL.append(" FROM ").append(TableName)
.append(" INNER JOIN ").append(TableName).append("_TRL ON (")
.append(TableName).append(".").append(KeyColumn)
.append("=").append(TableName).append("_Trl.").append(KeyColumn)
.append(" AND ").append(TableName).append("_Trl.AD_Language='")
.append(language.getAD_Language()).append("')");
}
else // no translation
{
realSQL.append(" FROM ").append(TableName);
}
// Order by Display
realSQL.append(" ORDER BY 3");
MQuery zoomQuery = null; // corrected in VLookup
if (CLogMgt.isLevelFinest())
s_log.fine("ColumnName=" + ColumnName + " - " + realSQL);
MLookupInfo lInfo = new MLookupInfo(realSQL.toString(), TableName,
TableName + "." + KeyColumn, ZoomWindow, ZoomWindowPO, zoomQuery);
return lInfo;
} // getLookup_TableDir
/**
* Get embedded SQL for TableDir Lookup (no translation)
*
* @param language report language
* @param ColumnName column name
* @param BaseTable base table
* @return SELECT Column FROM TableName WHERE BaseTable.ColumnName=TableName.ColumnName
*/
static public String getLookup_TableDirEmbed (Language language, String ColumnName, String BaseTable)
{
return getLookup_TableDirEmbed (language, ColumnName, BaseTable, ColumnName);
} // getLookup_TableDirEmbed
/**
* Get embedded SQL for TableDir Lookup (no translation)
*
* @param language report language
* @param ColumnName column name
* @param BaseTable base table
* @param BaseColumn base column
* @return SELECT Column FROM TableName WHERE BaseTable.BaseColumn=TableName.ColumnName
*/
static public String getLookup_TableDirEmbed (Language language,
String ColumnName, String BaseTable, String BaseColumn)
{
String TableName = ColumnName.substring(0,ColumnName.length()-3);
// get display column name (first identifier column)
String sql = "SELECT c.ColumnName,c.IsTranslated,c.AD_Reference_ID,c.AD_Reference_Value_ID "
+ "FROM AD_Table t INNER JOIN AD_Column c ON (t.AD_Table_ID=c.AD_Table_ID) "
+ "WHERE TableName=?"
+ " AND c.IsIdentifier='Y' "
+ "ORDER BY c.SeqNo";
//
ArrayList<LookupDisplayColumn> list = new ArrayList<LookupDisplayColumn>();
//
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setString(1, TableName);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
LookupDisplayColumn ldc = new LookupDisplayColumn (rs.getString(1),
"Y".equals(rs.getString(2)), rs.getInt(3), rs.getInt(4));
list.add (ldc);
// s_log.fine("getLookup_TableDirEmbed: " + ColumnName + " - " + ldc);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
s_log.log(Level.SEVERE, sql, e);
return "";
}
// Do we have columns ?
if (list.size() == 0)
{
s_log.log(Level.SEVERE, "No Identifier records found: " + ColumnName);
return "";
}
//
StringBuffer embedSQL = new StringBuffer("SELECT ");
int size = list.size();
for (int i = 0; i < size; i++)
{
if (i > 0)
embedSQL.append("||' - '||" );
LookupDisplayColumn ldc = (LookupDisplayColumn)list.get(i);
// date, number
if (DisplayType.isDate(ldc.DisplayType) || DisplayType.isNumeric(ldc.DisplayType))
{
embedSQL.append(DB.TO_CHAR(TableName + "." + ldc.ColumnName, ldc.DisplayType, language.getAD_Language()));
}
// TableDir
else if ((ldc.DisplayType == DisplayType.TableDir || ldc.DisplayType == DisplayType.Search)
&& ldc.ColumnName.endsWith("_ID"))
{
String embeddedSQL = getLookup_TableDirEmbed(language, ldc.ColumnName, TableName);
embedSQL.append("(").append(embeddedSQL).append(")");
}
// String
else
embedSQL.append(TableName).append(".").append(ldc.ColumnName);
}
embedSQL.append(" FROM ").append(TableName);
embedSQL.append(" WHERE ").append(BaseTable).append(".").append(BaseColumn);
embedSQL.append("=").append(TableName).append(".").append(ColumnName);
//
return embedSQL.toString();
} // getLookup_TableDirEmbed
} // MLookupFactory
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -