-
Prozeduren
Hallo zusammen,
ich bin gerade dabei mit Prozeduren in RPGLE zu testen und mich einzuarbeiten.
Grundsätzlich findet man ja viel im Internet (was die Umsetzung betrifft). Allerdings steigen diese ganzen Dokumentationen meiner Meinung nach leider etwas zu tief ein ohne überhaupt mal auf die (technischen) Hintergründe einzugehen.
Was passiert beispielsweise wenn eine Prozedur schreibend auf eine Datei zugreift, muss die Datei manuell geschlossen werden damit kein lck darauf bleibt usw usw usw?
Daher stelle ich mir die Fragen, wann macht es Sinn mit Prozeduren zu arbeiten und wann macht es keinen Sinn. Gibt es Dinge bei denen man sogar "aufpassen" muss.
Über ein paar erklärende Zeilen würde ich mich sehr freuen. Alternativ gibt es vllt ja doch Lektüre die darauf eingeht und ich finde sie nur nicht .
Viele Grüße und eine gute Woche!
_MG_
-
Eigentlich doch sehr simpel;-):
https://de.wikipedia.org/wiki/Prozedur_(Programmierung)
In der Theorie:
Ersetze alle EXSR (also Unterprogramme) durch Prozeduren und Funktionen.
Wobei Prozeduren nur etwas tun und kein Ergebnis liefern und Funktionen i.d.R. etwas tun/berechnen und genau 1 Wert zurückgeben.
Vorteil der Funktion: Der Rückgabewert lässt sich direkt in weiteren Berechnungen verwenden.
EXSR, die in Copystrecken stecken verlegt man dann in Serviceprogramme.
Generelle Vorteile:
Man braucht keine Hilfsfelder für Prozedurversorgung und kann die Parameter direkt angeben.
Per CONST/VALUE-Definition passieren sogar Typanpassungen (ins besonders Längen bei Zeichenfeldern).
Man kennt das ja bei EXSR-Arien:
Parameterfelder definieren und versorgen, EXSR ausführen, Ergebnisse auswerten...
Funktionen/Prozeduren können generell rekursiv aufgerufen werden, EXSR und Programme nicht.
Lektüre dazu gibt es ja genug und die Meinungen über die Art der Verwendung gehen da stark auseinander.
Ansonsten gilt für Prozeduren (fast) das Selbe wie für externe Programme mit Nomain:
- es gibt keine InzSR
- lokale Variablen können initialisiert werden (INZ)
- lokale Dateien werden geöffnet (außer bei USROPN) und geschlossen (immer)
Also Fazit:
EXSR => Prozedur/Funktion => EXSR wird verboten
-
Hallo Fuerchau,
danke für die Antwort. Super, das man auch Hilfe erhält wenn es nicht um ein klassisches Problem geht.
Was ich mich frage, werden diese Prozeduren verwendet wie Methoden in Java. Ich versuche da ein Bezug herzustellen (evtl. ist das gar nicht so gut oder macht keinen Sinn??)).
Würde denn grundsätzlich folgendes gehen oder macht die Verwendung so Sinn (dirty Beispielcode):
main(start)
DCL-PROC start1;
name = 'testname';
write tt;
close TESTFILE;
END-PROC;
DCL-PROC start;
start1();
END-PROC;
--> Sprich: Prozeduren rufen andere Prozeduren auf (Programm intern), unabhängig ob ein Wert mit return zurückgegeben wird oder nicht.
In so einem Beispiel habe ich dann auch folgendes Problem, dadurch das ich die Datei schließe läuft es bei erneutem ausführen auf Fehler "Datei geschlossen".
Lasse ich das weg, kommt beim umwandeln die Warnung das die Datei geschlossen werden soll und der Job behält die Datei in Zugriff.
--> ISt das evtl. ein Beispiel wofür man Prozeduren auf keinen Fall nutzen sollte?
-
Meiner Meinung nach machen Prozeduren fast immer Sinn! Man muss nur wissen, wie sie sich verhalten. Deklarationen, die innerhalb von Prozeduren vorgenommen werden, sind lokal. Das heißt, wenn du innerhalb einer Procedure eine Datei deklarierst und öffnest, steht diese Datei nur lokal zur Verfügung. Eine andere Procedure kann diese Datei nicht nutzen. Sie müsste sie dann schon selber öffnen.
Du kannst eine Datei natürlich außerhalb der Procedure (also im globalen Bereich) öffnen. Dann steht sie allen Prozeduren zur Verfügung.
Dieter
-
Mit "außerhalb" sind F- und D-Bestimmungen vor der ersten Prozedur gemeint.
Diese Definitionen gelten dann als Global.
Wenn du also eine F-Bestimmung am Anfang hast wird diese automatisch geöffnet (außer eben bei USROPN).
Wenn du dann einen Close kodierst, kannst du nicht erwarten, dass die Datei der nächsten Prozedur wieder zur Verfügung steht.
Du kannst natürlich auch zwischen DCL-PROC und END-PROC Dateibestimmungen definieren. Diese sind dann lokal.
Und AutoOpen-Dateien bleiben natürlich offen, wenn du am Ende *INLR auf *OFF belässt.
Um das automatisch zu verhindern, dann musst du eine MAIN-Prozedur erstellen:
https://www.ibm.com/support/knowledg...sd/hmainkw.htm
Die hat dann keinen Zyklus und INLR wirkt nicht mehr.
-
Danke euch beiden, das hat mir für mein Verständnis sehr geholfen!!!
Eine Frage noch. Sobald ich die f bestimmung innnerhalb der Prozedur mache, bekomme ich beim kompilieren die Meldung das eine Ergebnisdatenstruktur benötigt wird und der Name der Variable nicht definiert ist. Gibt es an der Stelle auch noch was zu beachten?
Schönen Abend!
-
GM!
Schau dir auf Simon Hutchinsons Blog mal die beiden Blogs an.
Dort zeigt er recht anschaulich die Lösung deines Problems denn du musst wenn du die Tabelle lokal definierst eine DS angeben in welche du den Buffer liest.
http://www.rpgpgm.com/2016/03/defini...rocedures.html
http://www.rpgpgm.com/2016/03/defini...es-part-2.html
Oder auf meiner Git-Seite habe ich auch ein kleines Beispiel dazu:
https://github.com/prsbrc/Miscellane...Def_Proc.rpgle
Greets
-
Danke euch allen! Hat mir sehr geholfen.
Similar Threads
-
By Curious in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 01-02-18, 17:34
-
By Gutmann in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 04-08-17, 10:32
-
By iseries_user in forum NEWSboard Programmierung
Antworten: 14
Letzter Beitrag: 11-05-16, 10:13
-
By DEVJO in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 16-09-15, 13:14
-
By AnjaS in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 16-01-03, 09:18
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks