diff --git a/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/FindGeneric.groovy b/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/FindGeneric.groovy index 4d6535a4b8f..810bf18e11a 100644 --- a/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/FindGeneric.groovy +++ b/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/FindGeneric.groovy @@ -19,6 +19,7 @@ package org.apache.ofbiz.webtools.entity import org.apache.ofbiz.base.util.UtilXml +import org.apache.ofbiz.entity.util.EntityQuery import org.apache.ofbiz.entity.GenericEntityException import org.apache.ofbiz.entity.model.ModelEntity import org.apache.ofbiz.entity.model.ModelFieldType @@ -96,25 +97,54 @@ if (modelEntity) { dynamicAutoEntitySearchFormRenderer.render(writer, context) context.dynamicAutoEntitySearchForm = writer - //prepare the result list from performFind + // Prepare the data retrieval using EntityQuery with limit and offset for better performance + int viewIndex = [parameters.VIEW_INDEX_1, parameters.VIEW_INDEX, parameters.viewIndex].find { String val -> val?.isInteger() }?.toInteger() ?: 0 + int viewSize = [parameters.VIEW_SIZE_1, parameters.VIEW_SIZE, parameters.viewSize].find { String val -> val?.isInteger() }?.toInteger() ?: 20 + + Map prepareFindResult = dispatcher.runSync('prepareFind', [ + entityName: entityName, + inputFields: parameters, + orderBy: parameters.sortField, + noConditionFind: parameters.noConditionFind ?: 'Y' + ]) + + if (prepareFindResult.entityConditionList || parameters.noConditionFind == 'Y') { + EntityQuery query = EntityQuery.use(delegator) + .from(entityName) + .limit(viewSize) + .offset(viewIndex * viewSize) + .cursorScrollInsensitive() + + if (prepareFindResult.entityConditionList) { + query.where(prepareFindResult.entityConditionList) + } + + if (prepareFindResult.orderByList) { + query.orderBy(prepareFindResult.orderByList) + } else { + query.orderBy(modelEntity.getPkFieldNames()) + } + + if (fieldsToSelect) { + query.select(fieldsToSelect as Set) + } + + if (parameters.distinct == 'Y') { + query.distinct() + } + + context.listIt = query.queryIterator() + context.listSize = context.listIt.getResultsSizeAfterPartialList() + } + + //prepare the result list String dynamicAutoEntityFieldListForm = """
- - - - """ - if (fieldsToSelect) { - dynamicAutoEntityFieldListForm += """ - """ - } - dynamicAutoEntityFieldListForm += """ - - - """