IDEMPIERE-3218 Cross-tenant error when importing web service security records / fix problem when importing attachments because of Record_ID column
This commit is contained in:
parent
90b40ac9ec
commit
817cd5fd65
|
@ -796,7 +796,7 @@ public class MColumn extends X_AD_Column
|
||||||
int refid = getAD_Reference_ID();
|
int refid = getAD_Reference_ID();
|
||||||
if (DisplayType.TableDir == refid || (DisplayType.Search == refid && getAD_Reference_Value_ID() == 0)) {
|
if (DisplayType.TableDir == refid || (DisplayType.Search == refid && getAD_Reference_Value_ID() == 0)) {
|
||||||
foreignTable = getColumnName().substring(0, getColumnName().length()-3);
|
foreignTable = getColumnName().substring(0, getColumnName().length()-3);
|
||||||
} else if (DisplayType.Table == refid || DisplayType.Search == refid) {
|
} else if (DisplayType.Table == refid || DisplayType.Search == refid) {
|
||||||
MReference ref = MReference.get(getCtx(), getAD_Reference_Value_ID());
|
MReference ref = MReference.get(getCtx(), getAD_Reference_Value_ID());
|
||||||
if (MReference.VALIDATIONTYPE_TableValidation.equals(ref.getValidationType())) {
|
if (MReference.VALIDATIONTYPE_TableValidation.equals(ref.getValidationType())) {
|
||||||
int cnt = DB.getSQLValueEx(get_TrxName(), "SELECT COUNT(*) FROM AD_Ref_Table WHERE AD_Reference_ID=?", getAD_Reference_Value_ID());
|
int cnt = DB.getSQLValueEx(get_TrxName(), "SELECT COUNT(*) FROM AD_Ref_Table WHERE AD_Reference_ID=?", getAD_Reference_Value_ID());
|
||||||
|
@ -806,7 +806,13 @@ public class MColumn extends X_AD_Column
|
||||||
foreignTable = rt.getAD_Table().getTableName();
|
foreignTable = rt.getAD_Table().getTableName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (DisplayType.List == refid || DisplayType.Payment == refid) {
|
} else if (DisplayType.Button == refid) {
|
||||||
|
// C_BPartner.AD_OrgBP_ID and C_Project.C_ProjectType_ID are defined as buttons
|
||||||
|
if ("AD_OrgBP_ID".equalsIgnoreCase(getColumnName()))
|
||||||
|
foreignTable = "AD_Org";
|
||||||
|
else if ("C_ProjectType_ID".equalsIgnoreCase(getColumnName()))
|
||||||
|
foreignTable = "C_ProjectType";
|
||||||
|
} else if (DisplayType.List == refid || DisplayType.Payment == refid) {
|
||||||
foreignTable = "AD_Ref_List";
|
foreignTable = "AD_Ref_List";
|
||||||
} else if (DisplayType.Location == refid) {
|
} else if (DisplayType.Location == refid) {
|
||||||
foreignTable = "C_Location";
|
foreignTable = "C_Location";
|
||||||
|
|
|
@ -183,17 +183,32 @@ public class PoFiller{
|
||||||
}
|
}
|
||||||
if (po.get_ColumnIndex(columnName) >= 0) {
|
if (po.get_ColumnIndex(columnName) >= 0) {
|
||||||
MColumn col = MColumn.get(ctx.ctx, po.get_TableName(), columnName);
|
MColumn col = MColumn.get(ctx.ctx, po.get_TableName(), columnName);
|
||||||
|
MTable foreignTable = null;
|
||||||
String refTableName = col.getReferenceTableName();
|
String refTableName = col.getReferenceTableName();
|
||||||
if (id > 0) {
|
if (refTableName != null) {
|
||||||
MTable foreignTable = MTable.get(Env.getCtx(), refTableName);
|
foreignTable = MTable.get(Env.getCtx(), refTableName);
|
||||||
PO subPo = foreignTable.getPO(id, po.get_TrxName());
|
} else {
|
||||||
if (subPo.getAD_Client_ID() != Env.getAD_Client_ID(ctx.ctx)) {
|
if ("Record_ID".equalsIgnoreCase(columnName)) {
|
||||||
String accessLevel = foreignTable.getAccessLevel();
|
// special case - get the foreign table using column AD_Table_ID
|
||||||
if ((MTable.ACCESSLEVEL_All.equals(accessLevel)
|
int idxTableID = po.get_ColumnIndex("AD_Table_ID");
|
||||||
|| MTable.ACCESSLEVEL_SystemOnly.equals(accessLevel)
|
if (idxTableID >= 0) {
|
||||||
|| MTable.ACCESSLEVEL_SystemPlusClient.equals(accessLevel)) &&
|
int tableID = po.get_ValueAsInt(idxTableID);
|
||||||
subPo.getAD_Client_ID() != 0)
|
foreignTable = MTable.get(Env.getCtx(), tableID);
|
||||||
return -1;
|
refTableName = foreignTable.getTableName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (id > 0 && refTableName != null) {
|
||||||
|
if (foreignTable != null) {
|
||||||
|
PO subPo = foreignTable.getPO(id, po.get_TrxName());
|
||||||
|
if (subPo != null && subPo.getAD_Client_ID() != Env.getAD_Client_ID(ctx.ctx)) {
|
||||||
|
String accessLevel = foreignTable.getAccessLevel();
|
||||||
|
if ((MTable.ACCESSLEVEL_All.equals(accessLevel)
|
||||||
|
|| MTable.ACCESSLEVEL_SystemOnly.equals(accessLevel)
|
||||||
|
|| MTable.ACCESSLEVEL_SystemPlusClient.equals(accessLevel)) &&
|
||||||
|
subPo.getAD_Client_ID() != 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (po.get_ValueAsInt(columnName) != id) {
|
if (po.get_ValueAsInt(columnName) != id) {
|
||||||
|
|
Loading…
Reference in New Issue