Home › Forum › Nuclos Entwicklung › Makros und Regeln › Frage zum QueryProvider
- Dieses Thema hat 5 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 10 Jahre, 3 Monaten von
Matthias Reichart.
-
AutorBeiträge
-
10 Januar 2013 um 21:54 Uhr #6170
Matthias Haake
TeilnehmerHallo Nuclos-Team.
Ich versuche grade, einige Rules mit der neuen API umzusetzen und halte mich da immer nahe am Wiki.
http://wiki.nuclos.de/display/Konfiguration/QueryProvider
Poblem 1 Dort wird z. B. die Klasse „QueryProvider“ erwähnt. Die gibt es bei mit gar nicht (v3.9.4) – aber ich konnte eine Klasse „Query“ entdecken. Ist das Versionsunterschieden geschuldet?
Problem 2: Die Entität „Arbeitsvertrag“ hat eine API-Regel. Dort möchte ich den Zeitraum des aktuellen Vertrages mit den Zeiträumen aller anderen Verträge des Mitarbeiters prüfen (dürfen sich ja nicht überschneiden, d.h. zu jedem Zeitpunkt sollte nur ein Vertrag gelten).
Konkret möchte ich daher als erstes alle Arbeitsverträge laden, die zum selben Mitarbeiter gehören, wie der aktuelle Vertrag:
Queryquery1 = QueryProvider.create(Contract.class);
query1.where(Contract.Employee.EQUALS(currentContract.getEmployeeId()));
Hier scheitert es, dass das „ForeignKeyAttribute“ vom Typ String ist und ich Fremdschlüssel aber über die ID holen muss. Wie macht man das (alle Datensätze mit gleichem Fremdschlüssel laden)?
Vielen Dank für jeden Tipp.
Matthias11 Januar 2013 um 14:35 Uhr #6173Matthias Haake
TeilnehmerHab noch ein bisschen weiter probiert… der folgende Code sieht nicht mehr ganz so schön aus, wie im Wiki, lässt sich aber kompilieren:
Query query1 = QueryProvider.create(Contract.class);
query1.where(new SearchExpression(Contract.Employee, currentContract.getEmployeeId(), QueryOperation.EQUALS));
List result = QueryProvider.execute(query1);
Aber laut Logfile gibt es eine Exception:
2013-01-11 11:31:04,741 ERROR [org.nuclos.server.nbo.BusinessObjectServerServiceProvider] – org.nuclet.businessentity.Contract.(org.nuclos.common.dal.vo.EntityObjectVO)
java.lang.NoSuchMethodException: org.nuclet.businessentity.Contract.(org.nuclos.common.dal.vo.EntityObjectVO)Any ideas?
11 Januar 2013 um 14:47 Uhr #6174Matthias Haake
TeilnehmerAuch das hier geht nicht…
query1.where(Contract.Employee.eq(currentContract.Employee))
Und das hier erzeugt eine NullPointerException:
query1.where(new SearchExpression(Contract.Employee, currentContract.Employee, QueryOperation.EQUALS));
Bin dankbar für jedes Beispiel 🙂
11 Januar 2013 um 19:33 Uhr #6176Matthias Reichart
Teilnehmerzur Problem 1:
Das Wiki und die API beinhalten bereits die Dokumentationen zur Version 3.10.zu Problem 2:
Bei den Queries und der Verwendung von ForeignKeyAttributes handelt es sich tatsächlich um einen Fehler. Dieser wurde bereits eingestellt und von uns bearbeitet.
Hintergrund: Da ein String nicht als ForeignKey fungiert und auch nicht kann, funktionieren folgende Aufrufe nicht:
query1.where(Contract.Employee.eq(currentContract.Employee))
new SearchExpression(Contract.Employee, currentContract.getEmployeeId(), QueryOperation.EQUALS))
21 Januar 2013 um 14:31 Uhr #6229Matthias Haake
TeilnehmerHallo.
Ich habe mal die neueste Version installiert (3.10.0011 vom 15.01.13). Ist es hier schon möglich, Daten über den Fremdschlüssel zu laden?
Im Wiki http://wiki.nuclos.de/pages/viewpage.action?pageId=820011 finde ich bei den Beispielen nichts passendes. Kann mir bitte jemand auf die Sprünge helfen?
Vielen Dank und Grüße,
Matthias8 Februar 2013 um 17:06 Uhr #6355Matthias Reichart
TeilnehmerHallo,
der Fehler mit den Fremdentitäten wurde bereits behoben und sollte in der aktuellen Version nicht mehr vorhanden sein. Die ForeignKeys werden als Elemente vom Typ „Long“ bereitgestellt.
Viele Grüße,
Matthias Reichart -
AutorBeiträge