[NEWSboard IBMi Forum]

Thema: Prozeduren

  1. #1
    Registriert seit
    Nov 2015
    Beiträge
    80

    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_

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Nov 2015
    Beiträge
    80
    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?

  4. #4
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Nov 2015
    Beiträge
    80
    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!

  7. #7
    Registriert seit
    May 2007
    Beiträge
    295
    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
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  8. #8
    Registriert seit
    Nov 2015
    Beiträge
    80
    Danke euch allen! Hat mir sehr geholfen.

Similar Threads

  1. ODBC und SQL-Prozeduren
    By Curious in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 01-02-18, 18:34
  2. Alle Prozeduren mit Parameter auflisten
    By Gutmann in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 04-08-17, 11:32
  3. SQLRPGLE Get und Set Prozeduren
    By iseries_user in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 11-05-16, 11:13
  4. Interne Prozeduren mit DFTACTGRP
    By DEVJO in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 16-09-15, 14:14
  5. Probleme mit SQL-Prozeduren
    By AnjaS in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 16-01-03, 10:18

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •