From b357b4c13cd102aaceb4b9d4ec4405bf32fe9a28 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Sat, 4 May 2019 20:20:00 +0200 Subject: [PATCH 1/9] IDEMPIERE-3946 - graft part of c9a8d5d into release-6.2 --- org.adempiere.ui.zk/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/org.adempiere.ui.zk/pom.xml b/org.adempiere.ui.zk/pom.xml index 1e97e23d6b..9a5c585a2d 100644 --- a/org.adempiere.ui.zk/pom.xml +++ b/org.adempiere.ui.zk/pom.xml @@ -55,7 +55,7 @@ org.outerj.daisy daisydiff - 1.1.14-atlassian-hosted + 1.1.15-atlassian-hosted org.zkoss.zkforge @@ -91,4 +91,4 @@ - \ No newline at end of file + From 5e0f504a6cea48a0b6e74e90e7020aacf1c86e26 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Sat, 4 May 2019 17:25:39 +0800 Subject: [PATCH 2/9] IDEMPIERE-3669 Drop shipment - Accounting processor posts customer shipment before MR resulting in posting error --- .../src/org/compiere/acct/Doc_InOut.java | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/acct/Doc_InOut.java b/org.adempiere.base/src/org/compiere/acct/Doc_InOut.java index febb500934..14f32d9f9e 100644 --- a/org.adempiere.base/src/org/compiere/acct/Doc_InOut.java +++ b/org.adempiere.base/src/org/compiere/acct/Doc_InOut.java @@ -22,20 +22,21 @@ import java.sql.ResultSet; import java.util.ArrayList; import java.util.logging.Level; +import org.compiere.model.I_C_OrderLine; import org.compiere.model.I_M_InOutLine; import org.compiere.model.I_M_RMALine; -import org.compiere.model.MConversionRate; -import org.compiere.model.MOrderLandedCostAllocation; -import org.compiere.model.MTax; -import org.compiere.model.MCurrency; import org.compiere.model.MAccount; import org.compiere.model.MAcctSchema; +import org.compiere.model.MConversionRate; import org.compiere.model.MCostDetail; +import org.compiere.model.MCurrency; import org.compiere.model.MInOut; import org.compiere.model.MInOutLine; import org.compiere.model.MInOutLineMA; +import org.compiere.model.MOrderLandedCostAllocation; import org.compiere.model.MOrderLine; import org.compiere.model.MProduct; +import org.compiere.model.MTax; import org.compiere.model.ProductCost; import org.compiere.util.DB; import org.compiere.util.Env; @@ -69,6 +70,7 @@ public class Doc_InOut extends Doc private int m_Reversal_ID = 0; @SuppressWarnings("unused") private String m_DocStatus = ""; + private boolean m_deferPosting = false; /** * Load Document Details @@ -84,6 +86,25 @@ public class Doc_InOut extends Doc // Contained Objects p_lines = loadLines(inout); if (log.isLoggable(Level.FINE)) log.fine("Lines=" + p_lines.length); + + if (inout.isSOTrx()) { + MInOutLine[] lines = inout.getLines(); + for (MInOutLine line : lines) { + I_C_OrderLine orderLine = line.getC_OrderLine(); + if (orderLine != null) { + if (orderLine.getLink_OrderLine_ID() > 0) { + // Defer posting if found the linked MR is not posted + String sql = "SELECT COUNT(*) FROM M_InOutLine iol WHERE iol.C_OrderLine_ID=? AND EXISTS (SELECT * FROM M_InOut io WHERE io.M_InOut_ID=iol.M_InOut_ID AND io.IsSOTrx='N' AND io.Posted<>'Y')"; + int count = DB.getSQLValueEx(getTrxName(), sql, orderLine.getLink_OrderLine_ID()); + if (count > 0) { + m_deferPosting = true; + break; + } + } + } + } + } + return null; } // loadDocumentDetails @@ -959,4 +980,9 @@ public class Doc_InOut extends Doc } return ""; } + + @Override + public boolean isDeferPosting() { + return m_deferPosting; + } } // Doc_InOut From 93c4356c65e12abafda9f9b9e485c22e0a814cc4 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Tue, 7 May 2019 17:32:21 +0800 Subject: [PATCH 3/9] IDEMPIERE-3877 Purchase Order-Currency Type=NULL when created through process "create PO from requisition" --- .../src/org/compiere/process/RequisitionPOCreate.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/org.adempiere.base.process/src/org/compiere/process/RequisitionPOCreate.java b/org.adempiere.base.process/src/org/compiere/process/RequisitionPOCreate.java index 0337437a95..3f4fec2b82 100644 --- a/org.adempiere.base.process/src/org/compiere/process/RequisitionPOCreate.java +++ b/org.adempiere.base.process/src/org/compiere/process/RequisitionPOCreate.java @@ -26,6 +26,7 @@ import org.adempiere.exceptions.NoVendorForProductException; import org.apache.commons.collections.keyvalue.MultiKey; import org.compiere.model.MBPartner; import org.compiere.model.MCharge; +import org.compiere.model.MConversionType; import org.compiere.model.MOrder; import org.compiere.model.MOrderLine; import org.compiere.model.MProduct; @@ -352,6 +353,8 @@ public class RequisitionPOCreate extends SvrProcess m_order.setC_DocTypeTarget_ID(); m_order.setBPartner(m_bpartner); m_order.setM_PriceList_ID(M_PriceList_ID); + if (MConversionType.getDefault(getAD_Client_ID()) > 0) + m_order.setC_ConversionType_ID(MConversionType.getDefault(getAD_Client_ID())); // default po document type if (!p_ConsolidateDocument) { From d6120e2f80fa930dcf2b2748a77824a2b2a92bc7 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 8 May 2019 11:04:45 +0200 Subject: [PATCH 4/9] IDEMPIERE-3669 Drop shipment - Accounting processor posts customer shipment before MR resulting in posting error / addDocsPostProcess --- org.adempiere.base/src/org/compiere/model/MInOut.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/org.adempiere.base/src/org/compiere/model/MInOut.java b/org.adempiere.base/src/org/compiere/model/MInOut.java index 90d7166b56..941a5a8d83 100644 --- a/org.adempiere.base/src/org/compiere/model/MInOut.java +++ b/org.adempiere.base/src/org/compiere/model/MInOut.java @@ -1681,6 +1681,8 @@ public class MInOut extends X_M_InOut implements DocAction MInOut dropShipment = createDropShipment(); if (dropShipment != null) info.append(" - @DropShipment@: @M_InOut_ID@=").append(dropShipment.getDocumentNo()); + if (dropShipment != null) + addDocsPostProcess(dropShipment); // User Validation String valid = ModelValidationEngine.get().fireDocValidate(this, ModelValidator.TIMING_AFTER_COMPLETE); if (valid != null) From aa580a443b51010e16d224d6bea102bcb0538e8f Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 8 May 2019 11:36:55 +0200 Subject: [PATCH 5/9] IDEMPIERE-3965 Allocation posted with error when multi-currency and immediate accounting --- .../src/org/compiere/model/MPayment.java | 26 ++++++++++++++++--- .../org/compiere/process/DocumentEngine.java | 7 ++--- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MPayment.java b/org.adempiere.base/src/org/compiere/model/MPayment.java index a9a84d8edd..9ab8374dc3 100644 --- a/org.adempiere.base/src/org/compiere/model/MPayment.java +++ b/org.adempiere.base/src/org/compiere/model/MPayment.java @@ -22,6 +22,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Properties; @@ -83,8 +84,10 @@ import org.compiere.util.ValueNamePair; public class MPayment extends X_C_Payment implements DocAction, ProcessCall, PaymentInterface { - - private static final long serialVersionUID = -7179638016937305380L; + /** + * + */ + private static final long serialVersionUID = -6268462097642919346L; /** * Get Payments Of BPartner @@ -2111,6 +2114,16 @@ public class MPayment extends X_C_Payment return DocAction.STATUS_Completed; } // completeIt + /* Save array of documents to process AFTER completing this one */ + ArrayList docsPostProcess = new ArrayList(); + + protected void addDocsPostProcess(PO doc) { + docsPostProcess.add(doc); + } + + public ArrayList getDocsPostProcess() { + return docsPostProcess; + } /** * Set the definite document number after completed @@ -2289,6 +2302,7 @@ public class MPayment extends X_C_Payment // added AdempiereException by zuhri if (!alloc.processIt(DocAction.ACTION_Complete)) throw new AdempiereException(Msg.getMsg(getCtx(), "FailedProcessingDocument") + " - " + alloc.getProcessMsg()); + addDocsPostProcess(alloc); // end added m_processMsg = "@C_AllocationHdr_ID@: " + alloc.getDocumentNo(); return alloc.save(get_TrxName()); @@ -2324,6 +2338,7 @@ public class MPayment extends X_C_Payment // added AdempiereException by zuhri if (!alloc.processIt(DocAction.ACTION_Complete)) throw new AdempiereException(Msg.getMsg(getCtx(), "FailedProcessingDocument") + " - " + alloc.getProcessMsg()); + addDocsPostProcess(alloc); // end added alloc.saveEx(get_TrxName()); m_justCreatedAllocInv = alloc; @@ -2418,10 +2433,12 @@ public class MPayment extends X_C_Payment else { // added Adempiere Exception by zuhri - if(alloc.processIt(DocAction.ACTION_Complete)) + if (alloc.processIt(DocAction.ACTION_Complete)) { + addDocsPostProcess(alloc); ok = alloc.save(get_TrxName()); - else + } else { throw new AdempiereException(Msg.getMsg(getCtx(), "FailedProcessingDocument") + " - " + alloc.getProcessMsg()); + } // end added by zuhri m_processMsg = "@C_AllocationHdr_ID@: " + alloc.getDocumentNo(); } @@ -2709,6 +2726,7 @@ public class MPayment extends X_C_Payment // added AdempiereException by zuhri if (!alloc.processIt(DocAction.ACTION_Complete)) throw new AdempiereException(Msg.getMsg(getCtx(), "FailedProcessingDocument") + " - " + alloc.getProcessMsg()); + addDocsPostProcess(alloc); // end added alloc.saveEx(get_TrxName()); // diff --git a/org.adempiere.base/src/org/compiere/process/DocumentEngine.java b/org.adempiere.base/src/org/compiere/process/DocumentEngine.java index 4773229560..d8eb86d46b 100644 --- a/org.adempiere.base/src/org/compiere/process/DocumentEngine.java +++ b/org.adempiere.base/src/org/compiere/process/DocumentEngine.java @@ -323,12 +323,13 @@ public class DocumentEngine implements DocAction { // PostProcess documents when invoice or inout (this is to postprocess the generated MatchPO and MatchInv if any) ArrayList docsPostProcess = new ArrayList(); - if (m_document instanceof MInvoice || m_document instanceof MInOut) { + if (m_document instanceof MInvoice || m_document instanceof MInOut || m_document instanceof MPayment) { if (m_document instanceof MInvoice) { docsPostProcess = ((MInvoice) m_document).getDocsPostProcess(); - } - if (m_document instanceof MInOut) { + } else if (m_document instanceof MInOut) { docsPostProcess = ((MInOut) m_document).getDocsPostProcess(); + } else if (m_document instanceof MPayment) { + docsPostProcess = ((MPayment) m_document).getDocsPostProcess(); } } if (m_document instanceof PO && docsPostProcess.size() > 0) { From 0d8cbeb5bc70c5e8a054257fddba9c50665fa3c9 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Wed, 8 May 2019 17:39:55 +0800 Subject: [PATCH 6/9] IDEMPIERE-3961 GL Journal - Switching accounting schema removes PERIOD --- .../oracle/201905071815_IDEMPIERE-3961.sql | 10 +++++++++ .../201905071815_IDEMPIERE-3961.sql | 7 ++++++ .../org/compiere/model/CalloutGLJournal.java | 22 +++++++++++++++++++ .../src/org/compiere/model/GridTab.java | 5 +++++ 4 files changed, 44 insertions(+) create mode 100644 migration/i6.2/oracle/201905071815_IDEMPIERE-3961.sql create mode 100644 migration/i6.2/postgresql/201905071815_IDEMPIERE-3961.sql diff --git a/migration/i6.2/oracle/201905071815_IDEMPIERE-3961.sql b/migration/i6.2/oracle/201905071815_IDEMPIERE-3961.sql new file mode 100644 index 0000000000..9ce0960be6 --- /dev/null +++ b/migration/i6.2/oracle/201905071815_IDEMPIERE-3961.sql @@ -0,0 +1,10 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-3961 GL Journal - Switching accounting schema removes PERIOD +-- May 7, 2019, 5:20:41 PM SGT +UPDATE AD_Column SET Callout='org.compiere.model.CalloutGLJournal.acctSchema',Updated=TO_DATE('2019-05-07 17:20:41','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=1632 +; + +SELECT register_migration_script('201905071815_IDEMPIERE-3961.sql') FROM dual +; diff --git a/migration/i6.2/postgresql/201905071815_IDEMPIERE-3961.sql b/migration/i6.2/postgresql/201905071815_IDEMPIERE-3961.sql new file mode 100644 index 0000000000..fdf7b73f9f --- /dev/null +++ b/migration/i6.2/postgresql/201905071815_IDEMPIERE-3961.sql @@ -0,0 +1,7 @@ +-- IDEMPIERE-3961 GL Journal - Switching accounting schema removes PERIOD +-- May 7, 2019, 5:20:41 PM SGT +UPDATE AD_Column SET Callout='org.compiere.model.CalloutGLJournal.acctSchema',Updated=TO_TIMESTAMP('2019-05-07 17:20:41','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=1632 +; + +SELECT register_migration_script('201905071815_IDEMPIERE-3961.sql') FROM dual +; \ No newline at end of file diff --git a/org.adempiere.base.callout/src/org/compiere/model/CalloutGLJournal.java b/org.adempiere.base.callout/src/org/compiere/model/CalloutGLJournal.java index 2f122a184f..479e53d29d 100644 --- a/org.adempiere.base.callout/src/org/compiere/model/CalloutGLJournal.java +++ b/org.adempiere.base.callout/src/org/compiere/model/CalloutGLJournal.java @@ -294,4 +294,26 @@ public class CalloutGLJournal extends CalloutEngine } return ""; } + + /** + * Journal - Acct Schema + * Set Currency from C_AcctSchema_ID + * @param ctx context + * @param WindowNo window no + * @param mTab tab + * @param mField field + * @param value value + * @return null or error message + */ + public String acctSchema(Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value) + { + if (value == null) + return ""; + + int C_AcctSchema_ID = Env.getContextAsInt(ctx, WindowNo, "C_AcctSchema_ID"); + MAcctSchema as = MAcctSchema.get (ctx, C_AcctSchema_ID); + mTab.setValue("C_Currency_ID", as.getC_Currency_ID()); + + return ""; + } } // CalloutGLJournal diff --git a/org.adempiere.base/src/org/compiere/model/GridTab.java b/org.adempiere.base/src/org/compiere/model/GridTab.java index 83826a7c9b..ca57300f76 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTab.java +++ b/org.adempiere.base/src/org/compiere/model/GridTab.java @@ -2783,8 +2783,13 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable { if (log.isLoggable(Level.FINE)) log.fine(columnName + " changed - " + dependentField.getColumnName() + " set to null"); + Object currentValue = dependentField.getValue(); + // invalidate current selection setValue(dependentField, null); + + if (currentValue != null && mLookup.containsKey(currentValue)) + setValue(dependentField, currentValue); } } // if the field is a Virtual UI Column From 385280f8aa85b7ca984e6ae8efd0040cb2110657 Mon Sep 17 00:00:00 2001 From: sjeffen Date: Mon, 6 May 2019 11:17:07 +0200 Subject: [PATCH 7/9] IDEMPIERE-3963 cph::erp improve findwindow layout by css --- .../org/adempiere/webui/adwindow/AbstractADWindowContent.java | 2 +- .../WEB-INF/src/org/adempiere/webui/window/FindWindow.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java index b4221e07e4..2b162d37fb 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java @@ -757,7 +757,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements private void setupEmbeddedFindwindow() { findWindow.setTitle(null); findWindow.setBorder("none"); - findWindow.setStyle("position: absolute; border-bottom: 2px solid #484848; padding: 2px; background-color: #fff;"); + findWindow.setStyle("position: absolute;background-color: #fff;"); ZKUpdateUtil.setWidth(findWindow, "100%"); if (ClientInfo.maxHeight(ClientInfo.MEDIUM_HEIGHT-1)) ZKUpdateUtil.setHeight(findWindow, "100%"); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java index 7ab999807c..6800b3ce09 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java @@ -626,7 +626,7 @@ public class FindWindow extends Window implements EventListener, ValueCha div.appendChild(labelHistory); div.appendChild(historyCombo); historyCombo.setStyle("margin-left: 3px; margin-right: 3px; position: relative; vertical-align: middle;"); - + div.setClass("toolbar"); winMain = new MultiTabPart(); winMain.createPart(layout); winMain.getComponent().setStyle("position: relative; margin-left: auto; margin-right: auto; margin-top: 3px; margin-bottom: 3px;"); @@ -647,6 +647,7 @@ public class FindWindow extends Window implements EventListener, ValueCha initSimple(); initAdvanced(); /** START DEVCOFFEE **/ + statusBar.setClass("statusbar"); layout.appendChild(statusBar); /** START DEVCOFFEE **/ From a1a496d253fb80d5a7790d052228de6a7fec0655 Mon Sep 17 00:00:00 2001 From: sjeffen Date: Thu, 9 May 2019 12:36:38 +0200 Subject: [PATCH 8/9] IDEMPIERE-3958 Project Detail Accounting Report parameter error --- .../i6.2/oracle/201905091233_IDEMPIERE-3958.sql | 15 +++++++++++++++ .../postgresql/201905091233_IDEMPIERE-3958.sql | 12 ++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 migration/i6.2/oracle/201905091233_IDEMPIERE-3958.sql create mode 100644 migration/i6.2/postgresql/201905091233_IDEMPIERE-3958.sql diff --git a/migration/i6.2/oracle/201905091233_IDEMPIERE-3958.sql b/migration/i6.2/oracle/201905091233_IDEMPIERE-3958.sql new file mode 100644 index 0000000000..556bd86788 --- /dev/null +++ b/migration/i6.2/oracle/201905091233_IDEMPIERE-3958.sql @@ -0,0 +1,15 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- CPH::ERP Comments: +-- 28. apr. 2019 00.04.12 CEST +UPDATE AD_Process_Para SET AD_Reference_Value_ID=141,Updated=TO_DATE('2019-04-28 00:04:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=363 +; + +-- 1. maj 2019 17.22.57 CEST +UPDATE AD_Column SET AD_Reference_Value_ID=141,Updated=TO_DATE('2019-05-01 17:22:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=14091 +; + +SELECT register_migration_script('201905091233_IDEMPIERE-3958.sql') FROM dual +; + diff --git a/migration/i6.2/postgresql/201905091233_IDEMPIERE-3958.sql b/migration/i6.2/postgresql/201905091233_IDEMPIERE-3958.sql new file mode 100644 index 0000000000..6719f17234 --- /dev/null +++ b/migration/i6.2/postgresql/201905091233_IDEMPIERE-3958.sql @@ -0,0 +1,12 @@ +-- CPH::ERP Comments: +-- 28. apr. 2019 00.04.12 CEST +UPDATE AD_Process_Para SET AD_Reference_Value_ID=141,Updated=TO_TIMESTAMP('2019-04-28 00:04:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_Para_ID=363 +; + +-- 1. maj 2019 17.22.57 CEST +UPDATE AD_Column SET AD_Reference_Value_ID=141,Updated=TO_TIMESTAMP('2019-05-01 17:22:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=14091 +; + +SELECT register_migration_script('201905091233_IDEMPIERE-3958.sql') FROM dual +; + From a54fd56ffd77038a4f033ce5d66d5bdc0de2ff3c Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Thu, 9 May 2019 13:12:23 +0200 Subject: [PATCH 9/9] IDEMPIERE-3967 SysConfig without cache --- .../src/org/compiere/model/MSysConfig.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MSysConfig.java b/org.adempiere.base/src/org/compiere/model/MSysConfig.java index 1b140ad148..044c0ff628 100644 --- a/org.adempiere.base/src/org/compiere/model/MSysConfig.java +++ b/org.adempiere.base/src/org/compiere/model/MSysConfig.java @@ -420,12 +420,15 @@ public class MSysConfig extends X_AD_SysConfig public static String getValue(String Name, String defaultValue, int AD_Client_ID, int AD_Org_ID) { String key = ""+AD_Client_ID+"_"+AD_Org_ID+"_"+Name; - String str = s_cache.get(key); - if (str != null) - return str; - if (str == null && s_cache.containsKey(key)) // found null key - return defaultValue; - + String str = null; + if (! Name.endsWith("_NOCACHE")) { + str = s_cache.get(key); + if (str != null) + return str; + if (str == null && s_cache.containsKey(key)) // found null key + return defaultValue; + } + // String sql = "SELECT Value FROM AD_SysConfig" + " WHERE Name=? AND AD_Client_ID IN (0, ?) AND AD_Org_ID IN (0, ?) AND IsActive='Y'" @@ -452,13 +455,15 @@ public class MSysConfig extends X_AD_SysConfig rs = null; pstmt = null; } // + if (str != null) { - s_cache.put(key, str); + if (! Name.endsWith("_NOCACHE")) + s_cache.put(key, str); return str; - } - else { + } else { // anyways, put the not found key as null - s_cache.put(key, null); + if (! Name.endsWith("_NOCACHE")) + s_cache.put(key, null); return defaultValue; } }