Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com

Inicio

 
4D v19.8
entitySelection.orderByFormula( )

entitySelection.orderByFormula( ) 


 

entitySelection.orderByFormula ( formula {; orden}{; params} ) -> Resultado 
Parámetro Tipo   Descripción
formula  Texto, Objeto in Cadena fórmula, u
Objeto fórmula
orden  Entero largo in dk ascendente (por defecto) o dk descendente
params  Objeto in Parámetro(s) para la fórmula
Resultado  EntitySelection in Nueva selección de entidades ordenada

El método entitySelection.orderByFormula( ) devuelve una nueva selección de entidades ordenada que contiene todas las entidades de la selección de entidades en el orden definido a través de los parámetros formula y, opcionalmente,  orden y params .

Nota: este método no modifica la selección de entidades original.

En el parámetro formula, puede pasar un texto o un objeto:

  • texto: una expresión 4D como "Año de (this.birthDate)"
  • objeto: un objeto fórmula válido creado con el comando Formula o Formula from string.

formula se ejecuta para cada entidad de la selección de entidades y su resultado se utiliza para definir la posición de la entidad en la selección de entidades devuelta. El resultado debe ser de un tipo ordenable (booleano, fecha, número, texto, hora, null).

Nota: un resultado null es siempre el valor más pequeño.

De forma predeterminada, si omite el parámetro orden, la selección de entidades resultante se ordena en orden ascendente. Opcionalmente, puede pasar uno de los siguientes valores en el parámetro orden:

Constante Valor Comentario
dk ascending 0

Orden de clasificación ascendente (predeterminado)

dk descending 1

Orden de clasificación descendente (predeterminado)

Dentro de la formula, la entidad procesada y, por lo tanto, sus atributos están disponibles a través del comando This (por ejemplo, This .lastName). 

Puede pasar los parámetros a la formula utilizando la propiedad args (objeto) del parámetro paramsr: formula recibe el objeto settings.args en $1.

Ordenar estudiantes utilizando una fórmula como texto:

 C_OBJECT($es1;$es2)
 $es1:=ds.Students.query("nationality=:1";"French")
 $es2:=$es1.orderByFormula("length(this.lastname)") //ascendente de forma predeterminada
 $es2:=$es1.orderByFormula("length(this.lastname)";dk descending)

Mismo orden de clasificación pero utilizando un objeto fórmula:

 C_OBJECT($es1;$es2;$formula)
 $es1:=ds.Students.query("nationality=:1";"French")
 $formula:=Formula(Length(This.lastname))
 $es2:=$es1.orderByFormula($formula// ascendente de forma predeterminada
 $es2:=$es1.orderByFormula($formula;dk descending)

La fórmula se da como un objeto fórmula con parámetros; El objeto settings.args se recibe como $1 en el método computeAverage:

En este ejemplo, el campo objeto marca en la clase de datos Students contiene las calificaciones de los estudiantes para cada materia. Se utiliza un solo objeto fórmula para calcular la calificación promedio de un estudiante con diferentes coeficientes para la escuela A y la escuela B.

 C_OBJECT($es1;$es2;$formula;$schoolA;$schoolB)
 $es1:=ds.Students.query("nationality=:1";"French")
 $formula:=Formula(computeAverage($1))
 
 $schoolA:=New object() //settings object
 $schoolA.args:=New object("english";1;"math";1;"history";1) // Coeficientes para calcular un promedio
  //Ordenar alumnos según criterios de la escuela A
 $es2:=$es1.entitySelection.orderByFormula($formula;$schoolA)
 
 $schoolB:=New object() //settings object
 $schoolB.args:=New object("english";1;"math";2;"history";3) // Coeficientes para calcular un promedio
 
  //Ordenar a los estudiantes de acuerdo a los criterios de la escuela B
 $es2:=$es1.entitySelection.orderByFormula($formula;dk descending;$schoolB)

  //
  // computeAverage method
  // -----------------------------
 C_TEXT($subject)
 C_LONGINT($0;$average;$sum)
 C_OBJECT($coefList;$1)
 
 $coefList:=$1
 $average:=0
 $sum:=0
 
 For each($subject;$coefList)
    $sum:=$sum+$coefList[$subject]
 End for each
 
 For each($subject;This.marks)
    $average:=$average+(This.marks[$subject]*$coefList[$subject])
 End for each
 
 $0:=$average/$sum



Ver también 

entitySelection.orderBy( )
QUERY BY FORMULA

 
PROPIEDADES 

Producto: 4D
Tema: ORDA - EntitySelection

 
CONTENIDO DE LA PÁGINA 
 
HISTORIA 

Creado por: 4D v17 R6

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v19)
Manual de lenguaje 4D ( 4D v19.1)
Manual de lenguaje 4D ( 4D v19.4)
Manual de lenguaje 4D ( 4D v19.5)
Manual de lenguaje 4D ( 4D v19.6)
Manual de lenguaje 4D ( 4D v19.7)
Manual de lenguaje 4D ( 4D v19.8)