[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Mar 2019
    Beiträge
    33

    Lokale Variable im Serviceprogramm?

    Hallo Zusammen,
    gibt es eine Möglichkeit in einem Serviceprogramm die Variableninhalte zu behalten, um bei erneutem Aufruf diese wieder zu benutzen?
    Konkret: Gleicher Aufruf -> gleiches Ergebnis ohne erneuter Ausführung

    If variable = *null;
    ...
    endif;

    return variable;

    Die variable wird aber nicht übergeben.

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Ja!
    Du musst dann die Variable mit dem Schlüssel-Wort STATIC definieren, dann bleibt der Wert erhalten.

    Code:
    DCL-S  YourVariable VarChar(10)  static;
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Mar 2019
    Beiträge
    33
    Danke Brigitta,
    Das war es , funktioniert bestens.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Bedenke aber auch folgendes:
    Ein Service dient ja eigentlich einer Funktion, die von mehreren Programmen benötigt werden könnte.
    Ansonsten kann man die Funktion ja auch direkt ins Hauptprogramm verlegen.
    Da der Service u.U. in der ACTGRP eine Lebensdauer während der gesamten Jobdauer besitzt, kommt es also auch durchaus vor, dass deine Static-Variable einen stundenalten Zustand aufweist und Folgeergebnisse verfälscht werden können.
    Besser ist es daher, einen Arbeitsbereich (DS der benötigten Felder) der Funktion per Reference mit zu übergeben und einen Status-Code (Start, Next, Final) zu verwenden.
    Dann kann man beim Aufruf dann sicher sein, dass das gewünschte Ergebnis auch Stunden später noch funktioniert.
    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

  5. #5
    Registriert seit
    Mar 2019
    Beiträge
    33
    In diesem Fall geht es ja genau darum. Es ist eine dynamische Tabelle, die HausId's beinhaltet.
    Diese Liste ändert sich nicht stündlich. Jedes Programm, das im gleichen Aufrufstapel die Prozedur aufruft, soll das gleiche Ergebnis erhalten.
    Aber danke für den Hinweis.

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... ich würde die Variable schlicht in dem module global deklarieren, das ist förderlich für Modularisierung.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Mar 2019
    Beiträge
    33
    Hallo BenderD,
    es ist kein Modul, sondern ein Serviceprogramm.

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Globale Variablen in einem Modul (unabhängig davon ob es in ein Programm oder Service-Programm gebunden wird), können von allen (exportierten) Prozeduren innerhalb des gleichen Moduls verändert werden.
    ... und wahrscheinlich will man genau das umgehen.
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... wenn das zum Problem wird, ist das Modul zu groß!
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von Lucky662 Beitrag anzeigen
    Hallo BenderD,
    es ist kein Modul, sondern ein Serviceprogramm.
    ohne Modul kein Serviceprogramm, Du meinst wohl es ist das einzige Modul im Serviceprogramm.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Zitat Zitat von BenderD Beitrag anzeigen
    ... wenn das zum Problem wird, ist das Modul zu groß!
    Das kann schon in dem Moment zum Problem werden, wenn in dem Modul mehr als eine Prozedur vorhanden ist.
    ... man sollte manchmal nicht glauben auf welche Ideen Programmierer kommen können!
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  12. #12
    Registriert seit
    Mar 2019
    Beiträge
    33
    Also wenn ich die Prozedur aufrufe, möchte ich das Ergebnis des letzten Aufrufs haben.
    Ist die Variable global definiert, so kann jede Prozedur die Variable ändern und vor allen Dingen aus allen aufrufenden Programmen heraus. Wenn die Variable also im andernen Programm anders benutzt wird, sind die Folgen eventuell Fatal.
    Deshalb wähle ich lokale Variablen in der einzelnen Prozedur.

Similar Threads

  1. JVAGATE und SQLRPG auf lokale DB2 for i
    By Peet in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 25-06-19, 11:59
  2. SQLRPGLE Serviceprogramm erstellen
    By Kerki in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 07-08-18, 13:27
  3. Eine lokale Datei lesen/schreiben*** C:\test.txt
    By svit in forum NEWSboard Programmierung
    Antworten: 21
    Letzter Beitrag: 30-01-17, 10:45
  4. Serviceprogramm und SQL-Command „get diagnostics“
    By opeker in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-10-15, 13:42
  5. Serviceprogramm und Speicher
    By Tonazzo in forum NEWSboard Programmierung
    Antworten: 29
    Letzter Beitrag: 15-09-15, 15:03

Berechtigungen

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