Anmelden

View Full Version : Dateidefinition in Prozeduren - Static - V6R1



hwalk
02-01-12, 08:20
Hallo zusammen,

zunächst einmal wünsche ich alles Gute für das neue Jahr!

Mit V6R1 kann auch auf Prozedurebene die Definition von Dateien vorgenommen werden.
Mit dem Schlüsselwort STATIC kann dabei dafür gesorgt werden, dass beim Beenden der Prozedur die Datei nicht implizit geschlossen wird.
Vorteile: Lesezeiger bleibt erhalten, höhere Geschwindigkeit bei mehrfachem Verwenden der Prozedur, da der ständige Open und Close wegfällt, ...

Leider werden Dateien, die mit STATIC definiert wurden, auch dann nicht geschlossen, wenn das Programm beendet wird. Man muss diese explizit schließen.

Da man (meines Wissens nach) nur innerhalb der Prozedur Zugriff auf die Datei hat, müsste man in dieser implementieren, dass die Datei beim letzten Aufruf der Prozedur geschlossen wird. Das ist recht unschön.

Wie geht ihr mit diesem Thema um?

BenderD
02-01-12, 08:39
... static in lokalen procedures, ein typisches Beispiel für krummes RPG Design mit dem man sich Probleme holt, die man nicht haben müsste! Könnte man aber heilen mit Hilfe von CEE4RAGE

D*B


Hallo zusammen,

zunächst einmal wünsche ich alles Gute für das neue Jahr!

Mit V6R1 kann auch auf Prozedurebene die Definition von Dateien vorgenommen werden.
Mit dem Schlüsselwort STATIC kann dabei dafür gesorgt werden, dass beim Beenden der Prozedur die Datei nicht implizit geschlossen wird.
Vorteile: Lesezeiger bleibt erhalten, höhere Geschwindigkeit bei mehrfachem Verwenden der Prozedur, da der ständige Open und Close wegfällt, ...

Leider werden Dateien, die mit STATIC definiert wurden, auch dann nicht geschlossen, wenn das Programm beendet wird. Man muss diese explizit schließen.

Da man (meines Wissens nach) nur innerhalb der Prozedur Zugriff auf die Datei hat, müsste man in dieser implementieren, dass die Datei beim letzten Aufruf der Prozedur geschlossen wird. Das ist recht unschön.

Wie geht ihr mit diesem Thema um?

B.Hauser
02-01-12, 09:44
In der ILE-Programmierung werden Dateien in den lokalen F-Bestimmungen erst dann geschlossen, wenn die Aktivierungsgruppe in der das Programm oder Service-Programm, in dem sich die Prozeduren befinden geschlossen wird.
Verwendet man globale F-Bestimmungen werden die Dateien, wenn LR gesetzt ist bei Programm-Ende geschlossen. Der Grund für dieses unterschiedliche Verhalten liegt darin, dass Main-Procedures dem RPG-Zyklus unterliegen, während Prozeduren ohne Zyklus implementiert werden. Der RPG-Zyklus übernimmt das automatische öffnen und schließen der Dateien.


Wie geht Ihr damit um?

Verwende ich fast ausschließlich embedded SQL (aber auch SQL lässt die Zugriffswege offen und schließt diese erst mit Beenden der Aktivierungsgruppe).
Die Datei-Zugriffe erfolgen in eigenen Service-Programmen. Sofern native I/O verwendet wird, so sind diese Dateien überwiegend global definiert und werden User controlled geöffnet und geschlossen. Über (exportierte) Prozeduren können diese Dateien geöffnet und geschlossen werden, sofern gewünscht.
Sofern Dateien lokal als F-Bestimmungen definiert werden, so werden diese ebenfalls user controlled geöffnet und geschlossen. Jede Prozedur hat einen optionalen Parameter, über den gesteuert werden kann, ob die Datei beim Verlassen der Prozedur geschlossen werden soll.


Birgitta

hwalk
02-01-12, 15:47
Vielen Dank für die Infos und Hinweise.