Home › Forum › Nuclos Entwicklung › Makros und Regeln › Neue API
- Dieses Thema hat 7 Antworten und 4 Teilnehmer, und wurde zuletzt aktualisiert vor 10 Jahre, 7 Monaten von
Frank Pavlic.
-
AutorBeiträge
-
25 Oktober 2012 um 16:20 Uhr #6023
Matthias Haake
TeilnehmerHallo Nuclos-Team.
Im Logfile sind seit dem Update ein paar „verdächtige“ Einträge:
[org.nuclos.common.dal.vo.AbstractDalVOWithFields] - Trying to read getField(attributeId) instead of getFieldId(attribute) : This is a sever error and will not work in future versions of Nuclos
Wie soll man sich als Entwickler verhalten? Woher bekommen wir nähere Informationen? Im Wiki steht (noch) nichts. In einigen Posts liest man immer schon die Worte „Neue API“…
Danke und viele Grüße,
Matthias26 Oktober 2012 um 16:10 Uhr #6024Thomas Pasch
TeilnehmerHintergrund: MasterDataVO ist ab Nuclos 3.8 nur noch ein Wrapper für EntityObjectVO.
Leider gibt es offensichtlich noch einige Stellen (vorallen in Regeln), die getField( + „Id“) benutzten um die (foreign) ID (type Integer) zu erhalten. Richtig wäre jedoch (auch mit MasterDataVO) getFieldId().
Im EntityObjectVO wird hier schärfer getrennt. Damit der erste Fall überhaupt noch etwa ‚vernünftiges‘ zurück liefert, gibt es im MasterDataVO einen entsprechenden Hack.
Da wir MasterDataVO durch EntityObjectVO ersetzen werden, müssen diese Stellen beseitigt werden. Deshalb diese deutliche Sprache im Log. Das beste Vorgehen wäre also: Breakpoint auf die Log Message Stelle, und dann die Schuldigen finden und eliminieren.
An dieser Stelle kommt die neue Regel API ins Spiel: Diese wird die jetzigen (‚alten‘) Regeln komplett ersetzten (z.B. das RuleInterface, MasterDataVO, usw).
Wenn das Problem also aus einer Regel stammt, bieten sich 2 Möglichkeiten an: Wenn man in späteren Nuclos Versionen die ‚alte‘ Regel API benutzen möchte, dann muss man diese Stellen eliminieren. Wenn man dagegen vorhat, alles auf die neue Regel API umzustellen, dann kann man die Meldung z.Z. einfach ignorieren.
26 Oktober 2012 um 16:45 Uhr #6025Frank Pavlic
TeilnehmerHeisst das, dass die neue Regel-API mit 3.8 Einzug erhalten hat? Wie und wo ist diese zu finden? Falls es noch keine Dokumentation gibt, wie heisst die entsprechende Klasse?
Im Voraus besten Dank für die Infos.
Gruß
Frank
26 Oktober 2012 um 16:47 Uhr #6026Ramin Goettlich
Teilnehmer-> 3.9
26 Oktober 2012 um 18:30 Uhr #6027Matthias Haake
TeilnehmerInterpretiere ich das richtig?
- Update nach 3.9.x
- Im Quellcode alle Vorkommen von MasterDataVO mit EntityObjectVO austauschen
- Ggf. Methoden-Calls anpassen (sollte ja dank offenem Quellcode der EntityObjectVO, IEntityObjectVO usw. machbar sein)
Oder was ist das empfohlene Vorgehen, wenn ich vorhabe alles auf die neue API umzuschreiben?
Hier wäre dann ein Update im Wiki sehr willkommen. So einfache Beispiel aus dem „Alltag“ für’s Laden, Speichern, Sortieren und Löschen von Datensätzen, Status ändern, Arbeitsschritt anstoßen usw.
26 Oktober 2012 um 19:22 Uhr #6028Ramin Goettlich
TeilnehmerHallo Matthias,
nein.
Ein wesentlicher Aspekt der neuen Nuclos API wird sein, dass der Zugriff auf interne Nuclos-Strukturen verwehrt sein wird. Der Zugriff darf nur noch über die Nuclos API erfolgen, denn nur für diese können wir die Aufwärtskompatibilität garantieren. In internen Nuclos-Strukturen wird es immer wieder Änderungen geben, die existierende Regeln stören (siehe Update auf 3.8).
Also keine MasterDataVOs, keine EntityObjectVOs, etc.
Stattdessen wird es viel komfortablere Businessobjekte geben, die durch den Entitätenwizard erzeugt werden. Ein Beispiel für ein zukünftiges Iterieren durch eine Menge von Businessobjekten:
for (BusinessObject Auftrag a : QueryProvider.create(Auftrag.class).where(Auftrag.Beispielfeld1.eq(true)) {
a.setBeispielfeld2("Wert");
}
Es wird eine Wiki-Dokumentation geben und JavaDocs für die API selbst.
Achja: Die aktuelle 3.9-Beta enthält das alles noch nicht, also bitte noch gedulden.Alte Regeln werden bis auf Weiteres unterstützt – aber sind eben nicht garantiert aufwärtskompatibel.
Grüsse,
nuclosian26 Oktober 2012 um 19:34 Uhr #6029Matthias Haake
TeilnehmerDas sieht ja ein bisschen nach Lambda-Ausdrücken (ähnlich wie in LINQ) aus 🙂 Ich bin gespannt.
Danke für die Informationen und Grüße,
Matthias27 Oktober 2012 um 13:40 Uhr #6030Frank Pavlic
TeilnehmerDanke für die Aufklärung.
Gruß
Frank
-
AutorBeiträge