📄 po.java
字号:
*/
public final int getAD_Client_ID()
{
Integer ii = (Integer)get_Value("AD_Client_ID");
if (ii == null)
return 0;
return ii.intValue();
} // getAD_Client_ID
/**
* Set AD_Org
* @param AD_Org_ID org
*/
final public void setAD_Org_ID (int AD_Org_ID)
{
set_ValueNoCheck ("AD_Org_ID", new Integer(AD_Org_ID));
} // setAD_Org_ID
/**
* Get AD_Org
* @return AD_Org_ID
*/
public int getAD_Org_ID()
{
Integer ii = (Integer)get_Value("AD_Org_ID");
if (ii == null)
return 0;
return ii.intValue();
} // getAD_Org_ID
/**
* Overwrite Client Org if different
* @param AD_Client_ID client
* @param AD_Org_ID org
*/
protected void setClientOrg (int AD_Client_ID, int AD_Org_ID)
{
if (AD_Client_ID != getAD_Client_ID())
setAD_Client_ID(AD_Client_ID);
if (AD_Org_ID != getAD_Org_ID())
setAD_Org_ID(AD_Org_ID);
} // setClientOrg
/**
* Overwrite Client Org if different
* @param po persistent object
*/
protected void setClientOrg (PO po)
{
setClientOrg(po.getAD_Client_ID(), po.getAD_Org_ID());
} // setClientOrg
/**
* Set Active
* @param active active
*/
public final void setIsActive (boolean active)
{
set_Value("IsActive", new Boolean(active));
} // setActive
/**
* Is Active
* @return is active
*/
public final boolean isActive()
{
Boolean bb = (Boolean)get_Value("IsActive");
if (bb != null)
return bb.booleanValue();
return false;
} // isActive
/**
* Get Created
* @return created
*/
final public Timestamp getCreated()
{
return (Timestamp)get_Value("Created");
} // getCreated
/**
* Get Updated
* @return updated
*/
final public Timestamp getUpdated()
{
return (Timestamp)get_Value("Updated");
} // getUpdated
/**
* Get CreatedBy
* @return AD_User_ID
*/
final public int getCreatedBy()
{
Integer ii = (Integer)get_Value("CreatedBy");
if (ii == null)
return 0;
return ii.intValue();
} // getCreateddBy
/**
* Get UpdatedBy
* @return AD_User_ID
*/
final public int getUpdatedBy()
{
Integer ii = (Integer)get_Value("UpdatedBy");
if (ii == null)
return 0;
return ii.intValue();
} // getUpdatedBy
/**
* Set UpdatedBy
* @param AD_User_ID user
*/
final protected void setUpdatedBy (int AD_User_ID)
{
set_ValueNoCheck ("UpdatedBy", new Integer(AD_User_ID));
} // setAD_User_ID
/**
* Get Translation of column
* @param columnName
* @param AD_Language
* @return translation or null if not found
*/
protected String get_Translation (String columnName, String AD_Language)
{
if (columnName == null || AD_Language == null
|| m_IDs.length > 1 || m_IDs[0].equals(I_ZERO)
|| !(m_IDs[0] instanceof Integer))
{
log.severe ("Invalid Argument: ColumnName" + columnName
+ ", AD_Language=" + AD_Language
+ ", ID.length=" + m_IDs.length + ", ID=" + m_IDs[0]);
return null;
}
int ID = ((Integer)m_IDs[0]).intValue();
String retValue = null;
StringBuffer sql = new StringBuffer ("SELECT ").append(columnName)
.append(" FROM ").append(p_info.getTableName()).append("_Trl WHERE ")
.append(m_KeyColumns[0]).append("=?")
.append(" AND AD_Language=?");
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql.toString(), get_TrxName());
pstmt.setInt (1, ID);
pstmt.setString (2, AD_Language);
ResultSet rs = pstmt.executeQuery ();
if (rs.next ())
retValue = rs.getString(1);
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql.toString(), e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
return retValue;
} // get_Translation
/**
* Is new record
* @return true if new
*/
public boolean is_new()
{
if (m_createNew)
return true;
//
for (int i = 0; i < m_IDs.length; i++)
{
if (m_IDs[i].equals(I_ZERO))
continue;
return false; // one value is non-zero
}
return true;
} // is_new
/**************************************************************************
* Update Value or create new record.
* To reload call load() - not updated
* @return true if saved
*/
public boolean save()
{
boolean newRecord = is_new(); // save locally as load resets
if (!newRecord && !is_Changed())
{
log.fine("Nothing changed - " + p_info.getTableName());
return true;
}
// Organization Check
if (getAD_Org_ID() == 0
&& (get_AccessLevel() == ACCESSLEVEL_ORG
|| (get_AccessLevel() == ACCESSLEVEL_CLIENTORG
&& MClientShare.isOrgLevelOnly(getAD_Client_ID(), get_Table_ID()))))
{
log.saveError("FillMandatory", Msg.getElement(getCtx(), "AD_Org_ID"));
return false;
}
// Should be Org 0
if (getAD_Org_ID() != 0)
{
boolean reset = get_AccessLevel() == ACCESSLEVEL_SYSTEM;
if (!reset && MClientShare.isClientLevelOnly(getAD_Client_ID(), get_Table_ID()))
{
reset = get_AccessLevel() == ACCESSLEVEL_CLIENT
|| get_AccessLevel() == ACCESSLEVEL_SYSTEMCLIENT
|| get_AccessLevel() == ACCESSLEVEL_CLIENTORG;
}
if (reset)
{
log.warning("Set Org to 0");
setAD_Org_ID(0);
}
}
// Before Save
try
{
if (!beforeSave(newRecord))
{
log.warning("beforeSave failed - " + toString());
return false;
}
}
catch (Exception e)
{
log.log(Level.SEVERE, "beforeSave - " + toString(), e);
log.saveError("Error", e.toString(), false);
// throw new DBException(e);
return false;
}
String errorMsg = ModelValidationEngine.get().fireModelChange
(this, newRecord ? ModelValidator.TYPE_NEW : ModelValidator.TYPE_CHANGE);
if (errorMsg != null)
{
log.warning("Validation failed - " + errorMsg);
log.saveError("Error", errorMsg);
return false;
}
// Save
boolean success = false;
if (newRecord)
return saveNew();
else
return saveUpdate();
} // save
/**
* Finish Save Process
* @param newRecord new
* @param success success
* @return true if saved
*/
private boolean saveFinish (boolean newRecord, boolean success)
{
// Translations
if (success)
{
if (newRecord)
insertTranslations();
else
updateTranslations();
}
//
try
{
success = afterSave (newRecord, success);
}
catch (Exception e)
{
log.log(Level.SEVERE, "afterSave", e);
log.saveError("Error", e.toString(), false);
success = false;
// throw new DBException(e);
}
// OK
if (success)
{
if (s_docWFMgr == null)
{
try
{
Class.forName("org.compiere.wf.DocWorkflowManager");
}
catch (Exception e)
{
}
}
if (s_docWFMgr != null)
s_docWFMgr.process (this, p_info.getAD_Table_ID());
// Copy to Old values
int size = p_info.getColumnCount();
for (int i = 0; i < size; i++)
{
if (m_newValues[i] != null)
{
if (m_newValues[i] == Null.NULL)
m_oldValues[i] = null;
else
m_oldValues[i] = m_newValues[i];
}
}
m_newValues = new Object[size];
}
m_createNew = false;
if (!newRecord)
CacheMgt.get().reset(p_info.getTableName());
return success;
} // saveFinish
/**
* Update Value or create new record.
* To reload call load() - not updated
* @param trxName transaction
* @return true if saved
*/
public boolean save (String trxName)
{
set_TrxName(trxName);
return save();
} // save
/**
* Is there a Change to be saved?
* @return true if record changed
*/
public boolean is_Changed()
{
int size = get_ColumnCount();
for (int i = 0; i < size; i++)
{
if (m_newValues[i] != null)
return true; // something changed
}
return false;
} // is_Change
/**
* Called before Save for Pre-Save Operation
* @param newRecord new record
* @return true if record can be saved
*/
protected boolean beforeSave(boolean newRecord)
{
// log.saveError("Error", Msg.parseTranslation(getCtx(), "@C_Currency_ID@ = @C_Currency_ID@"));
// log.saveError("FillMandatory", Msg.getElement(getCtx(), "PriceEntered"));
// log.saveWarning(AD_Message, message);
// log.saveInfo (AD_Message, message);
return true;
} // beforeSave
/**
* Called after Save for Post-Save Operation
* @param newRecord new record
* @param success true if save operation was success
* @return if save was a success
*/
protected boolean afterSave (boolean newRecord, boolean success)
{
return success;
} // afterSave
/**
* Update Record directly
* @return true if updated
*/
protected boolean saveUpdate()
{
String where = get_WhereClause(true);
//
boolean changes = false;
StringBuffer sql = new StringBuffer ("UPDATE ");
sql.append(p_info.getTableName()).append( " SET ");
boolean updated = false;
boolean updatedBy = false;
lobReset();
// Change Log
MSession session = MSession.get (p_ctx, false);
if (session == null)
log.fine("No Session found");
int AD_ChangeLog_ID = 0;
int size = get_ColumnCount();
for (int i = 0; i < size; i++)
{
Object value = m_newValues[i];
if (value == null
|| p_info.isVirtualColumn(i))
continue;
// we have a change
Class c = p_info.getColumnClass(i);
int dt = p_info.getColumnDisplayType(i);
String columnName = p_info.getColumnName(i);
//
// updated/by
if (columnName.equals("UpdatedBy"))
{
if (updatedBy) // explicit
continue;
updatedBy = true;
}
else if (columnName.equals("Updated"))
{
if (updated)
continue;
updated = true;
}
if (DisplayType.isLOB(dt))
{
lobAdd (value, i, dt);
// If no changes set UpdatedBy explicitly to ensure commit of lob
if (!changes & !updatedBy)
{
int AD_User_ID = Env.getContextAsInt(p_ctx, "#AD_User_ID");
set_ValueNoCheck("UpdatedBy", new Integer(AD_User_ID));
sql.append("UpdatedBy=").append(AD_User_ID);
changes = true;
updatedBy = true;
}
continue;
}
// Update Document No
if (columnName.equals("DocumentNo"))
{
String strValue = (String)value;
if (strValue.startsWith("<") && strValue.endsWith(">"))
{
value = null;
int AD_Client_ID = getAD_Client_ID();
int index = p_info.getColumnIndex("C_DocTypeTarget_ID");
if (index == -1)
index = p_info.getColumnIndex("C_DocType_ID");
if (index != -1) // get based on Doc Type (might return null)
value = DB.getDocumentNo(get_ValueAsInt(index), m_trxName);
if (value == null) // not overwritten by DocType and not manually entered
value = DB.getDocumentNo(AD_Client_ID, p_info.getTableName(), m_trxName);
}
else
log.warning("DocumentNo updated: " + m_oldValues[i] + " -> " + value);
}
if (changes)
sql.append(", ");
changes = true;
sql.append(columnName).append("=");
// values
if (value == Null.NULL)
sql.append("NULL");
else if (value instanceof Integer || value instanceof BigDecimal)
sql.append(encrypt(i,value));
else if (c == Boolean.class)
{
boolean bValue = false;
if (value instanceof Boolean)
bValue = ((Boolean)value).booleanValue();
else
bValue = "Y".equals(value);
sql.append(encrypt(i,bValue ? "'Y'" : "'N'"));
}
else if (value instanceof Timestamp)
sql.append(DB.TO_DATE((Timestamp)encrypt(i,value),p_info.getColumnDisplayType(i) == DisplayType.Date));
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -