Wir sind uns alle einig, dass ORDA ein großartiges Feature von 4D V17 ist. Eine Art Revolution in der Art zu denken und zu programmieren. 4D Datenbanken werden nie wieder so gesehen werden wie bisher.
Mit ORDA können Sie fortschrittliche Anwendungen in kürzerer Zeit und mit besser lesbarem und sauberem Code entwickeln. Um Ihnen die Leistungsfähigkeit von ORDA zu zeigen, haben wir eine Reihe von Tipps für Sie vorbereitet, die in drei Episoden unterteilt sind. In dieser ersten Folge zeigen wir Ihnen, wie Links jetzt eher als Entitäten und Entitätssammlungen betrachtet werden sollten, und wir zeigen Ihnen, wie Listboxen jetzt auf Entitätsselektionen statt auf Selektionen oder Arrays basieren können.
Genealogie herunterladen – Folge eins
Rekursive Beziehungen verwenden
Um die Leistungsfähigkeit von 4D und ORDA zu demonstrieren, werden wir eine stark rekursive Datenbank mit einer einzigen Tabelle namens PEOPLE verwenden.
Diese Tabelle enthält fünf Hauptfelder: Nachname, Vorname, Geburtstag, Geschlecht und ID (die natürlich eindeutig ist).
Dann kommen drei weitere Felder: VaterID, MutterID und PartnerID, die jede Person mit drei anderen Personen verbinden, wenn sie existieren (Partner) oder wenn sie bekannt sind (Mutter und Vater).
Beziehungsdefinition
Konzentrieren wir uns nun auf die Definition der Beziehung. In beiden Richtungen (1 zu N und N zu 1) können Beziehungen benannt werden. Mit ORDA werden diese Namen sehr wichtig und nützlich. In der Many-to-One-Richtung ist der Name nicht nur eine Zeichenkette, sondern eine Entität der Tabelle PEOPLE, genau wie die Entität PEOPLE, aus der die Beziehung stammt. In der Richtung eins zu viele ist es sogar noch mehr, der Name stellt eine Entitätsauswahl dar.
Ohne zu viel vorwegzunehmen, können Sie sich denken, dass Sie mit der Objektnotation sowohl PEOPLE.Father als auch PEOPLE.ChildrenAsFather verwenden können, um entweder eine einzelne Person (den Vater) oder eine Gruppe von Personen (die Kinder) zu erreichen.
Eine neue Art von Listbox
Bisher waren die Inhalte von Listboxen (die Datenquelle) entweder Arrays oder Auswahlen. Von nun an kann der Inhalt auch aus einer Sammlung oder einer Entitätsauswahl stammen. Schauen wir uns also an, wie eine Entity-Auswahl in einer Listbox verwendet werden kann.
Zunächst müssen Sie die Entity-Auswahl mit der neuen Funktion ds erstellen. In diesem Beispiel erstellen wir eine einfache Entity Selection, die alle PEOPLE enthält, geordnet nach Geburtstag, Nachname und Vorname. Dies kann in einer einzigen Zeile geschehen, wie unten gezeigt. Das ist alles, was Sie im Moment über ds wissen müssen!
people:= ds.PEOPLE.all().orderBy("Geburtstag aufsteigend, Nachname aufsteigend, Vorname aufsteigend")
Sobald Sie die Entitätsauswahl people erhalten haben, setzen Sie sie einfach als Eigenschaft der Listbox und Sie sind – fast – fertig!
„THIS“ ist fantastisch
Wie bei normalen Listenfeldern muss der Inhalt jeder Spalte definiert werden. In unserem Fall, solange wir eine Entity-Auswahl verwenden, wird der Inhalt jeder Spalte als Ausdruck definiert. Zu diesem Zweck verwenden wir ein neues Schlüsselwort („This„), das sich auf das aktuelle Element der Entity-Auswahl bezieht.
Um people Namen und Geburtstage anzuzeigen, kann der Ausdruck so einfach sein wie:
Dies.Lastname
Dies.Firstname
Dies.Lastname + " " +Dies.Firstname
Dies.Birthday
Jetzt kommt der Clou: Wenn Sie den Nachnamen des Vaters, den Geburtstag der Mutter oder den Vornamen des Partners anzeigen möchten, verwenden Sie einfach die Entitätsnamen, die Sie in den Beziehungsdefinitionen angegeben haben (Vater, Mutter, Partner usw.) und schreiben Sie:
Dies.Father.Lastname
Dies.Mother.Birthday
Dies.Parter.Firstname
Natürlich können Sie noch weiter gehen, wenn Sie die Namen der vier Großeltern des Partners der aktuellen people wissen wollen, indem Sie schreiben:
Dies.Partner.Father.Father.Lastname
Dies.Partner.Father.Mother.Lastname
Dies.Partner.Mother.Father.Lastname
Dies.Partner.Mother.Mother.Lastname
Ein letzter Schritt (für heute!): Ich möchte auch die Anzahl der Kinder und Geschwister dieser Person anzeigen. Kann ich das tun?
Sicher, das ist ganz einfach. Für die Kinder verwenden Sie einfach die in der Beziehungsdefinition definierte Entitätsauswahl ChildrenAsFather. Wie bei jeder Entitätsauswahl gibt es auch hier eine Längeneigenschaft. Definieren Sie den Ausdruck einfach wie folgt:
This.ChildrenAsFather.length + This.ChildrenAsMother.length // einer von ihnen wird gleich Null sein, ChildrenAsFather.length für Frauen und andersherum.
Für die Geschwister müssen Sie bei der Mutter (oder dem Vater) „hochgehen“ und bei den Kindern „runtergehen“. Der Ausdruck würde also lauten:
Dies
. Mother.
ChildrenAsMother
.length - 1 // minus 1 to remove the current people from the number of his/her siblings :-)
Und hier ist das Ergebnis… ohne eine einzige Zeile Code!
Fortsetzung folgt, bleiben Sie dran!