PRIMER RÉCORD, ÚLTIMO RÉCORD, SIGUIENTE RÉCORD, RÉCORD ANTERIOR; ¿te suena? Seguro que sí. ¡Usted ya los ha estado usando para manejar selecciones! ORDA proporciona métodos útiles y familiares para navegar a través de las entidades en una selección de entidades – y obviamente, ¡algunas ventajas!
Para empezar, puede manejar varias selecciones de entidades al mismo tiempo y navegar a través de ellas de forma independiente, mientras que normalmente sólo puede manejar una única «selección actual» por tabla. Eso es precisamente lo que vamos a ver en esta entrada del blog.
Ya hemos visto que la consulta al almacén de datos devuelve una selección de entidades. ORDA proporciona los medios para acceder a las entidades en una selección de entidades muy fácilmente.
ORDA: Manejar entidades en selecciones de entidades
CREAR Y RELLENAR SELECCIONES DE ENTIDADES
Se crea una selección de entidades vacías con el método newSelection() método. También se pueden añadir entidades a la misma con el método add() método.
EJEMPLO
C_OBJECT($employee;$es)
C_TEXT ($name)
//Create a new empty entity selection
$es :=ds.Employee.newSelection()
Repeat
$name :=Request("¿Qué empleado?")
If (ok=1)
//Get the first employee whose last name is $name
$employee :=ds.Employee.query("lastName=:1";$name).first()
//Add the entity to the new entity selection $es
If ($employee#Null)
$es .add($employee)
End if
End if
Until (ok=0)
alert (String($es.length) + " se han añadido empleados a la nueva selección de entidades")
ACCEDER A LAS ENTIDADES DE UNA SELECCIÓN DE ENTIDADES
Recuerde que puede iterar a través de las entidades en una selección de entidades con el método for each bucle. Aquí hay un ejemplo rápido, pero también echa un vistazo a este blogpost.
C_OBJECT($employeesParis;$employee;$status)
// Get employees working in Paris
$employeesParis :=ds.Employee.query("city='Paris'")
//Iterate through each employee
For each ($employee;$employeesParis)
$employee.lastName:=Uppercase($employee.lastName)
$status:=$employee.save()
End for each
También puede cargar una entidad con su índice en una selección de entidades (el índice comienza en 0). He aquí un ejemplo:
C_OBJECT($gamers)
.
//Get all the gamers sorted by rank
$gamers :=ds.Gamer.all().orderBy("rango")
if ($gamers.length >=3)
ALERT ("Los tres primeros son: "+Char(13) +
+$gamers[0].lastName+Char(13)+$gamers[1].lastName+Char(13)+$gamers[2]lastName)
End if
PRIMERA Y ÚLTIMA ENTIDAD
El first() y last() le permiten obtener la primera o la última entidad de una selección de entidades. Estos métodos pueden devolver Null si la selección de entidades está vacía.
En el ejemplo siguiente, obtenemos la primera entidad de la selección de entidades de $gamers:
C_OBJECT($gamers;$first)
// Get the gamers whose last name starts with "H"
$gamers :=ds.Gamer.query("lastName='H@'")
// Get the first entity of the $gamers entity selection
$first :=$gamers.first()
If ($first#Null)
ALERT ("El primer jugador ha sido encontrado")
Else
ALERT ("La selección de entidades $gamers está vacía")
End if
ENTIDADES anteriores y siguientes
Una entidad puede pertenecer a una selección de entidades. En este caso, puede iterar a través de las entidades de una selección de entidades con los métodos previous() y next() .
En este ejemplo, utilizamos un formulario para mostrar una lista de jugadores. El usuario puede navegar por los detalles de cada jugador con los botones Anterior y Siguiente .
El botón Siguiente tiene el siguiente método de objeto:
//Form.gamer is an entity, edited on the form. It belongs to an entity selection which is the entire list of gamers.
If ( . . ()# ) . := . . () FormgamernextNull
//Edit the next entity of the entity selection to which the Form.gamer entity belongs.
FormgamerFormgamernext
End if
información sobre una entidad
¡Y eso no es todo! Para cualquier entidad dada, puedes obtener la selección de entidad de la que proviene. Algo más que es bueno saber, también hay métodos para obtener información contextual sobre una entidad, por ejemplo, comprobar si pertenece a una selección de entidades dada, obtener su posición en una selección de entidades, etc.
Aquí, tenemos dos selecciones de entidades ($employeesParis y $employeesNY). El método selectedEmployee selecciona un empleado en una de ellas. Podemos entonces determinar a qué selección de entidades pertenece este empleado con el método contains() método:
C_OBJECT($employeesParis;$employeesNY;$employee)
// Get employees working in Paris
$employeesParis :=ds.Employee.query("city='Paris'")
// Get employees working in New York
$employeesNY :=ds.Employee.query("city='New York'")
// The method selectedEmployee returns an employee in one of the two given entity selections
$employee :=selectedEmployee($employeesParis;$employeesNY)
Case of
: ($employeesParis.contains($employee))
ALERT ("El empleado pertenece a la selección de entidades $empleadosParís")
: ($employeesNY.contains($employee))
ALERT ("El empleado pertenece a la selección de entidades $empleadosNY")
End case
Aquí tenemos una selección de entidades ($employeesParis). El método selectedEmployee selecciona un empleado de la misma. Podemos obtener el índice del empleado en la selección de entidades con el método indexOf() método:
C_OBJECT($employeesParis;$employee)
// Get employees working in Paris
$employeesParis :=ds.Employee.query("city='Paris'")
// The method selectedEmployee returns an employee in the given entity selection
$employee :=EmpleadoSeleccionado ($employeesParis)
ALERT ("El índice del empleado seleccionado es " + String($empleado.indexOf()))
Echa un vistazo al ejemplo de la base de datos y sabrás todo sobre este tema.