Puisque ORDA vous permet de travailler avec plusieurs sélections d’entités simultanément, nous sommes sûrs que vous en profitez en passant les sélections d’entités comme paramètre aux méthodes du projet ou aux fonctions des classes du modèle de données ORDA.
Pour travailler efficacement avec la programmation orientée objet en utilisant le moins de lignes de code possible, vous avez besoin de fonctions robustes et optimisées. C’est pourquoi avec 4D v19 R3, nous livrons une nouvelle fonction disponible sur l’objet entitySelection : la fonction selected() fonction.
Grâce à cela, vous serez en mesure d’inspecter et de comparer deux sélections d’entités. Voyons les détails !
La nouvelle fonction selected()
Étant donné deux sélections d’entités entitySel1 et entitySel2, cette fonction retourne les indices des entités de entitySel2 dans entitySel1.
Vous avez compris ? Voici un exemple :
var $invoices; $selection: cs.InvoicesSelection
var $result : Object
$invoices :=ds.Invoices.all()
$selection :=ds.Invoices.query("paiement = :1" ; "Cash")
$result :=$invoices.selected($selection)
// $result = {ranges:[{start:1,end:1},{start:9,end:12},{start:18,end:18},{start:21,end:25}]}
La fonction selected() renvoie un objet avec une propriété ranges qui est une collection d’objets.
Ces objets désignent une plage d’entités (début # fin) ou une seule entité (début = fin).
Les entités Invoices ayant le paiement = « Cash » parmi toutes les factures sont celles avec les indices :
- 1
- 9 à 12
- 18
- 21 à 25
un cas d’utilisation concret
Imaginez une bibliothèque avec des livres sur différents sujets (Histoire, Art, Science, …). Voici la table des livres :
Sur une page HTML, nous voulons mettre en évidence les livres sur un sujet donné.
Pour cela, nous avons une méthode de projet highlight appelée comme une 4DACTION avec un paramètre sujet.
highlight code de la méthode projet :
var $index : Integer
.
var $subject ; $text: Text
var $onSubject : csBooksSelection
var $indices; : $range Objet
: : ( ; 0) ( ; 0 ( ; ) := ( ; "sujet") 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:= .. ("subject = :1" ; ) dsBooksquery $subject
//Get ranges of books about the subject
$indices:= .. . ( ) := . . . ( ; . ) ( ; . ; . ) [ ]:="<b>"+ [ ]+"</b>" := . ("<br/>") dsBooksall()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)
Exécutons maintenant 4DACTION/highlight?subject=History dans un navigateur.
Voici le résultat :
Écrivons maintenant du code optimisé avec des sélections d’entités!