IDEMPIERE-2488:Info Window run Query twice
wrong script update end of page
This commit is contained in:
parent
09077a1e83
commit
d8be1aee9a
|
@ -67,6 +67,6 @@ UPDATE AD_Field SET SeqNo=220,Updated=TO_DATE('2015-08-09 23:45:12','YYYY-MM-DD
|
|||
;
|
||||
UPDATE AD_InfoWindow SET isLoadPageNum = 'Y'
|
||||
;
|
||||
SELECT register_migration_script('201509081982-IDEMPIERE-2488.sql') FROM dual l
|
||||
SELECT register_migration_script('201509081982-IDEMPIERE-2488.sql') FROM dual
|
||||
;
|
||||
|
||||
|
|
|
@ -96,6 +96,7 @@ import org.zkoss.zul.Listheader;
|
|||
import org.zkoss.zul.Listitem;
|
||||
import org.zkoss.zul.Menuitem;
|
||||
import org.zkoss.zul.Paging;
|
||||
import org.zkoss.zul.event.PagingEvent;
|
||||
import org.zkoss.zul.event.ZulEvents;
|
||||
import org.zkoss.zul.ext.Sortable;
|
||||
|
||||
|
@ -146,6 +147,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
|
||||
protected boolean isIDColumnKeyOfView = false;
|
||||
protected boolean hasRightQuickEntry = true;
|
||||
protected boolean isHasNextPage = false;
|
||||
/**
|
||||
* store selected record info
|
||||
* key of map is value of column play as keyView
|
||||
|
@ -519,6 +521,10 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
m_sqlOrder = " ORDER BY " + orderBy;
|
||||
} // prepareTable
|
||||
|
||||
protected boolean isLoadPageNumber(){
|
||||
return infoWindow == null || infoWindow.isLoadPageNum();
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* Execute Query
|
||||
*/
|
||||
|
@ -527,7 +533,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
line = new ArrayList<Object>();
|
||||
setCacheStart(-1);
|
||||
cacheEnd = -1;
|
||||
if (infoWindow == null || infoWindow.isLoadPageNum())
|
||||
if (isLoadPageNumber())
|
||||
testCount();
|
||||
else
|
||||
m_count = Integer.MAX_VALUE;
|
||||
|
@ -767,13 +773,16 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
contentPanel.setData(model, null);
|
||||
}
|
||||
restoreSelectedInPage();
|
||||
int no = m_count;
|
||||
setStatusLine(Integer.toString(no) + " " + Msg.getMsg(Env.getCtx(), "SearchRows_EnterQuery"), false);
|
||||
setStatusDB(Integer.toString(no));
|
||||
updateStatusBar (m_count);
|
||||
setStatusSelected ();
|
||||
addDoubleClickListener();
|
||||
}
|
||||
|
||||
protected void updateStatusBar (int no){
|
||||
setStatusLine((no == Integer.MAX_VALUE?"?":Integer.toString(no)) + " " + Msg.getMsg(Env.getCtx(), "SearchRows_EnterQuery"), false);
|
||||
setStatusDB(no == Integer.MAX_VALUE?"?":Integer.toString(no));
|
||||
}
|
||||
|
||||
private List<Object> readLine(int start, int end) {
|
||||
//cacheStart & cacheEnd - 1 based index, start & end - 0 based index
|
||||
if (getCacheStart() >= 1 && cacheEnd > getCacheStart())
|
||||
|
@ -820,6 +829,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
//
|
||||
|
||||
dataSql = buildDataSQL(start, end);
|
||||
isHasNextPage = false;
|
||||
if (log.isLoggable(Level.FINER))
|
||||
log.finer(dataSql);
|
||||
try
|
||||
|
@ -857,6 +867,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
//check now of rows loaded, break if we hit the suppose end
|
||||
if (m_useDatabasePaging && rowPointer >= cacheEnd)
|
||||
{
|
||||
isHasNextPage = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -876,6 +887,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
{
|
||||
end = cacheEnd;
|
||||
}
|
||||
validateEndPage ();
|
||||
|
||||
if (end == -1)
|
||||
{
|
||||
|
@ -889,6 +901,40 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* after query from database, process validate.
|
||||
* if end page include in cache, process calculate total record
|
||||
* if current page is out of page (no record is query) process query count to detect end page
|
||||
*/
|
||||
protected void validateEndPage (){
|
||||
if (paging == null || isLoadPageNumber())
|
||||
return;
|
||||
|
||||
if (!isHasNextPage){
|
||||
int extraPage = ((line.size() % pageSize > 0)?1:0);
|
||||
int pageInCache = line.size() / pageSize + extraPage;
|
||||
|
||||
if (pageInCache == 0 || pageInCache <= numPagePreLoad){
|
||||
// selected page is out of page
|
||||
testCount();
|
||||
extraPage = ((m_count % pageSize > 0)?1:0);
|
||||
pageInCache = m_count / pageSize + extraPage;
|
||||
// this one will set current page to end page
|
||||
paging.setTotalSize(m_count);
|
||||
Event pagingEvent = new PagingEvent("onPaging", paging, paging.getPageCount() - 1);
|
||||
Events.postEvent(pagingEvent);
|
||||
}else if (pageInCache > numPagePreLoad){
|
||||
// current page isn't end page. but page in cache has end page.
|
||||
int prePage = pageNo - numPagePreLoad;
|
||||
int readTotalRecord = (prePage > 0?prePage:0) * pageSize + line.size();
|
||||
paging.setTotalSize(readTotalRecord);
|
||||
m_count = readTotalRecord;
|
||||
}
|
||||
|
||||
updateStatusBar (m_count);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fromIndex and toIndex calculate with assume always query record as {@link #testCount()}
|
||||
* example after testCount we get calculate 6page.
|
||||
|
@ -1701,6 +1747,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
{
|
||||
updateListSelected();
|
||||
int pgNo = paging.getActivePage();
|
||||
|
||||
if (pageNo != pgNo)
|
||||
{
|
||||
|
||||
|
@ -1719,6 +1766,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
contentPanel.setData(model, null);
|
||||
restoreSelectedInPage();
|
||||
//contentPanel.setSelectedIndex(0);
|
||||
|
||||
}
|
||||
}
|
||||
else if (event.getName().equals(Events.ON_CHANGE))
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
<!-- false to use compress js which is much smaller. change to true if you need to debug -->
|
||||
<client-config>
|
||||
<debug-js>false</debug-js>
|
||||
<debug-js>true</debug-js>
|
||||
<processing-prompt-delay>500</processing-prompt-delay>
|
||||
</client-config>
|
||||
|
||||
|
|
Loading…
Reference in New Issue