PDA

View Full Version : Im Programm nicht benutzte Dateien entsperren??



votch
30-06-10, 22:38
Hallo,

habe folgendes Problem:

In meinem Programm(Free mit SQL) möchte ich gerne diverse Dateien ändern(gleiche Datei aber in mehreren Bibliotheken). Das funktioniert auch, bei den von mir im Programm benutzten Dateien problemlos. Ich muss aber auch noch ein Programm aus dem WWS aufrufen(habe keine Source dazu), welches dort anhand übergebener Parameter Historie-Sätze wegschreibt. Leider wird dort immer nur in der ersten Bibliothelk der Satz weggeschrieben und die Dateien die dort im Zugriff sind beziehen sich auch immer nur auf die erste geöffnete Lib.

Nachdem ich aus dem WWS-Prg zurückkomme in mein Programm, sind ein paar Dateien offen mit der Lib aus *libl. Diese Dateien sind in meinem Programm nicht im Zugriff. Hab jetzt schon die Dateien ins Prg gemacht und versucht diese zu überschreiben, funktioniert nicht. Hab versucht, die Dateien zu schliessen(auch in zusätzlichem CL), funktioniert nicht. Hab die Bibliothekslist geändert und das Programm über ein CL-Prg aufgerufen, funktioniert nicht. Ich vermute mal, dass es daran liegt, dass das WWS-Prg mit reset beendet wird und dort die Dateien nicht geschlossen werden). Mein nächster Versuch wird jetzt sein, dass ich ein zusätzl. Prg schreibe, in welchem ich das WWS-Prg aufrufe und dass ich mit *INLR beende, es sei denn, es hat jemand einen guten Tipp für mich. Könnte mir aber gut vorstellen, dass es irgendwie mit Akt.-Gruppen oder so zusammenhängt, wovon ich leider noch nicht so viel Ahnung habe...

Bin für jeden Tipp dankbar.

Gibt es irgendeine Möglichkeit, die Dateien zu schliessen, beim ersten Aufruf nimmt er sich ja die Bibliothek aus *libl

Khholm
01-07-10, 06:23
Ein zusätzliches Programm mit *inlr beenden wird das Problem wahrscheinlich auch nicht lösen. Es sollte vor dem *inlr ein RCLSRC abgesetzt werden.

Karl-Heinz

B.Hauser
01-07-10, 06:42
RCLRSC funktioniert nur bei RPGIII nicht jedoch mit RPGIV bzw. ILE. Hier wirkt lediglich ein RCLACTGRP. Wenn allerdings das WWS-Programm in der Default-Aktivierungsgruppe ausgefürht wird oder mit Aktivierungsgruppe *CALLER läuft und durch das rufende Program in der Default Activierungsgruppe ausgeführt wird, hat man auch mit RCLACTGRP keine Chance.

Sollte das WWS-Programm mit Aktivierungsgruppe *CALLER erstellt sein, kann ein Programm zwischen geschaltet werden, das in einer eigenen Aktivierungsgruppe (z.B. *NEW) läuft. Dadurch läuft das WWS-Programm in der neuen Aktivierungsgruppe. Wurde das Programm mit *NEW erstellt, ist keine weitere Aktion erforderlich, d.h. die Aktivierungsgruppe wird bei Programm-Ende automatisch geschlossen. Bei einer benannten Aktivierungsgruppe kann diese nach Programm-Ende mit dem Befehl RCLACTGRP geschlossen werden.

Birgitta

votch
01-07-10, 08:02
Danke, ich versuche es mal mit dem Programm und der actgrp *new, aber gibt es da keine andere Lösung? Hab das Problem leider bei fast allen Stammdaten-Prg's in denen ein WWS-Prg aufgerufen werden muss.

Fuerchau
01-07-10, 10:49
Schau dir die Art deiner WWW-Programme an.
Bei OPM kannst du nach dem Call einen RCLRSC aufrufen.

Bei ILE schau auf die ACTGRP des Programmes. Ist hier eine benannte ACTGRP hast du auf normalem Weg keine Chance. Du musst dann einen RCLACTGRP für diese aufrufen.

Ist die ACTGRP *CALLER, setze für dein Programm eine eigene benannte ACTGRP, führe deine Aktionen für genau eine Dateigruppe durch und mach anschließend einen RCLACTGRP bevor du die nächste Dateigruppe bearbeitest.

votch
01-07-10, 14:25
Funktioniert jetzt.

Es war noch ein RPG und klappte mit RCLRSC. Den mache ich jetzt im Programm direkt über die QCMDEXC und brauche keine neuen Programme :-).

Vielen Danke an Alle!