Home Forum Nuclos Entwicklung Makros und Regeln Speicherfehler: Änderungen in Referenzfeldern

Ansicht von 4 Beiträgen - 1 bis 4 (von insgesamt 4)
  • Autor
    Beiträge
  • #2882
    Matthias Haake
    Teilnehmer

    Hallo 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,
    Matthias

    #2902
    Nick Röder
    Teilnehmer

    Hallo 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);
    }

    #2904
    Matthias Haake
    Teilnehmer

    Hallo 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,
    Matthias

    #2905
    Matthias Haake
    Teilnehmer

    Hallo 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

Ansicht von 4 Beiträgen - 1 bis 4 (von insgesamt 4)