Hinzufügen von Werten zu Ihren generischen ORDA-Abfragen

Automatisch übersetzt von Deepl

Sie haben sicher schon bemerkt, dass ORDA-Abfragen nicht nur leicht und lesbar sind, sondern auch die Navigation durch das gesamte Datenmodell mit objektorientierten Konzepten erleichtern! In diesem Blog-Beitrag haben wir Ihnen gezeigt, wie Sie leistungsfähige und leicht zu pflegende Abfragen schreiben können. Eine der empfohlenen Methoden war, die Abfrage und die Werte separat über Platzhalter bereitzustellen. 4D v17 R5 geht mit Platzhaltern noch einen Schritt weiter, indem es Ihnen erlaubt, generische ORDA-Abfragen zu schreiben: Begrüßen Sie die benannten Platzhalter für Werte!

HDI: Beispiel für benannte Platzhalter für Werte in ORDA-Abfragen

Diese neuen Platzhalter werden als Objektparameter in den Abfrageeinstellungen bereitgestellt. Da ein Objekt eine Schlüssel/Wert-Map ist, ist es sehr einfach, sie in Ihren Abfragen zu verwenden.

Ein Beispiel sagt mehr als tausend Worte

Hier ist eine Abfrage, um einen Kunden namens Charlie mit Loyal Client als Kommentar zu erhalten. Kommt Ihnen das bekannt vor? Wenn nicht, sollten Sie sich diesen Beitrag ansehen, um Ihr Gedächtnis aufzufrischen.

C_OBJECT($clients)
$clients :=ds.Clients.query("Name = :1 und Kommentar = :2"; "Charlie@"; "Loyaler Kunde")

Die Abfrage kann auch wie folgt geschrieben werden:

C_OBJECT($settings;$clients)
$settings :=New object
$settings .parameters:=New object("givenName"; "Charlie@"; "givenComment"; "Loyaler Kunde")
$clients :=ds.Clients.query("name = :givenName und comment = :givenComment";$settings)

Verwenden Sie einfach den Platzhalter mit dem Namen vorangestellten „:“ .

Ihr Code ist leicht lesbar und wartbar, aber ein noch größerer Vorteil ist die Möglichkeit, generische Abfragen zu schreiben, deren Wertparameter aus verschiedenen Quellen stammen können (einer Benutzeroberfläche oder einer Anfrage).

Wie wäre es mit einem Muster wie diesem?

Sie können Ihren Benutzern auch eine Abfrageoberfläche zur Verfügung stellen, in der sie die Suchkriterien und die anzuwendenden Werte auswählen können.

Der unten stehende Code ist für eine Schnittstelle, die es einem Vertriebsmitarbeiter ermöglicht, eine Liste seiner Kunden zu durchsuchen. Sie gibt gefilterte Inhalte entsprechend der ID des Verkäufers zurück.

C_OBJECT$settingsparameters($formData;$settings;$clients)
C_TEXT ($queryString)

$formData :=New object
DIALOG ("QueryEditor";$formData)
CLOSE WINDOW

if (OK=1)
//The logged sales person can only browse their clients
$queryString :="salesPersonUserId = :givenUserId"
//The $formData object comes from the user's interface with search criteria filled

//It contains the sales person's user id and some additional search criterias (name and city)

$settings :=New object

$settings .parameters:=$formData

If ( xml-ph-0034@deepl.ingivenName#Null)
$queryString :=$queryString+" and name = :givenName"
End if

If ($settings.parameters.givenCity#Null)
$queryString :=$queryString+" and city.name = :givenCity"
End if

$clients :=ds.Clients.query($queryString;$settings)
end if

In den obigen Beispielen wird eine dataClass abgefragt, aber wenn Sie die Dokumentation lesen, werden Sie sehen, dass es auch auf Collections anwendbar ist!

Wie Sie sehen können, ist die dynamische Erstellung von Abfragen ein Kinderspiel. Laden Sie den HDI herunter und führen Sie ihn aus, um mehr zu erfahren!

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.