Home › Forum › Nuclos Entwicklung › Makros und Regeln › Speichervorgang unterbrechen
- Dieses Thema hat 6 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 11 Jahre, 2 Monaten von
Fabian Diemel.
-
AutorBeiträge
-
9 März 2012 um 16:18 Uhr #5177
Fabian Diemel
TeilnehmerMoin, 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.9 März 2012 um 16:35 Uhr #5179Thomas Pasch
TeilnehmerHallo FabianD,
kannst du uns deine Regel posten?
Mit besten Gruß
aanno
9 März 2012 um 17:48 Uhr #5183Fabian Diemel
TeilnehmerKlar.
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.Attachments:9 März 2012 um 18:54 Uhr #5185Ramin Goettlich
TeilnehmerHallo,
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,
nuclosian12 März 2012 um 13:24 Uhr #5196Thomas Pasch
TeilnehmerHallo 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.12 März 2012 um 15:01 Uhr #5198Ramin Goettlich
TeilnehmerDie aktuelle Entwicklungsversion ist seit ein paar Minuten als neue Beta online downloadbar.
12 März 2012 um 17:10 Uhr #5211Fabian Diemel
TeilnehmerSehr gut.
Vielen Dank Jungs.
Mit der neuen Version scheint alles so zu funktionieren, wie es soll :woohoo: -
AutorBeiträge