Hallo zusammen,

ich werde jetzt mal etwas mehr ausholen und schreiben wie die Situation ist

Wir haben in unsere Datei PMTRNP einen INSERT BEFORE Trigger hinzugefügt. Der schreibt keine Dateien sondern ändert nur einen Feldwert ab
Diese Datei wird in vielen Programmen geschrieben.
Manchmal wurde die physische Datei ohne Keyfelder angegeben im Programm manchmal eine logische Datei mit Schlüsselfelder. In den Programmen ist sie aber immer mit output eröffnet.
Ich schreibe das deshalb, weil ich nicht weiß ob es mit der Problematik zusammenhängt.

Nun die Situation
Es gibt ein Menü (kein echtes AS/400 Menü sondern ein Programm). Aus diesem werden nun die einzelnen Programme aufgerufen.
Die einzelnen startenden Programm sind CLP (also nicht CLLE). Die machen einen STRCMTCTL und einen ENDCMTCTL und vor dem ENDCMTCTL ein RCLRSC. Das hatten wir rein gemacht weil wir Probleme mit offenen Commits hatten, obwohl ein ROLLBACK oder COMMIT immer aus geführt wurde. Die RPGs die aufgerufen werden sind RPGLEs und dort wird dann auch die PMTRNP geschrieben. Die RPGs sind immer mit DFTACTGRP(*NO) und ACTGRP(*CALLER) umgewandelt.

Wenn ich es im Internet richtig gelesen habe, kann das Problem sein, dass der RCLRSC zwar die Dateien schließt aber bei den ILE-Programmen nicht die vorhandenen Referenzen.

Da die User am Anfang keine Probleme haben, aber dann eben wegen einem nicht mehr vorhandenen Referenz abstürzen war meine Vermutung. Sie rufen Programm A auf, wenn sie das verlassen wird der RCLRSC aufgerufen, dann rufen sie Programm B auf (dort war kein Fehler). Dann haben sie wieder Programm A aufgerufen und wir bekommen den Absturz.

Jetzt habe ich das ganze mal untersucht.
Programm A (RPGLE) befindet sich aber auch in der DFTACTGRP obwohl es mit DFTACTGRP(*NO) umgewandelt ist. Ich nehme an es ist dem ACTGRP(*CALLER) geschuldet, da das OPM Program (aufrufendes CL) dort startet.

Ich bin mir ja noch nicht mal sicher ob es wirklich das Problem mit der Aktivierungsgruppe ist.

Kann mir jemand helfen?

Der Fehler tritt immer im Trigger Programm auf und immer mit Get_Random_Db_Record

Vielleicht als Anmerkung noch mit dazu, was mir jetzt auch beim Testen aufgefallen ist.

Also aufrufendes CL ist OPM und das aufgerufene Programm ist RPGLE mit dftactgrp(*no) und actgrp(*caller)
Der Call Stack
CLP --> läuft in *DFTACTGRP und Steuergrenze (Control Boundary) ist NO
RPGLE --> läuft in *DFTACTGRP und Steuergrenze ist YES

Jetzt habe ich aus CLP CLLE gemacht. Aber Standardaktivierungsgruppe ist immer noch ja
Beide laufen weiterhin in *DFTACTGRP aber die Steuergrenze YES hat jetzt das CLLE und seit ich die Programme so umgewandelt habe, haben wir mal bis jetzt keinen Absturz mehr. Tritt aber auch immer nur ein paar mal am Tag auf.

Wenn ich jetzt bei der Umwandlung des CLLE jetzt DFTACTGRP(*NO) angebe und ACTGRP(*CALLER) dann ist es das gleiche wie zuvor, da die Menüprogramme welches das CLLE aufrufen OPMs sind

Wandle ich aber das CLLE mit DFTACTGRP(*NO) um und ACTGRP(*NEW)
Dann bin ich ab meinem CLLE in der Activierungsgruppe *NEW und das CLLE hat die Steuergrenze YES.

Ich bin mir halt nicht sicher wie ich es verwenden sollte und ob es mit meinem Problem was zu tun hat.

Viele Grüße Harald