📄 vlookup.java
字号:
*/
private String getDirectAccessSQL (String text)
{
StringBuffer sql = new StringBuffer();
m_tableName = m_columnName.substring(0, m_columnName.length()-3);
m_keyColumnName = m_columnName;
//
if (m_columnName.equals("M_Product_ID"))
{
// Reset
Env.setContext(Env.getCtx(), Env.WINDOW_INFO, Env.TAB_INFO, "M_Product_ID", "0");
Env.setContext(Env.getCtx(), Env.WINDOW_INFO, Env.TAB_INFO, "M_AttributeSetInstance_ID", "0");
//
sql.append("SELECT M_Product_ID FROM M_Product WHERE (UPPER(Value) LIKE ")
.append(DB.TO_STRING(text))
.append(" OR UPPER(Name) LIKE ").append(DB.TO_STRING(text))
.append(" OR UPC LIKE ").append(DB.TO_STRING(text)).append(")");
}
else if (m_columnName.equals("C_BPartner_ID"))
{
sql.append("SELECT C_BPartner_ID FROM C_BPartner WHERE (UPPER(Value) LIKE ")
.append(DB.TO_STRING(text))
.append(" OR UPPER(Name) LIKE ").append(DB.TO_STRING(text)).append(")");
}
else if (m_columnName.equals("C_Order_ID"))
{
sql.append("SELECT C_Order_ID FROM C_Order WHERE UPPER(DocumentNo) LIKE ")
.append(DB.TO_STRING(text));
}
else if (m_columnName.equals("C_Invoice_ID"))
{
sql.append("SELECT C_Invoice_ID FROM C_Invoice WHERE UPPER(DocumentNo) LIKE ")
.append(DB.TO_STRING(text));
}
else if (m_columnName.equals("M_InOut_ID"))
{
sql.append("SELECT M_InOut_ID FROM M_InOut WHERE UPPER(DocumentNo) LIKE ")
.append(DB.TO_STRING(text));
}
else if (m_columnName.equals("C_Payment_ID"))
{
sql.append("SELECT C_Payment_ID FROM C_Payment WHERE UPPER(DocumentNo) LIKE ")
.append(DB.TO_STRING(text));
}
else if (m_columnName.equals("GL_JournalBatch_ID"))
{
sql.append("SELECT GL_JournalBatch_ID FROM GL_JournalBatch WHERE UPPER(DocumentNo) LIKE ")
.append(DB.TO_STRING(text));
}
else if (m_columnName.equals("SalesRep_ID"))
{
sql.append("SELECT AD_User_ID FROM AD_User WHERE UPPER(Name) LIKE ")
.append(DB.TO_STRING(text));
m_tableName = "AD_User";
m_keyColumnName = "AD_User_ID";
}
// Predefined
if (sql.length() > 0)
{
String wc = getWhereClause();
if (wc != null && wc.length() > 0)
sql.append(" AND ").append(wc);
sql.append(" AND IsActive='Y'");
// ***
log.finest(m_columnName + " (predefined) " + sql.toString());
return MRole.getDefault().addAccessSQL(sql.toString(),
m_tableName, MRole.SQL_NOTQUALIFIED, MRole.SQL_RO);
}
// Check if it is a Table Reference
if (m_lookup != null && m_lookup instanceof MLookup)
{
int AD_Reference_ID = ((MLookup)m_lookup).getAD_Reference_Value_ID();
if (AD_Reference_ID != 0)
{
String query = "SELECT kc.ColumnName, dc.ColumnName, t.TableName "
+ "FROM AD_Ref_Table rt"
+ " INNER JOIN AD_Column kc ON (rt.AD_Key=kc.AD_Column_ID)"
+ " INNER JOIN AD_Column dc ON (rt.AD_Display=dc.AD_Column_ID)"
+ " INNER JOIN AD_Table t ON (rt.AD_Table_ID=t.AD_Table_ID) "
+ "WHERE rt.AD_Reference_ID=?";
String displayColumnName = null;
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(query, null);
pstmt.setInt(1, AD_Reference_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
m_keyColumnName = rs.getString(1);
displayColumnName = rs.getString(2);
m_tableName = rs.getString(3);
}
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, query, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
if (displayColumnName != null)
{
sql = new StringBuffer();
sql.append("SELECT ").append(m_keyColumnName)
.append(" FROM ").append(m_tableName)
.append(" WHERE UPPER(").append(displayColumnName)
.append(") LIKE ").append(DB.TO_STRING(text))
.append(" AND IsActive='Y'");
String wc = getWhereClause();
if (wc != null && wc.length() > 0)
sql.append(" AND ").append(wc);
// ***
log.finest(m_columnName + " (Table) " + sql.toString());
return MRole.getDefault().addAccessSQL(sql.toString(),
m_tableName, MRole.SQL_NOTQUALIFIED, MRole.SQL_RO);
}
} // Table Reference
} // MLookup
/** Check Well Known Columns of Table - assumes TableDir **/
String query = "SELECT t.TableName, c.ColumnName "
+ "FROM AD_Column c "
+ " INNER JOIN AD_Table t ON (c.AD_Table_ID=t.AD_Table_ID AND t.IsView='N') "
+ "WHERE (c.ColumnName IN ('DocumentNo', 'Value', 'Name') OR c.IsIdentifier='Y')"
+ " AND c.AD_Reference_ID IN (10,14)"
+ " AND EXISTS (SELECT * FROM AD_Column cc WHERE cc.AD_Table_ID=t.AD_Table_ID"
+ " AND cc.IsKey='Y' AND cc.ColumnName=?)";
m_keyColumnName = m_columnName;
sql = new StringBuffer();
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(query, null);
pstmt.setString(1, m_keyColumnName);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
if (sql.length() != 0)
sql.append(" OR ");
m_tableName = rs.getString(1);
sql.append("UPPER(").append(rs.getString(2)).append(") LIKE ").append(DB.TO_STRING(text));
}
rs.close();
pstmt.close();
pstmt = null;
}
catch (SQLException ex)
{
log.log(Level.SEVERE, query, ex);
}
try
{
if (pstmt != null)
pstmt.close();
}
catch (SQLException ex1)
{
}
pstmt = null;
//
if (sql.length() == 0)
{
log.log(Level.SEVERE, m_columnName + " (TableDir) - no standard/identifier columns");
return "";
}
//
StringBuffer retValue = new StringBuffer ("SELECT ")
.append(m_columnName).append(" FROM ").append(m_tableName)
.append(" WHERE ").append(sql)
.append(" AND IsActive='Y'");
String wc = getWhereClause();
if (wc != null && wc.length() > 0)
retValue.append(" AND ").append(wc);
// ***
log.finest(m_columnName + " (TableDir) " + sql.toString());
return MRole.getDefault().addAccessSQL(retValue.toString(),
m_tableName, MRole.SQL_NOTQUALIFIED, MRole.SQL_RO);
} // getDirectAccessSQL
/**
* Action - Special BPartner Screen
* @param newRecord true if new record should be created
*/
private void actionBPartner (boolean newRecord)
{
VBPartner vbp = new VBPartner (Env.getFrame(this), m_lookup.getWindowNo());
int BPartner_ID = 0;
// if update, get current value
if (!newRecord)
{
if (m_value instanceof Integer)
BPartner_ID = ((Integer)m_value).intValue();
else if (m_value != null)
BPartner_ID = Integer.parseInt(m_value.toString());
}
vbp.loadBPartner (BPartner_ID);
vbp.setVisible(true);
// get result
int result = vbp.getC_BPartner_ID();
if (result == 0 // 0 = not saved
&& result == BPartner_ID) // the same
return;
// Maybe new BPartner - put in cache
m_lookup.getDirect(new Integer(result), false, true);
actionCombo (new Integer(result)); // data binding
} // actionBPartner
/**
* Action - Zoom
* @param selectedItem item
*/
private void actionZoom (Object selectedItem)
{
if (m_lookup == null)
return;
//
MQuery zoomQuery = m_lookup.getZoomQuery();
Object value = getValue();
if (value == null)
value = selectedItem;
// If not already exist or exact value
if (zoomQuery == null || value != null)
{
zoomQuery = new MQuery(); // ColumnName might be changed in MTab.validateQuery
zoomQuery.addRestriction(m_columnName, MQuery.EQUAL, value);
zoomQuery.setRecordCount(1); // guess
}
int AD_Window_ID = m_lookup.getZoom(zoomQuery);
//
log.info(m_columnName + " - AD_Window_ID=" + AD_Window_ID
+ " - Query=" + zoomQuery + " - Value=" + value);
//
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
//
AWindow frame = new AWindow();
if (!frame.initWindow(AD_Window_ID, zoomQuery))
{
setCursor(Cursor.getDefaultCursor());
ValueNamePair pp = CLogger.retrieveError();
String msg = pp==null ? "AccessTableNoView" : pp.getValue();
ADialog.error(m_lookup.getWindowNo(), this, msg, pp==null ? "" : pp.getName());
}
else
AEnv.showCenterScreen(frame);
// async window - not able to get feedback
frame = null;
//
setCursor(Cursor.getDefaultCursor());
} // actionZoom
/**
* Action - Refresh
*/
private void actionRefresh()
{
if (m_lookup == null)
return;
//
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
//
Object obj = m_combo.getSelectedItem();
log.info(m_columnName + " #" + m_lookup.getSize() + ", Selected=" + obj);
m_lookup.refresh();
if (m_lookup.isValidated())
m_lookup.fillComboBox(isMandatory(), false, false, false);
else
m_lookup.fillComboBox(isMandatory(), true, false, false);
m_combo.setSelectedItem(obj);
// m_combo.revalidate();
//
setCursor(Cursor.getDefaultCursor());
log.info(m_columnName + " #" + m_lookup.getSize() + ", Selected=" + m_combo.getSelectedItem());
} // actionRefresh
/**************************************************************************
* Focus Listener for ComboBoxes with missing Validation or invalid entries
* - Requery listener for updated list
* @param e FocusEvent
*/
public void focusGained (FocusEvent e)
{
if (e.getSource() != m_combo || e.isTemporary() || m_haveFocus || m_lookup == null)
return;
if (m_lookup.isValidated() && !m_lookup.hasInactive())
return;
//
m_haveFocus = true; // prevents calling focus gained twice
m_settingFocus = true; // prevents actionPerformed
//
Object obj = m_lookup.getSelectedItem();
log.config(m_columnName
+ " - Start Count=" + m_combo.getItemCount() + ", Selected=" + obj);
// log.fine( "VLookupHash=" + this.hashCode());
m_lookup.fillComboBox(isMandatory(), true, true, true); // only validated & active & temporary
log.config(m_columnName
+ " - Update Count=" + m_combo.getItemCount() + ", Selected=" + m_lookup.getSelectedItem());
m_lookup.setSelectedItem(obj);
log.config(m_columnName
+ " - Selected Count=" + m_combo.getItemCount() + ", Selected=" + m_lookup.getSelectedItem());
//
m_settingFocus = false;
} // focusGained
/**
* Reset Selection List
* @param e FocusEvent
*/
public void focusLost(FocusEvent e)
{
if (e.isTemporary()
|| m_lookup == null
|| !m_button.isEnabled() ) // set by actionButton
return;
// Text Lost focus
if (e.getSource() == m_text)
{
String text = m_text.getText();
log.config(m_columnName + " (Text) " + m_columnName + " = " + m_value + " - " + text);
m_haveFocus = false;
// Skip if empty
if ((m_value == null
&& m_text.getText().length() == 0))
return;
if (m_lastDisplay.equals(text))
return;
//
actionText(); // re-display
return;
}
// Combo lost focus
if (e.getSource() != m_combo)
return;
if (m_lookup.isValidated() && !m_lookup.hasInactive())
return;
//
m_settingFocus = true; // prevents actionPerformed
//
log.config(m_columnName + " = " + m_combo.getSelectedItem());
Object obj = m_combo.getSelectedItem();
// set original model
if (!m_lookup.isValidated())
m_lookup.fillComboBox(true); // previous selection
// Set value
if (obj != null)
{
m_combo.setSelectedItem(obj);
// original model may not have item
if (!m_combo.getSelectedItem().equals(obj))
{
log.fine(m_columnName + " - added to combo - " + obj);
m_combo.addItem(obj);
m_combo.setSelectedItem(obj);
}
}
// actionCombo(getValue());
m_settingFocus = false;
m_haveFocus = false; // can gain focus again
} // focusLost
/**
* Set ToolTip
* @param text tool tip text
*/
public void setToolTipText(String text)
{
super.setToolTipText(text);
m_button.setToolTipText(text);
m_text.setToolTipText(text);
m_combo.setToolTipText(text);
} // setToolTipText
/**
* Refresh Query
* @return count
*/
public int refresh()
{
if (m_lookup == null)
return -1;
return m_lookup.refresh();
} // refresh
} // VLookup
/*****************************************************************************
* Mouse Listener for Popup Menu
*/
final class VLookup_mouseAdapter extends java.awt.event.MouseAdapter
{
/**
* Constructor
* @param adaptee adaptee
*/
VLookup_mouseAdapter(VLookup adaptee)
{
this.adaptee = adaptee;
} // VLookup_mouseAdapter
private VLookup adaptee;
/**
* Mouse Listener
* @param e MouseEvent
*/
public void mouseClicked(MouseEvent e)
{
// System.out.println("mouseClicked " + e.getID() + " " + e.getSource().getClass().toString());
// popup menu
if (SwingUtilities.isRightMouseButton(e))
adaptee.popupMenu.show((Component)e.getSource(), e.getX(), e.getY());
} // mouse Clicked
} // VLookup_mouseAdapter
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -