Operaciones lógicas sobre selecciones de entidades

Traducido automáticamente de Deepl

¡La serie ORDA continúa! En esta entrada del blog veremos cómo utilizar los operadores lógicos en las selecciones de entidades.

Estas operaciones permiten obtener intersecciones, uniones o diferencias entre dos selecciones de entidades como se puede hacer con los conjuntos clásicos de 4D.

Ejemplo de operadores lógicos en selecciones de entidades

En 4D clásico, se utilizan conjuntos para realizar operaciones lógicas sobre varios resultados de consulta. Debe crear un conjunto después de cada consulta, realizar la operación lógica sobre los conjuntos y, finalmente, actualizar la selección actual de la tabla en cuestión con el conjunto resultante. ¡Es un poco pesado! Afortunadamente, con ORDA las cosas se vuelven mucho más ligeras. Cada consulta le da una selección de entidades a la que sepueden aplicar directamente los operadores lógicos.

ORDA provee los siguientes métodos para realizar operaciones lógicas en dos selecciones de entidades:

and(): obtiene la intersección entre dos selecciones de entidades (entidades que pertenecen a ambas)

or(): obtiene la unión entre dos selecciones de entidades (entidades que pertenecen a una o a la otra)

minus(): obtiene la diferencia entre dos selecciones de entidades (entidades que pertenecen a una y no a la otra)

Estos métodos también pueden ser aplicados a una selección de entidades y a una entidad individual.

Ejemplo

¡Un ejemplo vale más que mil palabras! Echemos un vistazo a los empleados y sus preferencias de comida.

CLÁSICO 4D:

//A named selection "meat" is created before
// ...
QUERY BY ATTRIBUTE([Empleado];[Empleado]food; "pescado";=;Verdadero)
CREATE SET ([Empleado]; "pescado")
USE NAMED SELECTION ("carne")
CREATE SET ([Empleado]; "carne")
UNION ("pescado"; "carne"; "resultado")
USE SET ("resultado")
CLEAR SET ("carne")
CLEAR SET ("pescado")
CLEAR SET ("resultado")

ORDA:

Aquí tenemos un método que recibe como parámetro una selección de entidades. Devolvemos la unión de la selección de entidades $eatingMeat y la selección de entidades $eatingFish.

C_OBJECT($eatingFish;$1;$eatingMeat;$result)

$eatingMeat :=$1
//Get employees eating fish
$eatingFish :=ds.Employee.query("comida.pescado=:1";Verdadero)
//Get the union of the 2 entity selections $eatingMeat and $eatingFish
$result:=$eatingMeat.or($eatingFish)
$0 :=$result

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.