📄 mfield.java
字号:
* (b) SQL Default
* (c) Column Default // system integrity
* (d) User Preference
* (e) System Preference
* (f) DataType Defaults
*
* Don't default from Context => use explicit defaultValue
* (would otherwise copy previous record)
* </pre>
* @return default value or null
*/
public Object getDefault()
{
/**
* (a) Key/Parent/IsActive/SystemAccess
*/
// No defaults for these fields
if (m_vo.IsKey || m_vo.displayType == DisplayType.RowID || m_vo.displayType == DisplayType.Binary)
return null;
// Set Parent to context if not explitly set
if (isParentValue()
&& (m_vo.DefaultValue == null || m_vo.DefaultValue.length() == 0))
{
String parent = Env.getContext(m_vo.ctx, m_vo.WindowNo, m_vo.ColumnName);
log.fine("[Parent] " + m_vo.ColumnName + "=" + parent);
return createDefault(parent);
}
// Always Active
if (m_vo.ColumnName.equals("IsActive"))
{
log.fine("[IsActive] " + m_vo.ColumnName + "=Y");
return "Y";
}
// Set Client & Org to System, if System access
if (X_AD_Table.ACCESSLEVEL_SystemOnly.equals(Env.getContext(m_vo.ctx, m_vo.WindowNo, m_vo.TabNo, "AccessLevel"))
&& (m_vo.ColumnName.equals("AD_Client_ID") || m_vo.ColumnName.equals("AD_Org_ID")))
{
log.fine("[SystemAccess] " + m_vo.ColumnName + "=0");
return new Integer(0);
}
// Set Org to System, if Client access
else if (X_AD_Table.ACCESSLEVEL_SystemPlusClient.equals(Env.getContext(m_vo.ctx, m_vo.WindowNo, m_vo.TabNo, "AccessLevel"))
&& m_vo.ColumnName.equals("AD_Org_ID"))
{
log.fine("[ClientAccess] " + m_vo.ColumnName + "=0");
return new Integer(0);
}
/**
* (b) SQL Statement (for data integity & consistency)
*/
String defStr = "";
if (m_vo.DefaultValue.startsWith("@SQL="))
{
String sql = m_vo.DefaultValue.substring(5); // w/o tag
sql = Env.parseContext(m_vo.ctx, m_vo.WindowNo, sql, false, true); // replace variables
if (sql.equals(""))
{
log.log(Level.SEVERE, "(" + m_vo.ColumnName + ") - Default SQL variable parse failed: "
+ m_vo.DefaultValue);
}
else
{
try
{
PreparedStatement stmt = DB.prepareStatement(sql, null);
ResultSet rs = stmt.executeQuery();
if (rs.next())
defStr = rs.getString(1);
else
log.log(Level.SEVERE, "(" + m_vo.ColumnName + ") - no Result: " + sql);
rs.close();
stmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, "(" + m_vo.ColumnName + ") " + sql, e);
}
}
if (!defStr.equals(""))
{
log.fine("[SQL] " + m_vo.ColumnName + "=" + defStr);
return createDefault(defStr);
}
} // SQL Statement
/**
* (c) Field DefaultValue === similar code in AStartRPDialog.getDefault ===
*/
if (!m_vo.DefaultValue.equals("") && !m_vo.DefaultValue.startsWith("@SQL="))
{
defStr = "";
// It is one or more variables/constants
StringTokenizer st = new StringTokenizer(m_vo.DefaultValue, ",;", false);
while (st.hasMoreTokens())
{
defStr = st.nextToken().trim();
if (defStr.equals("@SysDate@")) // System Time
return new Timestamp (System.currentTimeMillis());
else if (defStr.indexOf('@') != -1) // it is a variable
defStr = Env.getContext(m_vo.ctx, m_vo.WindowNo, defStr.replace('@',' ').trim());
else if (defStr.indexOf("'") != -1) // it is a 'String'
defStr = defStr.replace('\'', ' ').trim();
if (!defStr.equals(""))
{
log.fine("[DefaultValue] " + m_vo.ColumnName + "=" + defStr);
return createDefault(defStr);
}
} // while more Tokens
} // Default value
/**
* (d) Preference (user) - P|
*/
defStr = Env.getPreference (m_vo.ctx, m_vo.AD_Window_ID, m_vo.ColumnName, false);
if (!defStr.equals(""))
{
log.fine("[UserPreference] " + m_vo.ColumnName + "=" + defStr);
return createDefault(defStr);
}
/**
* (e) Preference (System) - # $
*/
defStr = Env.getPreference (m_vo.ctx, m_vo.AD_Window_ID, m_vo.ColumnName, true);
if (!defStr.equals(""))
{
log.fine("[SystemPreference] " + m_vo.ColumnName + "=" + defStr);
return createDefault(defStr);
}
/**
* (f) DataType defaults
*/
// Button to N
if (m_vo.displayType == DisplayType.Button && !m_vo.ColumnName.endsWith("_ID"))
{
log.fine("[Button=N] " + m_vo.ColumnName);
return "N";
}
// CheckBoxes default to No
if (m_vo.displayType == DisplayType.YesNo)
{
log.fine("[YesNo=N] " + m_vo.ColumnName);
return "N";
}
// lookups with one value
// if (DisplayType.isLookup(m_vo.displayType) && m_lookup.getSize() == 1)
// {
// /** @todo default if only one lookup value */
// }
// IDs remain null
if (m_vo.ColumnName.endsWith("_ID"))
{
log.fine("[ID=null] " + m_vo.ColumnName);
return null;
}
// actual Numbers default to zero
if (DisplayType.isNumeric(m_vo.displayType))
{
log.fine("[Number=0] " + m_vo.ColumnName);
return createDefault("0");
}
/**
* No resolution
*/
log.fine("[NONE] " + m_vo.ColumnName);
return null;
} // getDefault
/**
* Create Default Object type.
* <pre>
* Integer (IDs, Integer)
* BigDecimal (Numbers)
* Timestamp (Dates)
* Boolean (YesNo)
* default: String
* </pre>
* @param value string
* @return type dependent converted object
*/
private Object createDefault (String value)
{
// true NULL
if (value == null || value.toString().length() == 0)
return null;
// see also MTable.readData
try
{
// IDs & Integer & CreatedBy/UpdatedBy
if (m_vo.ColumnName.endsWith("atedBy")
|| m_vo.ColumnName.endsWith("_ID"))
{
try // defaults -1 => null
{
int ii = Integer.parseInt(value);
if (ii < 0)
return null;
return new Integer(ii);
}
catch (Exception e)
{
log.warning("Cannot parse: " + value + " - " + e.getMessage());
}
return new Integer(0);
}
// Integer
if (m_vo.displayType == DisplayType.Integer)
return new Integer(value);
// Number
if (DisplayType.isNumeric(m_vo.displayType))
return new BigDecimal(value);
// Timestamps
if (DisplayType.isDate(m_vo.displayType))
{
java.util.Date date = DisplayType.getDateFormat_JDBC().parse (value);
return new Timestamp (date.getTime());
}
// Boolean
if (m_vo.displayType == DisplayType.YesNo)
return new Boolean ("Y".equals(value));
// Default
return value;
}
catch (Exception e)
{
log.log(Level.SEVERE, m_vo.ColumnName + " - " + e.getMessage());
}
return null;
} // createDefault
/**
* Validate initial Field Value.
* Called from MTab.dataNew and MTab.setCurrentRow when inserting
* @return true if valid
*/
public boolean validateValue()
{
// null
if (m_value == null || m_value.toString().length() == 0)
{
if (isMandatory(true))
{
m_error = true;
return false;
}
else
return true;
}
// Search not cached
if (getDisplayType() == DisplayType.Search && m_lookup != null)
{
// need to re-set invalid values - OK BPartner in PO Line - not OK SalesRep in Invoice
if (m_lookup.getDirect(m_value, false, true) == null)
{
log.finest(m_vo.ColumnName + " Serach not valid - set to null");
setValue(null, m_inserting);
m_error = true;
return false;
}
return true;
}
// cannot be validated
if (!isLookup()
|| m_lookup.containsKey(m_value))
return true;
// it's not null, a lookup and does not have the key
if (isKey() || isParentValue()) // parents/ket are not validated
return true;
log.finest(m_vo.ColumnName + " - set to null");
setValue(null, m_inserting);
m_error = true;
return false;
} // validateValue
/**************************************************************************
* Is the Column Visible ?
* @param checkContext - check environment (requires correct row position)
* @return true, if visible
*/
public boolean isDisplayed (boolean checkContext)
{
// ** static content **
// not displayed
if (!m_vo.IsDisplayed)
return false;
// no restrictions
if (m_vo.DisplayLogic.equals(""))
return true;
// ** dynamic content **
if (checkContext)
{
boolean retValue = Evaluator.evaluateLogic(this, m_vo.DisplayLogic);
log.finest(m_vo.ColumnName
+ " (" + m_vo.DisplayLogic + ") => " + retValue);
return retValue;
}
return true;
} // isDisplayed
/**
* Get Variable Value (Evaluatee)
* @param variableName name
* @return value
*/
public String get_ValueAsString (String variableName)
{
return Env.getContext (m_vo.ctx, m_vo.WindowNo, variableName, true);
} // get_ValueAsString
/**
* Add Display Dependencies to given List.
* Source: DisplayLogic
* @param list list to be added to
*/
public void addDependencies (ArrayList<String> list)
{
// nothing to parse
if (!m_vo.IsDisplayed || m_vo.DisplayLogic.equals(""))
return;
StringTokenizer logic = new StringTokenizer(m_vo.DisplayLogic.trim(), "&|", false);
while (logic.hasMoreTokens())
{
StringTokenizer st = new StringTokenizer(logic.nextToken().trim(), "!=^", false);
while (st.hasMoreTokens())
{
String tag = st.nextToken().trim(); // get '@tag@'
// Do we have a @variable@ ?
if (tag.indexOf('@') != -1)
{
tag = tag.replace('@', ' ').trim(); // strip 'tag'
// Add columns (they might not be a column, but then it is static)
if (!list.contains(tag))
list.add(tag);
}
}
}
} // addDependencies
/**************************************************************************
* Get Column Name
* @return column name
*/
public String getColumnName()
{
return m_vo.ColumnName;
} // getColumnName
/**
* Get Column Name or SQL .. with/without AS
* @param withAS include AS ColumnName for virtual columns in select statements
* @return column name
*/
public String getColumnSQL(boolean withAS)
{
if (m_vo.ColumnSQL != null && m_vo.ColumnSQL.length() > 0)
{
if (withAS)
return m_vo.ColumnSQL + " AS " + m_vo.ColumnName;
else
return m_vo.ColumnSQL;
}
return m_vo.ColumnName;
} // getColumnSQL
/**
* Is Virtual Column
* @return column is virtual
*/
public boolean isVirtualColumn()
{
if (m_vo.ColumnSQL != null && m_vo.ColumnSQL.length() > 0)
return true;
return false;
} // isColumnVirtual
public String getHeader()
{
return m_vo.Header;
}
public int getDisplayType()
{
return m_vo.displayType;
}
public int getAD_Reference_Value_ID()
{
return m_vo.AD_Reference_Value_ID;
}
public int getAD_Window_ID()
{
return m_vo.AD_Window_ID;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -