diff --git a/org.adempiere.base/src/org/adempiere/util/AbstractDocumentSearch.java b/org.adempiere.base/src/org/adempiere/util/AbstractDocumentSearch.java index a02e5cca35..588b0dbf0d 100644 --- a/org.adempiere.base/src/org/adempiere/util/AbstractDocumentSearch.java +++ b/org.adempiere.base/src/org/adempiere/util/AbstractDocumentSearch.java @@ -171,9 +171,15 @@ public abstract class AbstractDocumentSearch { } // search for a String } else if (msd.getDataType().equals(MSearchDefinition.DATATYPE_STRING)) { - pstmtSO.setString(1, searchString); + if (searchString.endsWith("%")) + pstmtSO.setString(1, searchString); + else + pstmtSO.setString(1, searchString+"%"); if (msd.getPO_Window_ID() != 0) { - pstmtPO.setString(1, searchString); + if (searchString.endsWith("%")) + pstmtPO.setString(1, searchString); + else + pstmtPO.setString(1, searchString+"%"); } } // SearchDefinition with a special query @@ -191,7 +197,10 @@ public abstract class AbstractDocumentSearch { if (msd.getDataType().equals(MSearchDefinition.DATATYPE_INTEGER)) { pstmtSO.setInt(i, Integer.valueOf(searchString.replaceAll("\\D", ""))); } else if (msd.getDataType().equals(MSearchDefinition.DATATYPE_STRING)) { - pstmtSO.setString(i, searchString + "%"); + if (searchString.endsWith("%")) + pstmtSO.setString(i, searchString); + else + pstmtSO.setString(i, searchString+"%"); } } } diff --git a/org.adempiere.base/src/org/compiere/model/MSysConfig.java b/org.adempiere.base/src/org/compiere/model/MSysConfig.java index ccd8f61bcc..9ab07b2fa3 100644 --- a/org.adempiere.base/src/org/compiere/model/MSysConfig.java +++ b/org.adempiere.base/src/org/compiere/model/MSysConfig.java @@ -42,7 +42,7 @@ public class MSysConfig extends X_AD_SysConfig /** * */ - private static final long serialVersionUID = 8965976274227777648L; + private static final long serialVersionUID = -4290840203977716310L; public static final String ADDRESS_VALIDATION = "ADDRESS_VALIDATION"; public static final String ALERT_SEND_ATTACHMENT_AS_XLS = "ALERT_SEND_ATTACHMENT_AS_XLS"; @@ -95,6 +95,7 @@ public class MSysConfig extends X_AD_SysConfig public static final String MAIL_SEND_BCC_TO_FROM = "MAIL_SEND_BCC_TO_FROM"; public static final String MAIL_SEND_CREDENTIALS = "MAIL_SEND_CREDENTIALS"; public static final String MAX_ACTIVITIES_IN_LIST = "MAX_ACTIVITIES_IN_LIST"; + public static final String MAX_RESULTS_PER_SEARCH = "MAX_RESULTS_PER_SEARCH"; public static final String MENU_INFOUPDATER_SLEEP_MS = "MENU_INFOUPDATER_SLEEP_MS"; public static final String MFG_ValidateCostsDifferenceOnCreate = "MFG_ValidateCostsDifferenceOnCreate"; public static final String MFG_ValidateCostsOnCreate = "MFG_ValidateCostsOnCreate"; diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/DocumentSearchController.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/DocumentSearchController.java index a6c49157e0..38c7ba36e7 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/DocumentSearchController.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/DocumentSearchController.java @@ -30,6 +30,7 @@ import org.compiere.model.MLookupInfo; import org.compiere.model.MQuery; import org.compiere.model.MRole; import org.compiere.model.MSearchDefinition; +import org.compiere.model.MSysConfig; import org.compiere.model.MTable; import org.compiere.model.MWindow; import org.compiere.model.Query; @@ -53,6 +54,7 @@ public class DocumentSearchController implements EventListener{ private static final String SEARCH_RESULT = "search.result"; private static final String ON_SEARCH_DOCUMENTS = "onSearchDocuments"; + private int MAX_RESULTS_PER_SEARCH = 3; private Vlayout layout; private ArrayList list; private int selected = -1; @@ -61,6 +63,7 @@ public class DocumentSearchController implements EventListener{ * */ public DocumentSearchController() { + MAX_RESULTS_PER_SEARCH = MSysConfig.getIntValue(MSysConfig.MAX_RESULTS_PER_SEARCH, 3, Env.getAD_Client_ID(Env.getCtx())); } public void create(Component parent) { @@ -119,7 +122,7 @@ public class DocumentSearchController implements EventListener{ final MRole role = MRole.get(Env.getCtx(), Env.getAD_Role_ID(Env.getCtx()), Env.getAD_User_ID(Env.getCtx()), true); selected = -1; - Query query = new Query(Env.getCtx(), I_AD_SearchDefinition.Table_Name, "", null); + Query query = new Query(Env.getCtx(), I_AD_SearchDefinition.Table_Name, "TransactionCode IS NULL", null); List definitions = query.setOnlyActiveRecords(true).list(); for(MSearchDefinition msd : definitions) { MTable table = new MTable(Env.getCtx(), msd.getAD_Table_ID(), null); @@ -216,7 +219,7 @@ public class DocumentSearchController implements EventListener{ pstmt.setQueryTimeout(1); rs = pstmt.executeQuery(); int count = 0; - while (rs.next() && count < 3) { + while (rs.next() && count < MAX_RESULTS_PER_SEARCH) { count++; int id = rs.getInt(1); SearchResult result = new SearchResult();