En 4D v17 R6, las consultas ORDA son cada vez más potentes y concisas. Esta entrada del blog es para aquellos que necesitan criterios de búsqueda más sofisticados que una simple sintaxis como«nombre = Smith‘». Con esta versión de R, puedes utilizar cualquier método de proyecto o expresión 4D en el query() utilizando fórmulas.
¿Qué mejor manera de explicar esta función que con un ejemplo? Vamos a profundizar en los detalles.
HDI: Ejemplo de consultas ORDA utilizando fórmulas
ESCRIBIR UNA CONSULTA UTILIZANDO UNA FÓRMULA
El método miembro query() ha sido actualizado para soportar un único objeto Formula como parámetro.
Ejemplo
En la clase de datos Students , buscamos a los estudiantes con una puntuación en inglés superior a su puntuación media general.
Tenga en cuenta que se accede a cada entidad mediante la fórmula con el This comando.
C_OBJECT($formula;$students)
// In the Students dataClass, grades is an object field containing students' grades for each subject
// Example of JSON representation of the grades object field:
// {math:50,english:90,history:85}
// The studentAverage project method computes the student's overall average in all subjects
$formula :=Formula(This.grades.english>studentAverage (This))
$students :=ds.Students.query($formula)
utilizar una fórmula con otros criterios de búsqueda
Las fórmulas pueden combinarse fácilmente con otros criterios de búsqueda. A continuación, un ejemplo para mostrarle cómo hacerlo.
Ejemplo
En la clase de datos Students , seguimos buscando estudiantes con una puntuación en inglés superior a la media general Y cuyo país sea Inglaterra.
El objeto $formula se utiliza como un valor marcador de posición, como cualquier otro.
C_OBJECT($formula;$students)
C_TEXT ($country) // $country = "France"
$formula :=Formula(This.grades.english>studentAverage (This))
$students :=ds.Students.query(":1 y país=:2";$formula;$country)
utilizar una fórmula en la cadena de consulta
También se puede insertar una fórmula en la cadena de consulta con una sentencia eval().
Aunque esto puede ser conveniente para codificar rápidamente una consulta, se perderán las ventajas de utilizar un objeto de fórmula (como el autocompletado, los colores en el editor de código y las llamadas de búsqueda).
C_OBJECT($students)
C_TEXT ($country) // $country = "France"
$students :=ds.Students.query("eval(This.grades.english > studentAverage (This)) and country=:1";$country)
NOTA: El método query() del objeto de selección de entidades también ha sido actualizado para soportar fórmulas. Consulte la documentación para obtener más información.