Home › Forum › Nuclos Entwicklung › Makros und Regeln › Speicherfehler: Änderungen in Referenzfeldern
- Dieses Thema hat 3 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 12 Jahre, 5 Monaten von
Matthias Haake.
-
AutorBeiträge
-
20 Dezember 2010 um 15:54 Uhr #2882
Matthias Haake
TeilnehmerHallo Support,
die folgende Methode wirft einen Fehler vom Typ „ruleengine.error.exception.nucleusfatalruleexception“ (in einer Fristenregel):
server.setField("
", iObjectId, " ", iValueId, oValue); Alternativ versuchte ich diesen Weg – der Code wird zwar ohne Exception ausgeführt, jedoch wird die Änderung anscheinend nicht gespeichert. Der entsprechende Datensatz ist danach unverändert.
MasterDataVO item = server.getMasterData("
", iObjectId);
item.setField("", oValue);
item.setField("" + "Id", iValueId); Bei dem Feld handelt es sich um ein Referenzfeld auf eine andere Entität. Beide Entitäten besitzen KEIN Statusmodell (da sie in einem Subform verwendet werden sollen).
Habe es schon im IssueTracking gepostet. Schnelle Hilfe wäre super.
Vielen Dank und Grüße,
Matthias21 Dezember 2010 um 17:12 Uhr #2902Nick Röder
TeilnehmerHallo Mathias,
das Problem liegt darin, dass das Object nur im Objekt item geändert wird dann aber nicht wieder in die DB-gespeichert wird.
um dies zu erreichen muss das Objekt zum Speichern an Nuclos explizit übergeben werden. Das ist natürlich kein schöner Weg, wenn man aber ein Objekt sich über diesen Weg holt (und z.B. nicht über server.getDependants(„items“)) geht das noch nicht anders. Das Regelinterface hat derzeit aber eine der höchsten Prioritäten und wird bereits überarbeitet. Momentan bremsen wir ja unsere Community fast schon aus…
Btw. es ist nicht nötig explizit den Wert im Feld einer Referenz zu setzen, das passiert beims etzen der Id automatisch.
MasterDataVO item = server.getMasterData("", iObjectId);
item.setField("" + Id , iValueId);
try {
final org.nuclos.server.masterdata.ejb3.MasterDataFacadeLocal mdFacade = ServiceLocator.getInstance().getFacade(org.nuclos.server.masterdata.ejb3.MasterDataFacadeLocal.class);
mdFacade.modify(",item ,null);
}
catch(Exception e) {
throw new NuclosBusinessRuleException(e);
}21 Dezember 2010 um 17:18 Uhr #2904Matthias Haake
TeilnehmerHallo Elvis,
vielen Dank für den Tipp – ich probiere es gleich mal aus.
Ich empfehle dann eine Änderung im Wiki. Den Code habe ich der folgenden Seite entnommen:
http://wiki.nuclos.de/2.5/index.php/Regeln_Geschaeftsregeln
Unten im Kapitel „Verfügbare Methoden zum Auslesen und Schreiben von Werten und ID-Feldern“ stehen die Befehle unter dem Kommentar „// ID setzen bei Entität mit und ohne Statusmodell“.
Das eigentliche Problem ist ja, dass der Fehler nur bei Referenzfeldern auftritt. ValueFields werden mit dem obigen Code wunderbar aktualisiert…
Ich gebe Feedback, ob es geklappt hat.
Bis dahin viele Grüße,
Matthias21 Dezember 2010 um 17:28 Uhr #2905Matthias Haake
TeilnehmerHallo Elvis,
danke nochmals – jetzt werden die Änderungen gespeichert. Das Ticket lasse ich mal offen, da der folgende Code laut Doku ja eigentlich ebenfalls funktionieren sollte (und wesentlich lesbarer wäre):
server.setField("", iObjectId, "", iValueId, oValue);
Viele Grüße,
Matthias -
AutorBeiträge