En una entrada anterior del blog, aprendió a construir criterios de búsqueda sofisticados y complejos aplicando fórmulas en una consulta ORDA. Para proporcionarle aún más herramientas de desarrollo completas y potentes, un nuevo método ORDA disponible: orderByFormula(). Con la ayuda de fórmulas, ahora puede ordenar una selección de entidades utilizando criterios complejos en un método de proyecto o expresión 4D.
HDI: Ejemplos para ordenar una selección de entidades con una fórmula
El criterio de orden se evalúa cuando la fórmula se da como una cadena o un Formula al método orderByFormula() método.
Ordenar con una fórmula como una Cadena
Aquí tenemos una dataClass, Companies, y ordenamos todas las empresas en función de sus beneficios (beneficios = ingresos – costes).
Tenga en cuenta que se accede a la entidad mediante el comando This comando.
C_OBJECT($companies;$orderedCompanies)
$companies :=ds.Companies.all()
$orderedCompanies :=$companies.orderByFormula ("Este.ingreso - Este.coste")
Ordenar con un objeto de fórmula
Aquí ordenamos las empresas usando el mismo criterio, pero en lugar de una cadena, estamos usando un Formula y estamos ordenando por orden descendente.
C_OBJECT($companies;$orderedCompanies;$formula)
$formula := Formula(This.revenue - This.costs)
$companies :=ds.Companies.all()
$orderedCompanies :=
$companies.orderByFormula ($formula;dk descending)
Observe que el uso de un Formula proporciona algunas ventajas (como el autocompletado, los colores en el editor de código, etc.) sobre el uso de una fórmula como cadena.
El método orderByFormula() tiene aún más opciones. Consulta la documentación y descarga el IDH de arriba para más detalles.
sobre Ordenar una selección de entidades
Ahora puede insertar una sentencia order by dentro del propio método miembro query(). Esto es una gran ventaja cuando se trabaja en modo cliente/servidor porque se puede combinar la consulta y la acción de ordenar en la misma petición, reduciendo el número de peticiones enviadas al servidor y su tráfico de red.
C_OBJECT($companies)
$companies :=ds.Companies.query("revenue> :1 order by costs desc";5000)