From d1dea0fd02188a5f9057da4d1bc795f9f780b2f8 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Tue, 6 Aug 2013 12:29:19 +0800 Subject: [PATCH] IDEMPIERE-1248 Performance Optimization: Eliminate the fire and processing of duplicate event. Fixed problem with refresh after process call. --- .../adempiere/webui/adwindow/ADTabpanel.java | 25 +++++++++++- .../adwindow/AbstractADWindowContent.java | 39 ++++++++++++++++--- 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java index 11dae34209..13d97fff56 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java @@ -657,6 +657,25 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer return new Space(); } + /** + * Turn on/off the processing of dynamic display call for current execution cycle. + * The system will ignore duplicate dynamic display request within the same execution cycle, + * this method can be use to alter that. + * @param enable + */ + public void toggleDynamicDisplay(boolean enable) { + Execution exec = Executions.getCurrent(); + int currentRow = getGridTab().isSortTab() ? 0 : getGridTab().getCurrentRow(); + StringBuilder builder = new StringBuilder(ON_DYNAMIC_DISPLAY_CALL_EVENT_ATTR) + .append("_").append(getUuid()) + .append("_").append(0) + .append("_").append(currentRow); + if (enable) + exec.removeAttribute(builder.toString()); + else + exec.setAttribute(builder.toString(), Boolean.TRUE); + } + /** * Validate display properties of fields of current row * @param col @@ -669,8 +688,10 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer col = 0; int currentRow = getGridTab().isSortTab() ? 0 : getGridTab().getCurrentRow(); Execution exec = Executions.getCurrent(); - StringBuilder builder = new StringBuilder(ON_DYNAMIC_DISPLAY_CALL_EVENT_ATTR).append("_") - .append(col).append("_").append(currentRow); + StringBuilder builder = new StringBuilder(ON_DYNAMIC_DISPLAY_CALL_EVENT_ATTR) + .append("_").append(getUuid()) + .append("_").append(col) + .append("_").append(currentRow); String key = builder.toString(); if (exec.getAttribute(key) == null) { 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 5cbbd339c1..1f32bd9541 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 @@ -1559,20 +1559,47 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements @Override public void onCallback(Boolean result) { - adTabbox.getSelectedGridTab().dataRefreshAll(fireEvent, true); - adTabbox.getSelectedTabpanel().dynamicDisplay(0); - focusToActivePanel(); + afterRefresh(fireEvent); } }); } else { - adTabbox.getSelectedGridTab().dataRefreshAll(fireEvent, true); - adTabbox.getSelectedTabpanel().dynamicDisplay(0); - focusToActivePanel(); + afterRefresh(fireEvent); } } + /** + * @param fireEvent + */ + protected void afterRefresh(final boolean fireEvent) { + IADTabpanel headerTab = adTabbox.getSelectedTabpanel(); + IADTabpanel detailTab = adTabbox.getSelectedDetailADTabpanel(); + if (headerTab instanceof ADTabpanel) + { + ((ADTabpanel) headerTab).toggleDynamicDisplay(false); + } + if (detailTab != null && detailTab instanceof ADTabpanel) + { + ((ADTabpanel) detailTab).toggleDynamicDisplay(false); + } + adTabbox.getSelectedGridTab().dataRefreshAll(fireEvent, true); + if (headerTab instanceof ADTabpanel) + { + ((ADTabpanel) headerTab).toggleDynamicDisplay(true); + } + if (detailTab != null && detailTab instanceof ADTabpanel) + { + ((ADTabpanel) detailTab).toggleDynamicDisplay(true); + } + headerTab.dynamicDisplay(0); + if (detailTab != null) + { + detailTab.dynamicDisplay(0); + } + focusToActivePanel(); + } + /** * @see ToolbarListener#onRefresh() */