Hallo,

Ich habe ein Erfassungsprogramm zur Verwaltung von Parametern geschrieben. Die Parameter werden in eine Kopfdatei und dazugehörige Positionsdatei geschrieben/geändert/gelöscht. Die Dateizugriffe sind jeweils in unterschiedliche Prozeduren eines Serviceprogrammes ausgelagert. Das Serviceprogramm läuft unter der ACTGRP(*CALLER) und alle Dateizugriffe sind mit SQL realisiert.

An der Positionsdatei hängt ein Trigger Programm dran. Dieses läuft ebenfalls unter ACTGRP(*CALLER) - allerdings wird in diesem Programm kein SQL benutzt. Die Änderungen/Neuanlage/Löschungen der Sätze aus der Positionsdatei werden in eine History Datei (mit write) aufgezeichnet.

Mein Verwaltungsprogramm läuft unter der ACTGRP(Name des Programmes). In diesem Programm wird mit commit(e) bzw. rolBk gearbeitet.

Jetzt folgender Fall:
Der Benutzer will im Verwaltungsprogramm den Kopfsatz löschen - in diesem Fall sollen zuerst alle Positionen gelöscht werden. Ist das Löschen der Positionen fehlerfrei gelaufen, wird danach der Kopfsatz gelöscht und ein Commit wird abgesetzt - im Fehlerfall wird ein rolBk abgesetzt und alle bis dahin gelöschten Positionen werden wiederhergestellt.

Um das zu testen habe ich eine Position gesperrt, so dass diese nicht gelöscht werden konnte. Das Programm hat 4 Positionen gelöscht bis es auf ein LCKW stehen blieb - Wartezeit 60Sek - In der History standen die 4 gelöschten Sätze. DSPFD auf Positionsdatei = Anzahl gelöschter Sätze = 4. Nach Ablauf der Dateiwartezeit wurde das rolBk ausgeführt.
Die 4 Positionen wurden wiederhergestellt. DSPFD auf Positionsdatei = Anzahl gelöschter Sätze = 0.
In der History standen die 4 gelöschten Sätze noch drin - ich hätte jetzt aber erwartet das diese Sätze aber noch zusätzlich als Neuanlage auftauchen würden, da die Löschung durch das rolBk rückgängig gemacht wurden.
Ich kann verstehen, dass das Trigger Programm den commit/rolbck nicht mitmacht - da ja auch keine commitanweisung in der F-Bestimmung steht. Aber das Wiedereinstellen der Sätze in die Positionsdatei durch das rolbck wurde aber vom Trigger Programm auch nicht registriert.

Wo liegt das Problem bzw. wäre in diesem Fall Best Practice?

Für die Hilfe bedanke ich mich im Voraus und sorry für den Roman.

Viele Grüße