Nuclos QueryProvider: create, where, and, orderBy, execute, get, getByState, getByProcess, exist, SearchExpression, NuclosLogicalDeleted. |
Sprache: Deutsch · English
Typisierte Datenabfragen in Regeln – create/where/and/orderBy/execute, getByState, getByProcess, Subqueries.
Auf dieser Seite |
Der QueryProvider lädt Daten aus Nuclos und stellt sie als Businessobjekt oder Liste in Regeln bereit. Statt SQL wird eine typisierte, abstrakte Query-Sprache verwendet.
Ohne |
Legt ein typisiertes Query-Objekt für ein Businessobjekt an.
public static <T extends BusinessObject> Query<T> create(Class<T> type); |
Führt die Query aus und liefert eine typisierte, nie null-Liste (leer bei keinem Treffer).
public static <T extends BusinessObject> List<T> execute(Query<T> query); |
Liest einen konkreten Eintrag über Typ und Id; null, wenn nichts gefunden.
Suchen Einträge nach Status bzw. nach zugewiesener Aktion (Prozess). Mindestens ein Status/eine Aktion ist erforderlich.
Auf Feldern stehen passende Vergleichsoperatoren bereit: eq, neq, isNull, notNull (alle Typen) sowie Gt, Gte, Lt, Lte (numerisch). where()/and()/orderBy() geben die Query zurück und lassen sich stapeln. Ein or() existiert nur auf SearchExpression-Ebene, wodurch sich Blöcke verschachteln lassen.
boolean sortAscending = true;
Query<Auftrag> queryAuftrag = QueryProvider.create(Auftrag.class);
queryAuftrag.where(Auftrag.Auftragsnr.notNull())
.and(Auftrag.Bestellwert.Gt(BigDecimal.ZERO))
.orderBy(Auftrag.Auftragsnr, sortAscending); |
List<Auftrag> results = QueryProvider.execute(queryAuftrag);
for (Auftrag a :results) {
BigDecimal bestellwert = a.getBestellwert();
} |
Mit exist(subQuery, …) lassen sich Subqueries über (Fremd-)Schlüssel einbinden; die Subquery selbst wird nicht separat ausgeführt.
// Alle Kunden, fuer die Zahlungsbedingungen hinterlegt wurden
Query<Kunde> qryKunden = QueryProvider.create(Kunde.class);
qryKunden.where(Kunde.Zahlungsbedingung.notNull());
// Nun brauchen wir alle Bestellungen dieser Kunden
Query<Bestellung> queryBestellungen = QueryProvider.create(Bestellung.class);
queryBestellungen.where(Bestellung.Bestellnr.notNull())
.exist(qryKunden, Bestellung.KundeId)
.orderBy(Bestellung.Bestellnr, true);
List<Bestellung> results = QueryProvider.execute(queryBestellungen); |