Ab 4D v17 kann der Inhalt einer mehrstufigen Sammlung einfach in verschiedenen Listenfeldern angezeigt werden. Das bedeutet, dass Sie mehrere Listenfelder verbinden können, um verschachtelte Details anzuzeigen … ohne eine einzige Zeile Code! Dies wird erreicht, indem Sie einfach ein Objekt oder eine Sammlung als Datenquelle für eine andere Listbox verwenden!
Mit dem neuen Listbox-Sammlungstyp wurden die Eigenschaften „Aktuelles Element“ und „Ausgewählte Elemente“ hinzugefügt. Beachten Sie, dass Sie mit der Eigenschaft „Aktuelles Element“ ein Objekt abrufen können, während die Eigenschaft „Ausgewähltes Element“ eine Sammlung zurückgibt.
Schauen wir uns nun ein konkretes Beispiel an und sehen wir uns an, wie wir die Ergebnisse eines Bluttests anzeigen können!
Was ist drin?
Auf der ersten Ebene finden wir den Namen des Patienten, das Datum der Untersuchung und den Namen des Arztes. Dann werden die Ergebnisse nach Kategorien geordnet. Für jede Kategorie gibt es eine Liste von Tests mit dem Ergebniswert, dem Minimum, dem Maximum und der Einheit.
Was die Datenstruktur betrifft, so haben wir ein Objekt mit einigen Attributen der ersten Ebene( d. h. Vorname, Nachname usw.) sowie eine Sammlung von Kategorieobjekten. Dann haben wir für jedes Kategorieobjekt eine Sammlung von Testobjekten. Zusammengefasst:
{ "lastname": "Beal", "firstname": "Estele", ..., "results": [{ "category": "Metabolic", "test": [ { "name": "Albumin", "value": ... }, { "name": ... }] }, { "category": "Lipoprotein", "test": [ { "name": "HDL", "value": ... }, { "name": ... }] }, {...}] }
Das unten stehende Schema beschreibt, wie die Ergebnisse in zwei Listenfeldern neben der Objekteingabe angezeigt werden. Und das alles … ohne eine einzige Zeile Code! Tatsächlich sind alle Eigenschaften in den Formularobjekten definiert, der einzige Teil, in dem etwas Kodierung erforderlich ist, ist beim Laden des Ergebnisses. Das war’s, Leute! ?
Wie Sie sehen, macht dieses Beispiel die Bluttestergebnisse leichter lesbar und verständlich, vor allem wenn die falschen Daten mit einem Farbspritzer hervorgehoben werden.
Zu diesem Zweck haben wir die folgende Decorate-Methode mit dem Meta-Ausdruck in der Eigenschaft des Listenfeldes verknüpft:
If (This.value>(This.max*2))
$0 :=Form.meta.doubleOutOfRange
Else
If ((This.value>This.max) | (This.value<This.min))
$0 :=Form.meta.outOfRange
Else
$0 :=Form.meta.perfectValue
End if
End if