ORDA: Compara a fondo dos selecciones de entidades

Traducido automáticamente de Deepl

Dado que ORDA permite trabajar con varias selecciones de entidades simultáneamente, estamos seguros de que usted aprovecha esto pasando selecciones de entidades como parámetro a los métodos del proyecto o a las funciones de las clases del modelo de datos de ORDA.

Para trabajar eficientemente con la programación orientada a objetos utilizando la menor cantidad de líneas de código posible, necesita funciones robustas y optimizadas. Por eso, con 4D v19 R3, estamos enviando una nueva función disponible en el objeto entitySelection: la función selected() función.

Gracias a ello, podrás inspeccionar y comparar dos selecciones de entidades. Veamos los detalles

la nueva función selected()

Dadas dos selecciones de entidades entitySel1 y entitySel2, esta función devuelve los índices de las entidades de entitySel2 dentro de entitySel1.

¿Lo entiendes? Aquí tienes un ejemplo:

var $invoices; $selection: cs.InvoicesSelection
var $result : Object

$invoices :=ds.Invoices.all()
$selection :=ds.Invoices.query("pago = :1"; "Efectivo")
$result :=$invoices.selected($selection)
// $result = {ranges:[{start:1,end:1},{start:9,end:12},{start:18,end:18},{start:21,end:25}]}

La función selected() devuelve un objeto con una propiedad ranges que es una colección de objetos.

Estos objetos designan un rango de entidades (inicio # fin) o una sola entidad (inicio = fin).

Las entidades de Invoices que tienen pago = «Efectivo» entre todas las facturas son las que tienen índices

  • 1
  • 9 a 12
  • 18
  • 21 a 25

un caso de uso concreto

Imagina una biblioteca con libros sobre diferentes temas (Historia, Arte, Ciencia, …). Esta es la tabla de libros:

En una página HTML, queremos destacar los libros sobre un tema determinado.

Para ello, tenemos un método de proyecto highlight llamado como 4DACTION con un parámetro de tema.

highlight código del método de proyecto:

var $index : Integer
var $subject ; $text: Text
var $onSubject : cs.BooksSelection
var $indices; : $range Objeto
: : ( ; 0) ( ; 0 ( ; ) := ( ; "sujeto") var $titles Collection
var $i Integer

ARRAY TEXT$anames
ARRAY TEXT$avalues

WEB GET VARIABLES$anames $avalues

//Get the subject
$indexFind in array$anames
$subject := { } $avalues$index

//Search books about the given $subject
$onSubject:= .. ("asunto = :1"; ) dsBooksquery $subject

//Get ranges of books about the subject
$indices
:= .dsBooks. . ( ) := . . . ( ; . ) ( ; . ; . ) [ ]:="<b>"+ [ ]+"</b>" := . ("<br/>") all()selected$onSubject

//Build a collection with all the titles
$titlesdsBooksall()title

// Loop on the $indices.ranges collection of objects

// $indices.ranges is [{start:0,end:0},{start:2,end:4},{start:7,end:9},{start:11,end:11}]
For each$range $indicesranges
For$i $rangestart $rangeend
$titles$i$titles$i
End for
End for each
// Build a text with carriage returns
$text$titlesjoin

WEB SEND TEXT ($text)

Ahora vamos a ejecutar 4DACTION/highlight?subject=Historia en un navegador.

Aquí está el resultado:

blank

¡Ahora escribamos código optimizado con selecciones de entidades!

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.