use of org.compiere.model.POInfo in project adempiere by adempiere.
the class PropertiesWrapper method initPO.
/** Load Meta Data */
protected POInfo initPO(Properties ctx) {
PropertiesWrapper wrapper = (PropertiesWrapper) ctx;
p_ctx = wrapper.source;
tableName = wrapper.tableName;
tableID = MTable.getTable_ID(tableName);
// log.info("Table_ID: "+Table_ID);
POInfo poi = POInfo.getPOInfo(ctx, tableID, this.get_TrxName());
return poi;
}
use of org.compiere.model.POInfo in project adempiere by adempiere.
the class ModelADServiceImpl method updateData.
public StandardResponseDocument updateData(ModelCRUDRequestDocument req) throws XFireFault {
StandardResponseDocument ret = StandardResponseDocument.Factory.newInstance();
StandardResponse resp = ret.addNewStandardResponse();
ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD();
String serviceType = modelCRUD.getServiceType();
ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest();
String err = modelLogin(reqlogin, webServiceName, "updateData", serviceType);
if (err != null && err.length() > 0) {
resp.setError(err);
resp.setIsError(true);
return ret;
}
// Validate parameters vs service type
validateCRUD(modelCRUD);
String tableName = modelCRUD.getTableName();
int recordID = modelCRUD.getRecordID();
resp.setRecordID(recordID);
Properties ctx = m_cs.getM_ctx();
// start a trx
String trxName = Trx.createTrxName("ws_modelUpdateData");
Trx trx = Trx.get(trxName, false);
// get the PO for the tablename and record ID
MTable table = MTable.get(ctx, tableName);
if (table == null)
return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName);
PO po = table.getPO(recordID, trxName);
if (po == null)
return rollbackAndSetError(trx, resp, ret, true, "No Record " + recordID + " in " + tableName);
POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID());
DataRow dr = modelCRUD.getDataRow();
for (DataField field : dr.getFieldList()) {
// TODO: Implement lookup
if (m_webservicetype.isInputColumnNameAllowed(field.getColumn())) {
int idxcol = po.get_ColumnIndex(field.getColumn());
if (idxcol < 0) {
// The column doesn't exist - it must exist as it's defined in security
return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() + ": input column " + field.getColumn() + " does not exist");
} else {
try {
setValueAccordingToClass(po, poinfo, field, idxcol);
} catch (XFireFault e) {
log.log(Level.WARNING, "Error setting value", e);
return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() + ": input column " + field.getColumn() + " value could not be set: " + e.getLocalizedMessage());
}
}
} else {
return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() + ": input column " + field.getColumn() + " not allowed");
}
}
if (!po.save())
return rollbackAndSetError(trx, resp, ret, true, "Cannot save record in " + tableName + ": " + CLogger.retrieveErrorString("no log message"));
// close the trx
if (!trx.commit())
return rollbackAndSetError(trx, resp, ret, true, "Cannot commit transaction after delete record " + recordID + " in " + tableName);
trx.close();
return ret;
}
use of org.compiere.model.POInfo in project adempiere by adempiere.
the class ModelADServiceImpl method createData.
public StandardResponseDocument createData(ModelCRUDRequestDocument req) throws XFireFault {
StandardResponseDocument ret = StandardResponseDocument.Factory.newInstance();
StandardResponse resp = ret.addNewStandardResponse();
ModelCRUD modelCRUD = req.getModelCRUDRequest().getModelCRUD();
String serviceType = modelCRUD.getServiceType();
ADLoginRequest reqlogin = req.getModelCRUDRequest().getADLoginRequest();
String err = modelLogin(reqlogin, webServiceName, "createData", serviceType);
if (err != null && err.length() > 0) {
resp.setError(err);
resp.setIsError(true);
return ret;
}
// Validate parameters vs service type
validateCRUD(modelCRUD);
String tableName = modelCRUD.getTableName();
Properties ctx = m_cs.getM_ctx();
// start a trx
String trxName = Trx.createTrxName("ws_modelCreateData");
Trx trx = Trx.get(trxName, false);
// get the PO for the tablename and record ID
MTable table = MTable.get(ctx, tableName);
if (table == null)
return rollbackAndSetError(trx, resp, ret, true, "No table " + tableName);
PO po = table.getPO(0, trxName);
if (po == null)
return rollbackAndSetError(trx, resp, ret, true, "Cannot create PO for " + tableName);
POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID());
DataRow dr = modelCRUD.getDataRow();
for (DataField field : dr.getFieldList()) {
// TODO: Implement lookup
if (m_webservicetype.isInputColumnNameAllowed(field.getColumn())) {
int idxcol = po.get_ColumnIndex(field.getColumn());
if (idxcol < 0) {
// The column doesn't exist - it must exist as it's defined in security
return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() + ": input column " + field.getColumn() + " does not exist");
} else {
try {
setValueAccordingToClass(po, poinfo, field, idxcol);
} catch (XFireFault e) {
log.log(Level.WARNING, "Error setting value", e);
return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() + ": input column " + field.getColumn() + " value could not be set: " + e.getLocalizedMessage());
}
}
} else {
return rollbackAndSetError(trx, resp, ret, true, "Web service type " + m_webservicetype.getValue() + ": input column " + field.getColumn() + " not allowed");
}
}
if (!po.save())
return rollbackAndSetError(trx, resp, ret, true, "Cannot save record in " + tableName + ": " + CLogger.retrieveErrorString("no log message"));
int recordID = po.get_ID();
resp.setRecordID(recordID);
// close the trx
if (!trx.commit())
return rollbackAndSetError(trx, resp, ret, true, "Cannot commit transaction after create record " + recordID + " in " + tableName);
trx.close();
return ret;
}
use of org.compiere.model.POInfo in project adempiere by adempiere.
the class POTest method testTruncatedStrings.
/**
* <li>BF [ 1990856 ] PO.set_Value* : truncate string more than needed
*/
public void testTruncatedStrings() {
//
// Creating a huge string for testing:
StringBuffer sb = new StringBuffer();
for (int i = 1; i <= 1000; i++) {
sb.append("0123456789");
}
String bigString = sb.toString();
//
// Create the test PO:
MTest testPO = new MTest(getCtx(), getClass().getName(), 1);
testPO.set_TrxName(getTrxName());
//
// Getting Max Length:
POInfo info = POInfo.getPOInfo(getCtx(), MTest.Table_ID);
int maxLength = info.getFieldLength(info.getColumnIndex(MTest.COLUMNNAME_Name));
//
// Test with a string that has less then maxLength
{
testPO.set_ValueOfColumn(MTest.COLUMNNAME_Name, bigString.substring(0, maxLength - 1));
String resultString = (String) testPO.get_Value(MTest.COLUMNNAME_Name);
assertEquals("String was not truncated correctly (1)", maxLength - 1, resultString.length());
//
testPO.setName(bigString.substring(0, maxLength - 1));
assertEquals("String was not truncated correctly (2)", maxLength - 1, testPO.getName().length());
}
//
// Test with a string that has maxLength
{
testPO.set_ValueOfColumn(MTest.COLUMNNAME_Name, bigString.substring(0, maxLength));
String resultString = (String) testPO.get_Value(MTest.COLUMNNAME_Name);
assertEquals("String was not truncated correctly (3)", maxLength, resultString.length());
//
testPO.setName(bigString.substring(0, maxLength));
assertEquals("String was not truncated correctly (4)", maxLength, testPO.getName().length());
}
//
// Test with a string that has more than maxLength
{
testPO.set_ValueOfColumn(MTest.COLUMNNAME_Name, bigString);
String resultString = (String) testPO.get_Value(MTest.COLUMNNAME_Name);
assertEquals("String was not truncated correctly (5)", maxLength, resultString.length());
//
testPO.setName(bigString);
assertEquals("String was not truncated correctly (6)", maxLength, testPO.getName().length());
}
}
use of org.compiere.model.POInfo in project adempiere by adempiere.
the class AbstractElementHandler method copyRecord.
/**
* Make backup copy of record.
*
* @param tablename
*
*
*
*/
public int copyRecord(Properties ctx, String tableName, PO from) {
// Create new record
int idBackup = 0;
String colValue = null;
int tableID = get_IDWithColumn(ctx, "AD_Table", "TableName", tableName);
POInfo poInfo = POInfo.getPOInfo(ctx, tableID, getTrxName(ctx));
for (int i = 0; i < poInfo.getColumnCount(); i++) {
colValue = null;
int columnID = get_IDWithMasterAndColumn(ctx, "AD_Column", "ColumnName", poInfo.getColumnName(i), "AD_Table", tableID);
StringBuffer sqlD = new StringBuffer("SELECT AD_Reference_ID FROM AD_COLUMN WHERE AD_Column_ID = '" + columnID + "'");
int referenceID = DB.getSQLValue(getTrxName(ctx), sqlD.toString());
idBackup = DB.getNextID(getClientId(ctx), "AD_Package_Imp_Backup", getTrxName(ctx));
sqlD = new StringBuffer("SELECT MAX(AD_PACKAGE_IMP_DETAIL_ID) FROM AD_PACKAGE_IMP_DETAIL");
int idDetail = DB.getSQLValue(getTrxName(ctx), sqlD.toString()) + 1;
if (referenceID == 10 || referenceID == 14 || referenceID == 34 || referenceID == 17)
if (from != null && from.get_Value(i) != null)
colValue = from.get_Value(i).toString().replaceAll("'", "''");
else if (referenceID == 20 || referenceID == 28)
if (from != null && from.get_Value(i) != null)
colValue = from.get_Value(i).toString().replaceAll("'", "''");
else
//Ignore
;
StringBuffer sqlB = new StringBuffer("INSERT INTO AD_Package_Imp_Backup").append("(AD_Client_ID, AD_Org_ID, CreatedBy, UpdatedBy, ").append("AD_PACKAGE_IMP_BACKUP_ID, AD_PACKAGE_IMP_DETAIL_ID, AD_PACKAGE_IMP_ID,").append(" AD_TABLE_ID, AD_COLUMN_ID, AD_REFERENCE_ID, COLVALUE)").append("VALUES(").append(" " + Env.getAD_Client_ID(ctx)).append(", " + Env.getAD_Org_ID(ctx)).append(", " + Env.getAD_User_ID(ctx)).append(", " + Env.getAD_User_ID(ctx)).append(", " + idBackup).append(", " + idDetail).append(", " + getPackageImpId(ctx)).append(", " + tableID).append(", " + (columnID == -1 ? "null" : columnID)).append(", " + (referenceID == -1 ? "null" : referenceID)).append(", '" + (colValue != null ? colValue : (from != null ? from.get_Value(i) : "null"))).append("')");
int no = DB.executeUpdate(sqlB.toString(), getTrxName(ctx));
if (no == -1)
log.info("Insert to import backup failed");
//}
}
return idBackup;
}
Aggregations