View Full Version : Frage zu RPG: Aufruf RPG-Programm mit Parametern
Ich kenne mich leider in RPG nicht aus und habe deshalb eine Frage an euch RPG - Programmierer:
Ich habe untenstehendes kleinen RPG, was mir ein UPDATE macht.
Ich möchte das Prog jetzt so abändern, dass KTRMGR = '99' und KTRISM = 4711 variabel sind, indem diese durch Übergabeparameter ersetzt werden.
D.h. ich starte das Programm wie folgt:
call MEINPROG '99' 4711
Bestimmt nicht schwer für einen RPG-Profi, oder?
Danke
HS
FUEBMAS90UF E K DISK
C *LOVAL SETLLUEBFMT01
C READ UEBFMT01 49
C *IN49 DOWEQ*OFF
C KTRMGR IFEQ '99'
C MOVE 4711 KTRISM
C UPDATUEBFMT01
C ENDIF
C READ UEBFMT01 49
C ENDDO
C MOVE *ON *INLR
Am Beginn der C-Bestimmungen (oder in der *INZSR-Unterroutine) ist die Parameterliste zu definieren. Z.B.:
C *ENTRY PLIST
C PARM KTRMGR
C PARM KTRISM
Gruß
Hanspeter Gunz
PS:
Leider ist nicht ersichtlich, wo die Werte stehen.
*ENTRY unter Faktor1
PLIST und PARM unter OPCODE
Die Feldnamen unter Ergebnisfeld
[Dieser Beitrag wurde von hgunz am 06. September 2001 editiert.]
Hallo Hanspeter,
vielen Dank für die schnelle Antwort.
Leider erhalte ich beim wandeln die Fehlermeldung:
QRG7030 Bewertung: 30 Anzahl: 1
Nachricht . . . : Das Feld oder die Bezugszahl ist nicht
definiert.
Mein Programm sieht jetzt so aus:
FUEBMAS90UF E K DISK
C *ENTRY PLIST
C PARM MGR
C *LOVAL SETLLUEBFMT01
C READ UEBFMT01 49
C *IN49 DOWEQ*OFF
C KTRMGR IFEQ MGR -----------> HIER FEHLER
C MOVE 4711 KTRISM
C UPDATUEBFMT01
C ENDIF
C READ UEBFMT01 49
C ENDDO
C MOVE *ON *INLR
Hallo Peter,
du must jedes Feld das du im Programm benutzt und nicht anderswie definiert ist vorher definieren.
Da du jetzt ein neues Feld "MGR" hast must du sagen wie lang es ist und ob es ein numerisches oder ... Feld ist.
Gib mal einfach die Länge "so wie es aussieht 2,0) ein aber ohne das Kommata.
Am besten du drückst vorher F4 und dann kannst du sehen wo du was eingeben must.
Dann neu umwandeln.
CU,
HoScHiE
Erstmal Danke,
soweit funktionierts mit Parameter 1.
Beim zweiten Parameter klappts jedoch noch nicht.
Ich habe die 2.Variable als 6,0 deklariert.
Wenn ich das Prog aufrufe z.B. mit
CALL MEINPROG '70' 4711, erhalte ich einen Dezimaldatenfehler.
Wat nu?
Danke
HS
PS: Das Feld KTRISM ist gezont, Länge 9.3 - liegts daran?
Anbei nochmals der Code:
FUEBMAS90UF E K DISK
C *ENTRY PLIST
C PARM MGR 002
C PARM ISM 60
C *LOVAL SETLLUEBFMT01
C READ UEBFMT01 49
C *IN49 DOWEQ*OFF
C KTRMGR IFEQ MGR
C KTRNU1 ANDEQ0
C MOVE ISM KTRISM
C UPDATUEBFMT01
u.s.w.
Frage?
Bei welchem Statement kommt der Dezimaldatenfehler?
Die Fehlermeldung beinhaltet eine Anweisungsnummer, die in der Umwandlungsliste wieder gefunden werden kann.
Zahlen werden bei dieser Art des Aufrufs gepackt übergeben. Du solltest also evtl ein CL mit einem Eingabebildschirm "vorschalten" oder den Parameter als Alphafeld übergeben und dann umwandeln.
Gruß Klaus
[Dieser Beitrag wurde von K_Tippi am 07. September 2001 editiert.]
Hallo hs
bei der Uebergabe von Parametern müssen Typ und Länge immer mit der definierten Länge des Parameters übereinstimmen. Also in deinem Fall muss der ersten Parameter 2-stellig numerisch (z.Bsp: '99' oder '02') sein und der 2. Parameter 6-stellig numerisch also z.Bsp: '004711' .
Wenn du nur '4711' übergibst, wird das als '4711 ' interpretiert, wobei die 2 Leerstellen ungültige Zeichen sind.
Ich hoffe es hilft.
Gruss
Rolf
Danke euch allen für Eure Unterstützung.
Es hat jetzt erst geklappt, nachdem ich den zweiten Parameter auch als alphanumerisch deklariert habe.
Verrücktes RPG!
Gruß
HS
Hallo!
Hier noch eine Variante dises Programmes. Vielleicht für Ihre RPG-Zukunft. Mann kann so viel Zeit (Tip- und Testarbeit) ersparen.
F*****************************************
FUEBMAS90 UPE F DISK
C *ENTRY PLIST
C PARM PRMMGR 2
C PARM PRMISM 6
C MOVE PRMMGR NUMMGR 20
C MOVE PRMISM NUMISM 60
C KTRMGR IFEQ NUMMGR
C Z-ADDNUMISM KTRISM
C UPDATUEBFMT01
C END
C****************************************
Also kein SETLL, kein READ, kein SETON LR,
keine Lesen nach Schlüssel. Die Performance ist unschlagbar.
Das lernt man heute leider nicht mehr, ist aber der Grund, warum es die AS/400 noch gibt.
m.f.G
Otto Zehetner