Manejar las entidades en una selección de entidades

Traducido automáticamente de Deepl

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.

Avatar
• Propietario de producto - Marie-Sophie Landrieu-Yvert ingresó al equipo de 4D Product como Propietario de producto en 2017. Como tal, está a cargo de escribir las historias de los usuarios y luego traducirlas en especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Marie-Sophie se graduó en la Escuela de Ingeniería de ESIGELEC y comenzó su carrera como ingeniera en IBM en 1995. Participó en varios proyectos (de mantenimiento y creación) y trabajó como desarrolladora de Cobol. Luego trabajó como diseñadora de UML y desarrolladora de Java. Sus principales funciones fueron analizar y redactar requisitos funcionales, coordinar los equipos de negocio y de desarrollo.