In einem früheren Blog-Beitrag haben Sie gelernt, wie man anspruchsvolle und komplexe Suchkriterien durch die Anwendung von Formeln in einer ORDA-Abfrage erstellen kann. Um Ihnen noch umfassendere und leistungsfähigere Entwicklungswerkzeuge zur Verfügung zu stellen, ist eine neue ORDA-Methode verfügbar: orderByFormula(). Mit Hilfe von Formeln können Sie nun eine Entitätsauswahl nach komplexen Kriterien in einer Projektmethode oder einem 4D-Ausdruck ordnen.
HDI: Beispiele für die Bestellung einer Entitätsauswahl mit einer Formel
Das Ordnungskriterium wird ausgewertet, wenn die Formel als String oder als Formula Objekt an die orderByFormula() Methode übergeben wird.
Ordnung mit einer Formel als String
Hier haben wir eine dataClass, Companies, und wir ordnen alle Unternehmen basierend auf ihren Gewinnen (Gewinne = Umsatz – Kosten).
Beachten Sie, dass der Zugriff auf die Entität über den This Befehl.
C_OBJECT($companies;$orderedCompanies)
$companies :=ds.Companies.all()
$orderedCompanies :=$companies.orderByFormula ("Diese.Einnahmen - Diese.Kosten")
Bestellung mit einem Formelobjekt
Hier ordnen wir die Unternehmen nach denselben Kriterien, aber statt eines Strings verwenden wir ein Formula Objekt, und wir sortieren in absteigender Reihenfolge.
C_OBJECT($companies;$orderedCompanies;$formula)
$formula := Formula(This.revenue - This.costs)
$companies :=ds.Companies.all()
$orderedCompanies:=$companies.orderByFormula ($formula;dk descending)
Beachten Sie, dass die Verwendung eines Formula Objekts einige Vorteile (z. B. automatische Vervollständigung, Farben im Code-Editor usw.) gegenüber der Verwendung einer Formel als Zeichenfolge bietet.
Die Methode orderByFormula() Methode hat noch mehr Optionen. Weitere Informationen finden Sie in der Dokumentation und im HDI, das Sie oben herunterladen können.
über das Anordnen einer Entitätsauswahl
Sie können nun eine order by -Anweisung innerhalb der query() -Methode selbst einfügen. Dies ist ein großer Vorteil, wenn Sie im Client/Server-Modus arbeiten, da Sie die Abfrage und die Bestellaktion in derselben Anfrage kombinieren können, was die Anzahl der an den Server gesendeten Anfragen und Ihren Netzwerkverkehr reduziert.
C_OBJECT($companies)
$companies :=ds.Companies.query("umsatz> :1 order by kosten desc";5000)