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
$indicesds
Books. . ( ) := . . . ( ; . ) ( ; . ; . ) [ ]:="<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:
¡Ahora escribamos código optimizado con selecciones de entidades!