[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2007
    Beiträge
    27

    *entry PList in free

    Hallo,

    habe in einem PGM die *entry PList durch free ersetzt. Also mit H-Bestimmung Main(...) und Prozedur.

    Das funktioniert jetzt auch soweit, aber nur beim ersten Aufruf. Danach sind meine Variablen nicht initialisiert. Ich habe das zumindest für die F3-Taste geprüft. F3 ist noch an. Wieso das? Wurde das PGM nicht richtig beendet? Was ist richtig *inLR oder return?

    Gruß Andreas

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Sehe ich das richtig, dass Du nicht einfach die *ENTRY PLIST durch Procedure Interface und Prototyp ersetzt, sondern dass Du versuchst die neuen Freatures in Release 6.1 zu nutzen.

    Wenn es nur darum geht die *Entry PList zu ersetzen hätte ich alles gelassen wie es ist und einfach Prototyp (mit Schlüsselwort EXTPGM) und Procedure Inteface eingebunden.

    Wenn Du die neuen Features in 6.1 verwendest, also den Programm-Code in eine Procedure (mit P-Statement zu Beginn und Ende) packst und MAIN in den H-Bestimmungen angibst, klemmst Du den Zyklus ab. Der Zyklus macht im Hintergrund schon das eine oder andere selber und *INLR ist Zyklus!

    Weiterhin solltest Du beachten, wenn du schon eine Prozedur für das Programm machst, solltest Du auch die Dateien lokal definieren. Dann werden sie beim Aufruf automatisch geöffnet und beim Verlassen der Prozedur geschlossen (es sei den das Schlüssel-Wort STATIC ist in den F-Bestimmungen angegeben oder die Dateien werden user controlled geöffnet). Wenn die Dateien global definiert sind, erfolgt das Öffnen zwar automatisch beim 1. Aufruf (wie innerhalb eines Moduls für Service-Programme), sie bleiben jedoch offen und werden nicht geschlossen wenn die Main-Prozedur mit Return (anders geht es nicht!) beendet wird.

    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
    Nov 2007
    Beiträge
    27
    Das Programm ist RPG IV und wird entweder direkt aus dem Menü oder von einem anderen RPG-Programm aufgerufen. Es gibt einen Eingansparameter, der gefüllt ist, wenn das Programm aus dem anderen Programm aufgerufen wird.

    Ich habe nun ein bischen geübt und das Hauptprogramm in free umgeschrieben. Da es aber keine Entsprechung für *entry PList in free gibt, habe ich nach einer Lösung gesucht. Sicherlich ist der völlige Verzicht auf das Hauptprogramm und die Deklaration der Dateien in Prozeduren richtig, ich muss das aber nicht zwingend umsetzen. Das kann ich mir auch bei einer Neuentwicklung vornehmen. Fehler ist bei mir sicher, dass die Dateien noch global definiert sind.

    Zitat Zitat von B.Hauser Beitrag anzeigen
    Wenn es nur darum geht die *Entry PList zu ersetzen hätte ich alles gelassen wie es ist und einfach Prototyp (mit Schlüsselwort EXTPGM) und Procedure Inteface eingebunden.
    Das versteh ich nicht ganz. Erklär das mal bitte genauer.

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Das versteh ich nicht ganz. Erklär das mal bitte genauer.
    Deine bestehende Quelle hat ungefähr wie folgt ausgesehen:

    PHP-Code:
    H-Bestimmungen
    F
    -Bestimmungen
    D
    -Bestimmungen
    C
    -Bestimmungen
    C Entry PList im klassischen Format
    C
    /Free
        Sonstiger Source
    -Code
    C
    /End-Free
    ggf
    noch ein paar interne Prozeduren 
    Du musst lediglich die *ENTRY-PList entfernen und dafür in den D-Bestimmungen ein Procedure Interface anlegen. Und da Prototyping immer Procedure Interface und Prototyp benötigt, muss in den D-Bestimmungen noch der Prototyp (mit Schlüssel-Wort EXTPGM damit der Compiler zwischen Prozedur und Programm unterscheiden kann) angelegt werden. Anstatt den Prototypen direkt in der Quelle zu hinterlegen hätte sollte man ihn in einer Copy-Strecke angeben.

    Neu sieht das Ganze so aus:
    PHP-Code:
    H-Bestimmungen (MAIN ist nicht notwendig!!!)
    F-Bestimmungen
    D
    -Bestimmungen
     
    Prototyp sollte in Copy-Strecke hinterlegt sein.
    D  MyPGM       PR                      ExtPGM('MYPGM')
    D  Par1                     10A
    D  Par2                      7P 0

     
    *Procedure Interface (statt *ENTRY PLIST)
    D MyPGM        PI
    D  Par1                     10A
    D  Par2                      7P 0

     
    Sonstige D-Bestimmungen
    C
    *** Entry PLIST entfällt
     
    /Free
        Sonstiger Source Code
     
    /End-Free 
    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

  5. #5
    Registriert seit
    Nov 2007
    Beiträge
    27
    Ja, ich denke, das ist das richtige für mich. Werde ich probieren und das Ergebnis mitteilen.

    Danke soweit

    * E * D * I * T *

    Hat super geklappt. Danke sehr und schönes WE!

Similar Threads

  1. Frei Porn Site!
    By Fucasdreh in forum NEWSboard Server Job
    Antworten: 0
    Letzter Beitrag: 10-01-07, 13:12
  2. Parameter empfangen in Free
    By kr1s in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 08-09-06, 11:59
  3. free AS400 Telnet Applet
    By cc in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 08-08-06, 23:11
  4. timestamp im free format
    By redsky in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 04-05-05, 12:26

Berechtigungen

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