PDA

View Full Version : Trigger sperrt Datensatz



Peet
31-05-17, 09:20
Hallo zusammen,
ich habe einen Trigger (RPG) auf eine PF definiert, nur für WRITE + *AFTER.
Das definierte RPG-Programm wird auch aufgerufen, alles soweit gut....

ABER...
Der Datensatz, auf den der Trigger reagiert, ist gesperrt !!!
In meinem Triggerprogramm rufe ich ein anderes PGM auf, um diverse Prüfungen zu machen.
Dort (in den anderen Programm) mache ich dann auch einen Update auf den Datensatz.
Und dieser Update geht dann natürlich in die "Hose".

Da ich (bisher) dieses "andere" PGM auch aus dem Web (Net.Data) aufrufe, wollte
ich mit dem Triggerprogramm vorerst nur eine "weitere" Möglichkeit des Aufrufs realisieren.

Ich könnte natürlich auch die Verarbeitung aus dem "anderen" Programm in das Triggerprogramm verlagern, aber solange der Satz gesperrt ist, werde ich ja dann im Triggerprogramm beim Update das gleiche "Problem" bekommen !!! ... oder ?????
Und ich hätte dann natürlich das Problem, dass ich in der WebAnwendung die Funktion der Plausiprüfung nicht mehr anbieten könnte, zumindest nicht ohne das Triggerprogramm "extrem" zu verbiegen....

Kann man (irgendwie) den Datensatz im Triggerprogramm "freigeben", bevor ich das "andere" Programm aufrufe ???

Vielen Dank vorab !
Peet

Robi
31-05-17, 09:44
Du kannst den Trigger als *before definieren und eine Änderung des Satzes durch den Trigger zulassen.

Dann mußt du deine Pgmme so umbauen das sie den Satz empfangen und nicht lesen bzw zurückgeben und nicht schreiben.
Das schreiben macht dann 'quasi' der Trigger, ohne das du ein "Write" aufrufst

Robi

Fuerchau
31-05-17, 09:52
Das Problem ist die Gefahr der Rekursion!
Wenn ein Trigger den Datensatz ändern will, muss er das, so wie oben beschrieben, auf jeden Fall vor dem Festschreiben in der DB machen.
Möchtest du eine Plausi-Prüfung machen und ggf. dann den Write ablehnen, musst du eine ESC-Nachricht (Abbruch) per MSGAPI senden.

Peet
31-05-17, 09:59
Hallo zusammen,

ich habe die Lösung gefunden.

Beim ADDPFTRG muss der Parameter "ALWREPCHG(*YES)" gesetzt werden !!
Habe ich hier gefunden...

http://itknowledgeexchange.techtarget.com/itanswers/remove-a-trigger-file-record-lock/

Danke trotzdem....

Peet

Fuerchau
31-05-17, 10:06
Da hoffe ich nur für dich, dass dein Trigger nicht durch den wiederholten Update noch mal aufgerufen wird da dann die RPG-Runtime die Rekursion verhindert.

Robi
31-05-17, 10:41
mit meinem
eine Änderung des Satzes durch den Trigger zulassen habe ich diesen Parameter gemeint. Das das auch bei *after Triggern und einem erneuten write durch ein vom Trigger gerufenes Pgm funktioniert habe ich nicht gewusst. Ist mir aber auch zu wirr.
Aber wenn sein soll ...