Monday 7 October 2013

Trigger umstellen von TB2 auf Map

Vor kurzem hatte ich schon in einem anderen Beitrag darauf hingewiesen, dass man Formulare besser nicht im Administrator oder in Map ohne Bildaufbau testet. Leider habe ich meine eigene Erkentniss ignoriert und den gleichen Fehler wieder begangen - diesmal im Zusammenhang mit Triggern.

Aus TB2 habe ich einen Trigger übernommen und auf die neuen AW-Tabellen- und Spaltennamen angepasst sowie die Verweise auf "deleted=0" entfernt. Ein kurzer Test mit Map - alles läuft wie erwartet. Dann testet die Kollegin und es geht doch nicht....Unterschied - ich habe ohne Bildaufbau getestet, die Kollegin mit Bildaufbau.

TB2 Trigger:

create or replace
TRIGGER AW_HALTUNG_SPUEL
 BEFORE UPDATE OF SPUEL_INTERVALL ON AW_HALTUNG
FOR EACH ROW...


Ändert sich für eine Haltung das Spülintervall dann wird der nächste reguläre Spültermin neu berechnet. Man kann im Formular aber den nächsten Spültermin auch manuell eintragen.

In Map liess sich nun der nächste Spültermin nicht mehr ändern - bei Angabe eines neuen Datums wurde wieder der vorherige (errechnete) Spültermin eingetragen.

Ursache scheint zu sein, dass beim einem UPDATE in Map alle Spalten aktualisiert werden - nicht nur die Spalte, deren Wert sich im Formular geändert hat. Beim  Setzen des Datums wurde also auch das Spülintervall aktualisiert (mit dem alten Wert) - mit der Folge, dass der Trigger oben ausgelöst, das Spüldatum neu errechnet und wieder auf den vorherigen Wert zurückgesetzt wurde.

Im Trigger ist jetzt ein zusätzlicher Test enthalten der prüft, ob sich der Intervall-Wert tatsächlich geändert hat. Nur dann wird die Berechnung ausgeführt:

-- nur abarbeiten, wenn sich Intervall tatsächlich geändert hat:
   IF (:new.W_WASHING_INTERVAL != :old.W_WASHING_INTERVAL) THEN

   ...

No comments:

Post a Comment