Home Forum Nuclos Entwicklung Makros und Regeln setFieldValue zeigt sich wählerisch

Ansicht von 5 Beiträgen - 1 bis 5 (von insgesamt 5)
  • Autor
    Beiträge
  • #3860
    Jan Giebels
    Teilnehmer

    Hallo,
    wir haben eine Bibliotheksregel, welche Datenmanipulationen durchführt.
    Eine Methode wird sowohl in einer Fristen, als auch in einer Geschäftsregel verwendet.

    Beim Setzen von werten zeigt sich ein „merkwürdiges“ Verhalten.

    Wird die Methode in einer Fristenregel ausgeführt, wird mit:

    server.setFieldValue(„Shopartikel“, iId, „totalek“, dTotalEK);

    der Wert korrekt gesetzt.

    Wird dieselbe Methode in einer Geschäftsregel verwendet und via Layout Button getriggert, wird der Wert nicht gesetzt. Erst wenn wir:

    server.setFieldValue(„Shopartikel“, „totalek“, dTotalEK);

    verwenden, wird der Wert über die Geschäftsregel gesetzt.

    Daher haben wir nun in der Bibliotheksregel :

    server.setFieldValue(„Shopartikel“, iId, „totalek“, dTotalEK);
    server.setFieldValue(„Shopartikel“, „totalek“, dTotalEK);

    so etwas stehen, und die Methode funktioniert sowohl bei Verwendung via Fristen, als auch Geschäftsregel. Sieht komisch, redundant und hässlich aus. Ist das ein Bug, gewolltes Verhalten oder machen wir etwas falsch?

    Danke und Gruß

    Jan

    #3881
    Thomas Schiffmann
    Teilnehmer

    Hallo Jan,

    ja, das Verhalten dieser Überladungen ist unterschiedlich.
    Wenn Sie die Objekt-Id angeben, wird das Attribut direkt in der Datenbank geändert (und dann natürlich wieder überschrieben). Wenn Sie die Id nicht angegeben, wird das Attribut des aktuellen Datensatzes geändert. Letzteres funktioniert dabei nur in Geschäftsregeln, da nur hier ein gültiges Objekt im Kontext vorhanden ist.

    Wir werden die Überladung mit Id in der nächsten Version anpassen, sodass der aktuelle Datensatz geändert wird, wenn es sich auch um diesen handelt. Dieses Verhalten können Sie solange als Workaround wie folgt implementieren:

    if (iId.equals(server.getObjectId())) {
    server.setFieldValue(„Shopartikel“, „totalek“, dTotalEK);
    }
    else {
    server.setFieldValue(„Shopartikel“, iId, „totalek“, dTotalEK);
    }

    Viele Grüße
    tsc

    #3929
    Jan Giebels
    Teilnehmer

    Der Polymorphismus und seine Tücken.

    Danke klappt prima als workaround.

    #3930
    Jan Giebels
    Teilnehmer

    Leider doch etwas zu früh gefreut. Die Methode getObjectId() wirft leider (soweit ich es nachvollziehen konnte) einen Fehler, wenn sie in einer Fristenregel aufgerufen wird:


    org.nuclos.server.ruleengine.NuclosFatalRuleException: rule.interface.error.1

    Auch die „deprecated“ Method getGenericObjectId() hat das gleiche Problem.

    #3964
    Thomas Schiffmann
    Teilnehmer

    Hallo Jan,

    mit Version 3.0.11 wird die Methode getObjectId() NULL zurückgeben, wenn sie in einer Fristenregel aufgerufen wird.

    Viele Grüße
    tsc

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