Ticket #1004012 IDEMPIERE-1954 Implement MaxQueryRecords for AD_InfoWindow.

This commit is contained in:
Heng Sin Low 2014-05-16 16:07:49 +08:00
parent 8ae6fad8dc
commit dc50ef3418
6 changed files with 123 additions and 10 deletions

View File

@ -0,0 +1,29 @@
SET SQLBLANKLINES ON
SET DEFINE OFF
-- May 16, 2014 1:53:34 PM MYT
-- IDEMPIERE-1954 Implement MaxQueryRecords for AD_InfoWindow
INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,Version,AD_Column_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,IsToolbarButton,IsAlwaysUpdateable,AD_Client_ID,EntityType,IsEncrypted,IsSecure,AD_Element_ID,AD_Table_ID) VALUES (0,'N',1,211240,'Y','N','N',0,'N',10,'N',11,'N','N','Y','8266be38-9b40-4d93-99cb-81cbe10035b5','Y','MaxQueryRecords','If defined, you cannot query more records as defined - the query criteria needs to be changed to query less records','0','Enter the number of records a user will be able to query to avoid unnecessary system load. If 0, no restrictions are imposed.','Max Query Records','Y',TO_DATE('2014-05-16 13:53:33','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2014-05-16 13:53:33','YYYY-MM-DD HH24:MI:SS'),100,'N','N',0,'D','N','N',2854,895)
;
-- May 16, 2014 1:54:51 PM MYT
INSERT INTO AD_Field (SortNo,IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,SeqNo,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,CreatedBy,Updated,IsActive,IsDisplayedGrid,SeqNoGrid,XPosition,IsQuickEntry,AD_Client_ID,ColumnSpan,NumLines,IsAdvancedField,IsDefaultFocus,EntityType,Created) VALUES (0,'N',842,0,'N','N',211240,180,'Y',203024,'N','Enter the number of records a user will be able to query to avoid unnecessary system load. If 0, no restrictions are imposed.','If defined, you cannot query more records as defined - the query criteria needs to be changed to query less records','Max Query Records','ad1bced3-2965-45be-8982-fd64639b6863','Y','N',100,0,100,TO_DATE('2014-05-16 13:54:50','YYYY-MM-DD HH24:MI:SS'),'Y','Y',100,2,'N',0,2,1,'N','N','D',TO_DATE('2014-05-16 13:54:50','YYYY-MM-DD HH24:MI:SS'))
;
-- May 16, 2014 1:55:27 PM MYT
UPDATE AD_Field SET XPosition=1,Updated=TO_DATE('2014-05-16 13:55:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=203024
;
-- May 16, 2014 2:16:23 PM MYT
-- IDEMPIERE-1954 Implement MaxQueryRecords for AD_InfoWindow
ALTER TABLE AD_InfoWindow ADD MaxQueryRecords NUMBER(10) DEFAULT 0 NOT NULL
;
-- May 16, 2014 3:01:57 PM MYT
-- IDEMPIERE-1954 Implement MaxQueryRecords for AD_InfoWindow
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','Your search returned more than the maximum number of results allowed.<br>Please narrow down your search criteria and try your search again.',200274,'D','62341bf3-576c-4c9a-9cd3-4cb88b9bb989','InfoFindOverMax','Y',TO_DATE('2014-05-16 15:01:56','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_DATE('2014-05-16 15:01:56','YYYY-MM-DD HH24:MI:SS'))
;
SELECT register_migration_script('201405160715_IDEMPIERE-1954.sql') FROM dual
;

View File

@ -0,0 +1,26 @@
-- May 16, 2014 1:53:34 PM MYT
-- IDEMPIERE-1954 Implement MaxQueryRecords for AD_InfoWindow
INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,Version,AD_Column_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,IsToolbarButton,IsAlwaysUpdateable,AD_Client_ID,EntityType,IsEncrypted,IsSecure,AD_Element_ID,AD_Table_ID) VALUES (0,'N',1,211240,'Y','N','N',0,'N',10,'N',11,'N','N','Y','8266be38-9b40-4d93-99cb-81cbe10035b5','Y','MaxQueryRecords','If defined, you cannot query more records as defined - the query criteria needs to be changed to query less records','0','Enter the number of records a user will be able to query to avoid unnecessary system load. If 0, no restrictions are imposed.','Max Query Records','Y',TO_TIMESTAMP('2014-05-16 13:53:33','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2014-05-16 13:53:33','YYYY-MM-DD HH24:MI:SS'),100,'N','N',0,'D','N','N',2854,895)
;
-- May 16, 2014 1:54:51 PM MYT
INSERT INTO AD_Field (SortNo,IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,SeqNo,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,CreatedBy,Updated,IsActive,IsDisplayedGrid,SeqNoGrid,XPosition,IsQuickEntry,AD_Client_ID,ColumnSpan,NumLines,IsAdvancedField,IsDefaultFocus,EntityType,Created) VALUES (0,'N',842,0,'N','N',211240,180,'Y',203024,'N','Enter the number of records a user will be able to query to avoid unnecessary system load. If 0, no restrictions are imposed.','If defined, you cannot query more records as defined - the query criteria needs to be changed to query less records','Max Query Records','ad1bced3-2965-45be-8982-fd64639b6863','Y','N',100,0,100,TO_TIMESTAMP('2014-05-16 13:54:50','YYYY-MM-DD HH24:MI:SS'),'Y','Y',100,2,'N',0,2,1,'N','N','D',TO_TIMESTAMP('2014-05-16 13:54:50','YYYY-MM-DD HH24:MI:SS'))
;
-- May 16, 2014 1:55:27 PM MYT
UPDATE AD_Field SET XPosition=1,Updated=TO_TIMESTAMP('2014-05-16 13:55:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=203024
;
-- May 16, 2014 2:16:23 PM MYT
-- IDEMPIERE-1954 Implement MaxQueryRecords for AD_InfoWindow
ALTER TABLE AD_InfoWindow ADD COLUMN MaxQueryRecords NUMERIC(10) DEFAULT '0' NOT NULL
;
-- May 16, 2014 3:01:57 PM MYT
-- IDEMPIERE-1954 Implement MaxQueryRecords for AD_InfoWindow
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','Your search returned more than the maximum number of results allowed.<br>Please narrow down your search criteria and try your search again.',200274,'D','62341bf3-576c-4c9a-9cd3-4cb88b9bb989','InfoFindOverMax','Y',TO_TIMESTAMP('2014-05-16 15:01:56','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_TIMESTAMP('2014-05-16 15:01:56','YYYY-MM-DD HH24:MI:SS'))
;
SELECT register_migration_script('201405160715_IDEMPIERE-1954.sql') FROM dual
;

View File

@ -273,6 +273,19 @@ public interface I_AD_InfoWindow
*/ */
public boolean isValid(); public boolean isValid();
/** Column name MaxQueryRecords */
public static final String COLUMNNAME_MaxQueryRecords = "MaxQueryRecords";
/** Set Max Query Records.
* If defined, you cannot query more records as defined - the query criteria needs to be changed to query less records
*/
public void setMaxQueryRecords (int MaxQueryRecords);
/** Get Max Query Records.
* If defined, you cannot query more records as defined - the query criteria needs to be changed to query less records
*/
public int getMaxQueryRecords();
/** Column name Name */ /** Column name Name */
public static final String COLUMNNAME_Name = "Name"; public static final String COLUMNNAME_Name = "Name";

View File

@ -30,7 +30,7 @@ public class X_AD_InfoWindow extends PO implements I_AD_InfoWindow, I_Persistent
/** /**
* *
*/ */
private static final long serialVersionUID = 20140124L; private static final long serialVersionUID = 20140516L;
/** Standard Constructor */ /** Standard Constructor */
public X_AD_InfoWindow (Properties ctx, int AD_InfoWindow_ID, String trxName) public X_AD_InfoWindow (Properties ctx, int AD_InfoWindow_ID, String trxName)
@ -51,6 +51,8 @@ public class X_AD_InfoWindow extends PO implements I_AD_InfoWindow, I_Persistent
// Y // Y
setIsValid (false); setIsValid (false);
// N // N
setMaxQueryRecords (0);
// 0
setName (null); setName (null);
} */ } */
} }
@ -385,6 +387,26 @@ public class X_AD_InfoWindow extends PO implements I_AD_InfoWindow, I_Persistent
return false; return false;
} }
/** Set Max Query Records.
@param MaxQueryRecords
If defined, you cannot query more records as defined - the query criteria needs to be changed to query less records
*/
public void setMaxQueryRecords (int MaxQueryRecords)
{
set_Value (COLUMNNAME_MaxQueryRecords, Integer.valueOf(MaxQueryRecords));
}
/** Get Max Query Records.
@return If defined, you cannot query more records as defined - the query criteria needs to be changed to query less records
*/
public int getMaxQueryRecords ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_MaxQueryRecords);
if (ii == null)
return 0;
return ii.intValue();
}
/** Set Name. /** Set Name.
@param Name @param Name
Alphanumeric identifier of the entity Alphanumeric identifier of the entity

View File

@ -40,6 +40,7 @@ import org.adempiere.webui.event.ValueChangeEvent;
import org.adempiere.webui.event.ValueChangeListener; import org.adempiere.webui.event.ValueChangeListener;
import org.adempiere.webui.panel.InfoPanel; import org.adempiere.webui.panel.InfoPanel;
import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.session.SessionManager;
import org.adempiere.webui.window.FDialog;
import org.compiere.minigrid.ColumnInfo; import org.compiere.minigrid.ColumnInfo;
import org.compiere.minigrid.EmbedWinInfo; import org.compiere.minigrid.EmbedWinInfo;
import org.compiere.minigrid.IDColumn; import org.compiere.minigrid.IDColumn;
@ -185,7 +186,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
for (int i = 0; i < identifiers.size(); i++) { for (int i = 0; i < identifiers.size(); i++) {
WEditor editor = identifiers.get(i); WEditor editor = identifiers.get(i);
editor.setValue(queryValue); editor.setValue(queryValue);
testCount(); testCount(false);
if (m_count > 0) { if (m_count > 0) {
break; break;
} else { } else {
@ -202,7 +203,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
WEditor editor = identifiers.get(i); WEditor editor = identifiers.get(i);
editor.setValue(values[i]); editor.setValue(values[i]);
} }
testCount(); testCount(false);
} }
} }
@ -1090,6 +1091,15 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
* @return true if display * @return true if display
*/ */
protected boolean testCount() protected boolean testCount()
{
return testCount(true);
}
/**
* Test Row Count
* @return true if display
*/
private boolean testCount(boolean promptError)
{ {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
String dynWhere = getSQLWhere(); String dynWhere = getSQLWhere();
@ -1137,6 +1147,16 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
if (log.isLoggable(Level.FINE)) if (log.isLoggable(Level.FINE))
log.fine("#" + m_count + " - " + (System.currentTimeMillis()-start) + "ms"); log.fine("#" + m_count + " - " + (System.currentTimeMillis()-start) + "ms");
if (infoWindow.getMaxQueryRecords() > 0 && m_count > infoWindow.getMaxQueryRecords())
{
if (promptError)
{
FDialog.error(getWindowNo(), this, "InfoFindOverMax",
m_count + " > " + infoWindow.getMaxQueryRecords());
}
m_count = 0;
}
return true; return true;
} // testCount } // testCount

View File

@ -352,6 +352,8 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
cacheEnd = -1; cacheEnd = -1;
testCount(); testCount();
if (m_count > 0)
{
m_useDatabasePaging = (m_count > 1000); m_useDatabasePaging = (m_count > 1000);
if (m_useDatabasePaging) if (m_useDatabasePaging)
{ {
@ -362,6 +364,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
readLine(0, -1); readLine(0, -1);
} }
} }
}
private void readData(ResultSet rs) throws SQLException { private void readData(ResultSet rs) throws SQLException {
int colOffset = 1; // columns start with 1 int colOffset = 1; // columns start with 1