Platzhalter für Attributpfade in ORDA-Abfragen

Automatisch übersetzt von Deepl

Die ORDA-Funktionen kommen mit 4D v17 R5 weiter! In einem früheren Blogbeitrag haben wir Ihnen gezeigt, wie Sie generische Abfragen mit benannten Platzhaltern für Werte erstellen können. In diesem Beitrag geht es um die Verwendung von Platzhaltern für Attributpfade (Feldnamen in Tabellen).

HDI: Beispiel für Platzhalter für Attributpfade in ORDA-Abfragen

Es gibt zwei Arten von Platzhaltern:

Indizierte Platzhalter

Schauen wir uns ein Beispiel mit indizierten Platzhaltern für Attributpfade an. Wir wollen Kunden finden, deren Namen mit „Bravo“ beginnen und im Kommentarfeld „Neuer Kunde“ stehen haben:

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

Die Platzhalter werden als :paramIndex(z. B. :1, :2, … mit einer Schrittweite von 1) in den Query-String eingefügt. Die entsprechenden Werte werden durch die Sequenz der Value-Parameter bereitgestellt.

benannte Platzhalter

Sie können auch benannte Platzhalter verwenden. Sie verwenden das gleiche Konzept wie benannte Platzhalter für Werte. Parameter werden als :paramName eingefügt, und ihre Werte werden in der Abfragezeichenfolge angegeben:

C_OBJECT($clients;$settings)
$settings :=New object
$settings .attributes:=New object("pathOfName"; "name"; "pathOfComment"; "comment")
$clients :=ds.Clients.query(":pathOfName = 'Bravo@' und :pathOfComment = 'Neuer Kunde'";$settings)

Warum Platzhalter verwenden?

Schauen wir uns das licencesInfo Objektfeld. Es gibt die Anzahl der Lizenzen in der Form licenceName:number an.

{"licencesInfo":
{"4DDevPro":10, //This client has 10 4DDevPro licences
"4DServerV17_2":18,
"4DWebappserverV17_2":23}
}

Um die Anzahl der „4DDevPro“-Lizenzen zu ermitteln, können Sie diese Abfrage schreiben:

C_OBJECT($clients)
$clients :=ds.Clients.query("licencesInfo.4DDevPro >=0")

Aber jetzt schauen Sie sich dieses licencesInfo Objektfeld an. Sie sehen, dass die Verwendung von Platzhaltern für Attributpfade besonders nützlich sein kann, wenn ein Objekt abgefragt wird, dessen Eigenschaftsnamen nicht mit der Punktnotation konform sind:

{"licencesInfo":
{"4D Dev. Pro":10, //This client has 10 4D Dev. Pro licences
"4D Server V17.2":18,
"4D Web app/server V17.2":23}
}

In diesem speziellen Fall löst die Angabe der Parameter als Sammlung von Strings das Problem, da sie von der Abfrage als Attributpfad interpretiert werden.

C_OBJECT($clients)
$clients :=ds.Clients.query(":1 >=0";New collection("licensesInfo"; "4D Dev. Pro"))

Das ist nicht der einzige Vorteil der Verwendung von Platzhaltern. Es gibt auch einen erhöhten Sicherheitsaspekt, da die Verwendung von Platzhaltern das Einfügen von bösartigem Code verhindert. Sie müssen sich auch keine Gedanken mehr über Formatierungs- oder Zeichenprobleme machen. Die Liste geht weiter …

In den obigen Beispielen wird eine dataClass abgefragt, aber wenn Sie in der Dokumentation nachsehen, werden Sie sehen, dass es auch auf Sammlungen anwendbar ist. Sie werden auch weitere Beispiele entdecken, die zeigen, warum die Verwendung von Platzhaltern eine gute Entscheidung ist!

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.