Da ORDA es Ihnen erlaubt, mit mehreren Entitätsselektionen gleichzeitig zu arbeiten, sind wir sicher, dass Sie dies ausnutzen, indem Sie Entitätsselektionen als Parameter an Projektmethoden oder an Funktionen von ORDA-Datenmodellklassen übergeben.
Um mit objektorientierter Programmierung effizient und mit möglichst wenigen Zeilen Code zu arbeiten, brauchen Sie robuste und optimierte Funktionen. Deshalb liefern wir mit 4D v19 R3 eine neue Funktion aus, die auf dem entitySelection Objekt verfügbar ist: die selected() Funktion.
Dank dieser Funktion können Sie zwei Entitätsselektionen untersuchen und vergleichen. Schauen wir uns die Details an!
die neue selected() Funktion
Gegeben zwei Entitätsselektionen entitySel1 und entitySel2, gibt diese Funktion die Indizes der Entitäten von entitySel2 innerhalb von entitySel1 zurück.
Haben Sie es verstanden? Hier ist ein Beispiel:
var $invoices; $selection: cs.InvoicesSelection
var $result : Object
$invoices :=ds.Invoices.all()
$selection :=ds.Invoices.query("payment = :1"; "Cash")
$result :=$invoices.selected($selection)
// $result = {ranges:[{start:1,end:1},{start:9,end:12},{start:18,end:18},{start:21,end:25}]}
Die Funktion selected() Funktion gibt ein Objekt mit einer ranges Eigenschaft zurück, die eine Sammlung von Objekten ist.
Diese Objekte bezeichnen einen Bereich von Entitäten (Anfang # Ende) oder eine einzelne Entität (Anfang = Ende).
Die Invoices Entitäten mit Zahlung = „Cash“ unter allen Rechnungen sind diejenigen mit den Indizes:
- 1
- 9 bis 12
- 18
- 21 bis 25
ein konkreter Anwendungsfall
Stellen Sie sich eine Bibliothek mit Büchern zu verschiedenen Themen vor (Geschichte, Kunst, Wissenschaft, …). Hier ist die Tabelle Bücher:
Auf einer HTML-Seite wollen wir die Bücher zu einem bestimmten Thema hervorheben.
Zu diesem Zweck haben wir eine highlight Projektmethode, die als 4DACTION mit einem Parameter für das Thema aufgerufen wird.
highlight Projektmethode Code:
var $index : Integer
var $subject ; $text: Text
var $onSubject : cs.BooksSelection
var $indices; : $range Objekt
: : ( ; 0) ( ; 0 ( ; ) := ( ; "subject") 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:= .. ("Betreff = :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)
Lassen Sie uns nun 4DACTION/highlight?subject=History in einem Browser ausführen .
Hier ist das Ergebnis:
Schreiben wir nun optimierten Code mit Entity-Selektionen!