[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2004
    Beiträge
    79

    *entry plist ersetzen in RPG/IV Free-Format

    Hallo Forum!

    Mein Problem wurde zwar ähnlich weiter unten bereits aufgelistet, aber trotzdem habe ich Schwierigkeiten, dies umzusetzen.

    Ich möchte eine PRG/IV-Source umstellen auf Free-Format und anschließend mit CRTBNDRPG erstellen. Wie ersetze ich die *entry plist? Irgendwie scheints ja mit D-Anweisungen und PR/PI möglich zu sein.

    Alter Quellcode:
    C *ENTRY PLIST
    C PARM LAND 3

    Neuer Quellcode:
    h decedit('0,') datedit(*dmy.) datfmt(*eur) debug(*yes) option(*srcstmt : *nodebugio)
    D PRDEF PR
    D LAND 3

    D PRDEF PI
    D LAND 3


    In der Umwandlungsliste erscheinen folgende Fehlermeldungen:
    007900 d prdef pr
    ======> aaaaaaaaaaaaaaa
    *RNF3788 30 a 007900 Schlüsselwort EXTPGM muß angegeben werden, wenn
    DFTACTGRP(*YES) im Befehl CRTBNDRPG angegeben wird.
    008000 d land 3
    008100 d prdef pi
    ======> aaaaaaaaaaaaaaa
    *RNF3751 30 a 008100 Externe Prozedur im Prototyp für Hauptprozedur nicht mit
    aktuellem externem Namen identisch.
    008200 d land 3

  2. #2
    Registriert seit
    Apr 2004
    Beiträge
    105
    Versuch es mal so:

    Code:
    D PRDEF PR    extpgm('getLand')
    D LAND 3
    
    D PRDEF PI
    D LAND 3
    Aufruf der Prozedur mit callP getLand.

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Versuch es einfach mit
    h dftactgrp(*no)

    EXTPGM kann ja nicht angegeben werden, da es ja das Interface der Main-Procedure ist !
    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

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.873

    Prototyping

    Hallo,

    Wie du bereits festgestellt hast, muss für Programm- und Prozedure-Aufrufe im Free Format Prototyping verwendet werden.

    Beides, sowohl Programme als auch Prozeduren werden mit dem Befehl CALLP aufgerufen.
    Zur Compile-Zeit wird der Prototyp mit Procedure-Interface bzw. in rufenden Programmen mit den Parametern verglichen.
    Die Parameter müssen in Anzahl, Art und Reihenfolge übereinstimmen.

    Prozeduren werden immer statisch aufgerufen, d.h. sie verhalten sich als wären sie Bestandteil des Programms. Aus diesem Grund müssen sie zum Erstellungs-Zeitpunkt des Programms physisch vorhanden sein.

    Programme dagegen werden dynamisch aufgerufen, d.h. erst dann, wenn der CALL erfolgt.

    Zur Unterscheidung zwischen Programm und Prozedur muss im Prototyp das Schlüssel-Wort EXTPGM('PROGNAME') angegeben werden.
    Für externe Prozeduren kann das Schlüssel-Wort EXTPROC() angegeben werden. Wird weder EXTPGM noch EXTPROC angegeben, geht der Compiler davon aus, dass eine Prozedur aufgerufen wird.

    Aber vielleicht solltest Du Dich zuerst einmal ein bisschen mit den ILE-Konzepten und vor allem mit Prototyping beschäftigen.
    Schau Dir mal folgendes Redbook an:
    Who Knew You Could Do That with RPG IV? A Sorcerer’s Guide to System Access and More

    Zum Thema Prototyping kannst Du Dir auch folgenden Link anschauen:
    Prototyping

    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
    Apr 2004
    Beiträge
    79
    Hallo,

    erst einmal vielen Dank für die schnellen und hilfreichen Tipps.

    Evtl. werden ja auch noch einige andere auf dieses eigentlich simple Problem stossen, darum hier noch eine kurze zusätzliche Erklärung:

    Meine Absicht war lediglich, den Quellcode auf Free-Format umzustellen. Der Aufruf des Programms sollte über eine Befehlszeile/CL o.ä. mit Parameterübergabe erfolgen, also z.B.

    CALL PGM(ABC) PARM('USA')

    Die Lösung meines Problems lautet wie folgt:

    D PRDEF PR extpgm('Dummy')
    D LAND 3

    D PRDEF PI
    D LAND 3


    Wie Birgitta bereits erwähnte, wird durch Angabe des Schlüssel-Wortes EXTPGM im Prototyp erreicht, daß

    a) ein dynamischer call ausgeführt wird
    b) der Compiler dacon ausgeht, daß ein Programm aufgerufen werden soll.


    Beste Grüße
    coolie

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Aus Dokumentatorischen Gründen solltest du statt "Dummy" den richtigen Namen verwenden.
    Die Deklaration kann man nämlich auch in eine COPY-Strecke verlegen und somit in anderen RPG-Programmen verwenden. Diese brauchen dann nur noch den CALLP aufzurufen und das richtige Programm wird gestartet.
    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

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    Zitat Zitat von coolie
    Hallo,

    erst einmal vielen Dank für die schnellen und hilfreichen Tipps.

    Evtl. werden ja auch noch einige andere auf dieses eigentlich simple Problem stossen, darum hier noch eine kurze zusätzliche Erklärung:

    Meine Absicht war lediglich, den Quellcode auf Free-Format umzustellen. Der Aufruf des Programms sollte über eine Befehlszeile/CL o.ä. mit Parameterübergabe erfolgen, also z.B.

    CALL PGM(ABC) PARM('USA')

    Die Lösung meines Problems lautet wie folgt:

    D PRDEF PR extpgm('Dummy')
    D LAND 3

    D PRDEF PI
    D LAND 3


    Wie Birgitta bereits erwähnte, wird durch Angabe des Schlüssel-Wortes EXTPGM im Prototyp erreicht, daß

    a) ein dynamischer call ausgeführt wird
    b) der Compiler dacon ausgeht, daß ein Programm aufgerufen werden soll.


    Beste Grüße
    coolie
    letzteres gilt für die Verwendung des Prototyps beim Aufruf; bei der Implementierung erkennt der Compiler das Procedure Interface des Mains daran, dass selbiges global deklariert ist und sucht den zugehörigen Prototyp nach Namen - hier wird nun der EXTPGM Eintrag erwartet, da ein Main nur per dynamischem Call aufgerufen werden kann.

    mfg

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

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
  •