IDEMPIERE-5567 Support of UUID as Key (FHCA-4195) (#2162)

- fix for import/export of TestUU_Trl
- fix for server stuck in loop when recent item doesn't have Record_UU
06:16:19.829===========> UiEngineImpl.handleError:  [131]
java.lang.IllegalArgumentException: Invalid null or blank UU - Must pass valid UU
        at org.compiere.model.PO.loadByUU(PO.java:1486)
        at org.compiere.model.MTable.getPOByUU(MTable.java:684)
        at org.compiere.model.MRecentItem.getLabel(MRecentItem.java:360)
        at org.adempiere.webui.dashboard.DPRecentItems.refresh(DPRecentItems.java:275)
        at org.adempiere.webui.dashboard.DPRecentItems.updateUI(DPRecentItems.java:333)
This commit is contained in:
Carlos Ruiz 2023-12-27 13:56:06 +01:00
parent 0948ad0642
commit 756c62bb17
3 changed files with 15 additions and 10 deletions

View File

@ -207,8 +207,9 @@ public class Translation implements IApplication
return ""; return "";
} }
String keyColumn = Base_Table + "_ID"; MTable baseTable = MTable.get(Env.getCtx(), Base_Table);
String uuidColumn = MTable.getUUIDColumnName(Base_Table); String keyColumn = baseTable.getKeyColumns()[0];
String uuidColumn = PO.getUUIDColumnName(Base_Table);
String[] trlColumns = getTrlColumns (Base_Table); String[] trlColumns = getTrlColumns (Base_Table);
// //
StringBuilder sql = null; StringBuilder sql = null;
@ -272,9 +273,11 @@ public class Translation implements IApplication
while (rs.next()) while (rs.next())
{ {
Element row = document.createElement (XML_ROW_TAG); Element row = document.createElement (XML_ROW_TAG);
int keyid = rs.getInt(2); int keyid = -1;
if (! baseTable.isUUIDKeyTable())
keyid = rs.getInt(2);
String uuid = rs.getString(3); String uuid = rs.getString(3);
if (keyid <= MTable.MAX_OFFICIAL_ID || Util.isEmpty(uuid)) { if ((keyid >= 0 && keyid <= MTable.MAX_OFFICIAL_ID) || Util.isEmpty(uuid)) {
row.setAttribute(XML_ROW_ATTRIBUTE_ID, String.valueOf(keyid)); // KeyColumn row.setAttribute(XML_ROW_ATTRIBUTE_ID, String.valueOf(keyid)); // KeyColumn
} else { } else {
row.setAttribute(XML_ROW_ATTRIBUTE_UUID, String.valueOf(uuid)); // UUIDColumn row.setAttribute(XML_ROW_ATTRIBUTE_UUID, String.valueOf(uuid)); // UUIDColumn

View File

@ -20,6 +20,7 @@ import java.sql.Timestamp;
import java.util.logging.Level; import java.util.logging.Level;
import org.adempiere.exceptions.AdempiereException; import org.adempiere.exceptions.AdempiereException;
import org.compiere.model.PO;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Language; import org.compiere.util.Language;
@ -171,10 +172,7 @@ public class TranslationHandler extends DefaultHandler
// Where section // Where section
m_sql.append(" WHERE "); m_sql.append(" WHERE ");
if (m_curUUID != null) { if (m_curUUID != null) {
StringBuilder sql = new StringBuilder("SELECT ").append(m_TableName).append("_ID").append(" FROM ").append(m_TableName) m_sql.append(PO.getUUIDColumnName(m_TableName)).append("=").append(DB.TO_STRING(m_curUUID));
.append(" WHERE ").append(m_TableName).append("_UU =?");
int ID = DB.getSQLValueEx(null, sql.toString(), m_curUUID);
m_sql.append(m_TableName).append("_ID=").append(ID);
} else { } else {
m_sql.append(m_TableName).append("_ID=").append(m_curID); m_sql.append(m_TableName).append("_ID=").append(m_curID);
} }

View File

@ -357,13 +357,17 @@ public class MRecentItem extends X_AD_RecentItem implements ImmutablePOSupport
windowName = win.get_Translation("Name"); windowName = win.get_Translation("Name");
} }
MTable table = MTable.get(getCtx(), getAD_Table_ID()); MTable table = MTable.get(getCtx(), getAD_Table_ID());
PO po = table.getPOByUU(getRecord_UU(), null); PO po = null;
if (getRecord_UU() != null)
po = table.getPOByUU(getRecord_UU(), null);
else if (getRecord_ID() > 0)
po = table.getPO(getRecord_ID(), null);
if (po == null) { if (po == null) {
String ii = getCacheKey(getAD_RecentItem_ID(), getCtx()); String ii = getCacheKey(getAD_RecentItem_ID(), getCtx());
synchronized (MRecentItem.class) { synchronized (MRecentItem.class) {
s_cache.remove(ii); s_cache.remove(ii);
} }
DB.executeUpdateEx("DELETE FROM AD_RecentItem WHERE AD_RecentItem=?", new Object[] {getAD_RecentItem_ID()}, null); DB.executeUpdateEx("DELETE FROM AD_RecentItem WHERE AD_RecentItem_ID=?", new Object[] {getAD_RecentItem_ID()}, null);
return null; return null;
} }