Home Forum Nuclos Entwicklung Makros und Regeln Speichervorgang unterbrechen

Ansicht von 7 Beiträgen - 1 bis 7 (von insgesamt 7)
  • Autor
    Beiträge
  • #5177
    Fabian Diemel
    Teilnehmer

    Moin, moin.
    Es geht um eine Regeln, welche beim Speichern ausgeführt werden soll.
    In meiner Regel überprüfe ich die Gültigkeit von Daten. Falls diese nicht gültig sein sollten, würde ich gerne das Speichern in die Entität unterbinden. Mein erster Gedanke war das Werfen von Exception.
    Haut nicht hin.
    Hat vielleicht jemand eine Idee, wie ich das ganze umsetzen kann?
    Vielen dank im Voraus.

    #5179
    Thomas Pasch
    Teilnehmer

    Hallo FabianD,

    kannst du uns deine Regel posten?

    Mit besten Gruß

    aanno

    #5183
    Fabian Diemel
    Teilnehmer

    Klar.
    Meine Klasse „parst“ die Objekte von Nuclos in den den Java Datentyp Date.
    Danach prüfe ich einfach nur noch, ob das Anfangsdatum vor dem Enddatum liegt.
    Falls dies nicht der Fall ist, soll nicht gespeichert werden.
    Schaus dir mal an.

    PS:
    Nicht wundern. Mir fällt grade auf, dass da etwas von Nullpointerexcaption steht.
    War nur zum ausprobieren. Also daran liegt es nicht.

    #5185
    Ramin Goettlich
    Teilnehmer

    Hallo,

    in der 3.3Beta haben wir zur Zeit ein Transaktionsproblem, resultierend aus der Einführung von AspectJ in Nuclos. Die Tatsache, dass Ihr Fehler in der Regel die Transaktion NICHT zurückrollt hat damit zu tun.

    Natürlich sollte das Werfen eines Fehlers in einer Regel ein Rollback verursachen – und wird es auch bald wieder.

    Übrigens eignet sich die BusinessRuleException besser zum Werfen von Fehlern. Noch besser eignet sich die PointerException, der man auch eine Collection von Feldern übergeben kann, die Ursache des Fehlers sind. Der Client kann diese Fehler dann entsprechend hervorheben (siehe kleines „i“-Symbol neben der Dropdown zum Statuswechsel – klickt man drauf, erscheint eine Liste der betroffenen Felder, die man auch anklicken kann. Nuclos markiert dann das Feld in der Maske).

    Viele Grüsse,
    nuclosian

    #5196
    Thomas Pasch
    Teilnehmer

    Hallo FabianD,

    habe das mal mit einen ganz einfachen Beispiel ausprobiert. Meine Entität hat als einziges Feld das String Feld ’nam‘ und die Regel lautet:


    public void rule(RuleInterface server) throws NuclosBusinessRuleException {
    final MasterDataVO ent = server.getMasterData();
    String nam = ent.getField("nam", String.class);
    if (nam == null) {
    throw new NullPointerException();
    }
    nam = nam.trim();
    if ("".equals(nam)) {
    throw new NullPointerException();
    }
    if (!nam.startsWith("n")) {
    throw new NuclosBusinessRuleException("nam must start with 'n': " + nam);
    }
    }

    Sowohl wenn die NullPointerException als auch wenn die NuclosBusinessRuleException geworfen wird, landen die Daten bei mir nicht in der Datenbank.

    Allerdings habe ich die Sache bei uns oben im Entwicklungszweig getestet. Nicht ganz unmöglich ist es daher, dass es in der Beta (noch) nicht funktiert…

    Gruß

    Thomas

    PS:
    Die Art wie du das Datum parsed, halte ich für nicht optimal. Wenn das Feld in Nuclos vom ‚richtigen‘ Typ ist, kommt auch in der Regel eine java.util.Date an. Und die vergleichst du am besten mit Calendar before bzw. after…

    PPS:
    Ich denke nicht, das hier ein Transaktionsproblem vorliegt.

    #5198
    Ramin Goettlich
    Teilnehmer

    Die aktuelle Entwicklungsversion ist seit ein paar Minuten als neue Beta online downloadbar.

    #5211
    Fabian Diemel
    Teilnehmer

    Sehr gut.
    Vielen Dank Jungs.
    Mit der neuen Version scheint alles so zu funktionieren, wie es soll :woohoo:

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