-
Alternative zu *ENTRY PLIST
Hallo zusammen,
ich arbeite erst seit kurzem Mit richtigen ILE Programmen (vorher haben wir zwar ILE Programme gehabt, jedoch nur mit RPGIII befehlen).
Also:
Ich habe ein Programm welches ein Subfile anzeigt.
Diese Informationen sollen einigen anderen Programmen zugänglich gemacht werden, sprich: Die sollen dieses Programm aufrufen.
Das Subfileprogramm ist ein RPGLE.
Wie übergebe ich die Paramter mit RPG/III Programmen?
Eigentlich will ich keine *ENTRY PLIST mehr haben sondern lieber die PI Variante nutzen (Gefällt mir besser, alle Parameter lassen sich gut nachschauen).
Solange wie das aufrufende Programm ein RPGLE Programm ist kann ich das ja entsprechend definieren, aber was mache ich mit RPG Programmen?
Bleibt mir wirklich nur der CVTRPGSRC um dann das PI nutzen zu können, oder gibt es da einen Trick?
Danke euch schonmal
Rince
-
-
Wow, das nenn ich mal schnelle Hilfe.
Schade irgendwie, dann muss ich weiterhin mit PLIST arbeiten..
Rince
-
Ersatz für *Entry PList
Hallo Rince,
Habe ich das richtig verstanden, Du willst in Deinen alten RPGIII Programmen die *Entry-PLIST durch Procedure Interface ersetzen.
Wie willst Du das überhaupt machen? D-Bestimmungen gibt es in RPGIII nicht!
Was soll das bringen? Neuprogrammierungen sollten in RPGIV gemacht werden und alte Programme sollten unverändert bleiben.
Fazit ist:
RPGIII ist und bleibt tot!!!
Nur RPGIV wird weiterentwickelt.
Du wirst also schon den Convert machen müssen.
Wenn RPGIII-Programme aus ILE aufgerufen werden sollen,
kannst Du für die RPGIII Programme Prototypen definieren und anschliessend über CALLP aufrufen.
Das Schlüssel-Wort EXTPGM muss natürlich definiert werden.
Birgitta
-
Hy Brigitta,
da scheinst du mich falsch verstanden zu haben.
Ich stimme zu: RPGIII ist tot.
Klar ist RPGIV viel toller, daher möchte ich ja ungerne in den RPG/IV Programmen wieder mit *ENTRY PLIST arbeiten, sondern die schöne Art der PI benutzen.
Nur leider habe ich noch alte Programme die dieses Neue Programm aufrufen sollen (mit Parametern)
Da ich die alten Programme nicht einfach umsetzen will (mit CVTRPGSRC) suche ich nach einem Weg beides zu schaffen.
Alte RPG/III Programme behalten,
neue RPG/IV Programme ohne PLIST schreiben (sonst muss ich ja aus anderen RPG/IV Programmen auch die PLIST nutzen *schauder*
Ich überlege nur ob ich das vielleicht mit Hilfe eines CLLE schaffen kann, nur habe ich da noch nie eine PI definiert.
Weiss da vielleicht jemand wie das geht?
-
In CLLE heißt das dann CALLPRC !
Allerdings gilt das nur für gebundene Module, alles andere muss wie immer per CALL aufgerufen werden.
-
Hallo,
zu der Diskussion welches RPG töter ist, will ich mich mal zurückhalten, das bringt meist Ärger :-)
Prototypen, PI, *ENTRY PLIST sind reine Compiler Anweisungen, im fertigen Programm ist das relativ schnurz. Man kann also lustig rpg4 mit PI für das Main programmieren und ohne Prototyp mit CALL PARM aufrufen, man verliert dabei lediglich die Prüfung zur Compiletime. Probleme mit der Rückwärtskompatibilität gibt es nur, wenn man für die Schnittstellen parameter Erweiterungen benutzt, wie zum Beispiel Feldtypen, die beim Altsteinzeit RPG nicht erlaubt waren.
mfg
Dieter Bender
-
Herzlichen Dank
Wenn ich das *NOPASS weglasse klappt es.
und dann frage ich einfach mit QPARMS ab ob der PArameter da ist oder nicht.
Auf CONST muss ich dann leider verzichten, aber das ist ein geringes Problem.
Ich muss wirklich sagen, dieses Forum gefällt mir vor allem wegen der schnellen und kompetenten Antwortzeit.
DANKE
Rince
-
Hallo,
die passing options, wie *NOPASS fallen auch unter die Inkompatibilitäten, weil neu. CONST ist immer noch verwendbar, da wird eigentlich nur im aufgerufenen programm code reingesetzt, der dafür sorgt, dass die Referenz read only ist und selbiges ist ja ILE. Im aurufenden Programm ist das eigentlich Banane, da bekommt der Programmierer nur die Sicherheit, dass zumindest bei konsistenten Prototypen, die übergebenen Parameter nicht vermüllt zurück kommen.
mfg
Dieter Bender
-
Ob ein Parameter eine gültige Adresse enthält, schließlich kann man auch NULL-Adressen übergeben (z.B. optionale Parameter bei CMD's mit Rückgabefeldern e.g. RTVJOBA, und die können auch zwischndrin auftauchen), muss man explizit erfragen:
if %addr(parmx) <> *NULL
:
endif
Und da muss ich Dieter Recht geben, CONST dient nur dem Compiler.
Wenn ich sicher sein will, dass ich meinen Übergabewert nicht geändert haben will, muss ich VALUE definieren. In diesem Fall wird dem gerufenen Programm immer eine Kopie übergeben und das kann dann tun und lassen was es will (egal ob CONST oder nicht).
Übrigens: VALUE führt ggf. auch eine TYP-Konvertierung durch, soweit der Compiler das halt kann und ich bin nicht an gleichartige Definitionen gebunden.
-
Hallo,
eh' da was durchgerät einander:
VALUE geht leider nur für gebundene Aufufe, die as400 kann auf OS Ebene nur call by Reference.
das mit der Abfrage auf Null mit der BIF geht wie obiges nur in ILE
CONST erzeugt bei Verwendung im aufrufenden Programm auch Code mit Zwischenvariablen und Konvertierung und ermöglicht damit Literale, geht aber auch nur in ILE im aufrufenden Programm.
Über die Commands und deren Kontrolle über die Parameter, könnte man einen ganzen Artikel schreiben (mach' ich vielleicht mal)
mfg
Dieter Bender
-
VALUE
VALUE kann für den Aufruf zwischen Prozeduren benutzt werden, nicht für den Aufruf von Programmen.
Bei VALUE wird der komplette String übergeben und keine Adresse.
Im aufgerufenen Programm kann ein mit VALUE übergebener Parameter beliebig geändert werden.
RPGIII kennt nur Parameterübergabe by Reference (Adressen).
Die Parameter-Übergabe mit CONST erfolgt ebenfalls über Adresse. Bei abweichendem Feldtyp wird jedoch ein temporäres Feld mit der erwarteten Definition erstellt und diese Adresse an die rufende Prozedur weitergegeben.
Deshalb kann CONST auch für den Aufruf von RPGIII-Programmen verwendet werden.
Wird ein Prototyp mit Parametern mit CONST-Definition eingebunden, kann in der aufgerufenen Prozedur dieses Feld nicht geändert werden. (Fehler bei der Compilierung)
Durch diese Erklärung müsste auch klar sein, dass CONST und VALUE nicht für das gleiche Parameter-Feld verwendet werden können.
Birgitta
Similar Threads
-
By andreas.lundschien in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 27-09-06, 10:56
-
By usafft in forum NEWSboard Linux
Antworten: 6
Letzter Beitrag: 09-12-05, 11:10
-
By linguin in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 03-11-05, 17:20
-
By tomikra in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 10-05-04, 14:21
-
By coolie in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 22-04-04, 11:53
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks