ORDA: Gründlicher Vergleich von zwei ausgewählten Entitäten

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:

blank

Schreiben wir nun optimierten Code mit Entity-Selektionen!

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert ist seit 2017 als Product Owner im 4D Produktteam tätig. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Marie-Sophie ist Absolventin der ESIGELEC Ingenieurschule und begann ihre Karriere als Ingenieurin bei IBM im Jahr 1995. Sie nahm an verschiedenen Projekten teil (Wartungs- oder Build-Projekte) und arbeitete als Cobol-Entwicklerin. Dann arbeitete sie als UML-Designerin und Java-Entwicklerin. In letzter Zeit bestand ihre Hauptaufgabe darin, funktionale Anforderungen zu analysieren und zu schreiben sowie Geschäfts- und Entwicklungsteams zu koordinieren.