[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2004
    Beiträge
    30

    Großes Problem mit dem Aufrufstapel

    Liebe Leute, ich bin am Verzweifeln.
    Folgendes Problem liegt mir schwer im Magen.
    Ich habe ein Menüprogramm MEN001, in welchen je nach Auswahl weitere Programme gecallt werden.
    Stapel nach Auswahl AFA210:
    Programm
    Rqs oder
    Lvl Prozedur Bibliothek Anweisung Instruktion
    QCMD QSYS 0476
    STARTST1 STGOBJ 15400 01AF
    < PEP_MEN001 STGOBJ
    MEN001 STGOBJ 0000000263
    AFA210 STGOBJ .DRVRX01 4EA4
    QWSGET QSYS 05A4
    QT3REQIO QSYS 018B


    Nun Verlasse ich das Programm AFA210
    und stelle eine geänderte Version von AFA210 in eine Bibliothek AAA000000, die lt. Bibliotheksliste vor der STGOBJ eingetragen ist, und
    Wähle erneut AFA210 zur Verarbeitung aus:
    Programm
    Rqs oder
    Lvl Prozedur Bibliothek Anweisung Instruktion
    QCMD QSYS 0476
    STARTST1 STGOBJ 15400 01AF
    < PEP_MEN001 STGOBJ
    MEN001 STGOBJ 0000000263
    AFA210 STGOBJ .DRVRX01 613A
    QWSGET QSYS 05A4
    QT3REQIO QSYS 018B


    Wie man sieht, wird immer noch das alte Objekt aus der STGOBJ herangezogen.

    Und nun zur allgemeinen Verwirrung noch der Oberhammer...

    Wähle ich nun in meinem Menüprogramm ein anderes Programm aus, beende dieses und Rufe wieder AFA210 auf, wird jetzt das Objekt aus der richtigen Bibliothek gezogen:
    Programm
    Rqs oder
    Lvl Prozedur Bibliothek Anweisung Instruktion
    QCMD QSYS 0476
    STARTST1 STGOBJ 15400 01AF
    < PEP_MEN001 STGOBJ
    MEN001 STGOBJ 0000000263
    AFA210 AAA000000 .DRVRX01 613A
    QWSGET QSYS 05A4
    QT3REQIO QSYS 018B

    .. jetzt verlasse ich wieder AFA210 und benenne das Objekt AFA210 in AFA210XY in der Bibliothek AAA000000 um!
    Danach rufe ich wieder AFA210 auf:
    Programm
    Rqs oder
    Lvl Prozedur Bibliothek Anweisung Instruktion
    QCMD QSYS 0476
    STARTST1 STGOBJ 15400 01AF
    < PEP_MEN001 STGOBJ
    MEN001 STGOBJ 0000000263
    AFA210XY AAA000000 .DRVRX01 613A
    QWSGET QSYS 05A4
    QT3REQIO QSYS 018B

    Im Menüprogramm MEN001 wird aber immer AFA210 gecallt?????

    Wer weis, wie ich vor jedem Call den Aufrufstapel sauberkriege?
    RCLRSC funktioniert nicht! Auch ein Call auf ein Dummy-Programm im Menüprogramm nach Call auf das Ausgewählte PGM bringt nichts.
    Das Problem tritt sowohl unter V4R4 wie auch unter V5R2 auf.

    Wer weis Rat?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Wenn du ein Programm aus RPG aufrufst, merkt sich das Programm die Adresse. Solange also das Hauptprogramm nicht beendet wird, wird immer die zuletzt aufgerufene Version verwendet.
    Um dieses zu umgehen gibt es 2 Möglichkeitn:

    a) CANCEL 'MYPROG'
    b) Aufruf eines CLP's mit Parameter, dieses ruft dann das Programm auf (kann auch per TFRCTL erfolgen).

    Dieses "Problem" gibt es seit ich die AS/400 kenne.
    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
    Jun 2004
    Beiträge
    30
    Wenn ich zwischenzeitlich ein anderes PGM aus dem Menüeprogramm aufrufe, funktioniert es ja. Wenn ich aber in mein Menüprogramm folgenden Abschnitt reinbaue füntioniert es trotzdem nicht??
    C move *blanks #CALL 10
    C movel SFPGM #CALL
    C call #CALL 50
    C move *blanks #CALL
    C movel 'Dummy' #CALL
    C call #CALL 50
    SFPGM = Programmname aus dem Subfile.In konkreten Fall AFA210.
    DUMMY = Ein Programm, das nur nen Chain auf ne x-Belibige datei Macht(zwegs Test)

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Dies ist korrekt !
    Der Variablen wird intern ein Systemzeiger auf das Programmobjekt zugewiesen. Erst wenn tatsächlich ein CALL auf die Variable durchgeführt wird, prüft RPG ob sich der Inhalt zum letzten CALL geändert hat. Ist dies der Fall wird der Systemzeiger erneuert.
    Nur durch das Init der Variablen wird der interne Zeiger nicht zerstört.

    Dein Weg eines Dummy-Calls kann durchaus so bleiben. Das Programm braucht nichts zu tun ausser einem RETRN.

    Der Zeiger wird auch zurückgesetzt per "FREE MYVAR" (CANCEL gilt für COBOL).
    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
    Jun 2004
    Beiträge
    30
    Der Dummy-Call funktiniert! Ich hatte leider im RPG-Programm den Movel 'Dummy' eingebaut, das Programm heisst aber DUMMY.

    *sick*

    Gruß
    Winni

Similar Threads

  1. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  2. Problem mit Steuerzeichen in Datenbank?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 26-10-06, 10:07
  3. Merkwürdiges Problem in VRPG
    By Flappes in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 06-10-06, 08:39
  4. Problem ODBC und VB.NET
    By Marsman in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 11-07-06, 10:50
  5. Problem mit PHP-ODBC-Connect
    By Etherion in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 19-05-06, 13:31

Berechtigungen

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