Anmelden

View Full Version : Frage zu RPG: Aufruf RPG-Programm mit Parametern



Seiten : [1] 2

hs
06-09-01, 14:59
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

hgunz
06-09-01, 15:37
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.]

hs
06-09-01, 15:56
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

HoScHiE
06-09-01, 16:26
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

hs
06-09-01, 18:08
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.

hgunz
07-09-01, 07:41
Frage?
Bei welchem Statement kommt der Dezimaldatenfehler?
Die Fehlermeldung beinhaltet eine Anweisungsnummer, die in der Umwandlungsliste wieder gefunden werden kann.

K_Tippi
07-09-01, 08:29
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.]

rolf
07-09-01, 08:37
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

hs
07-09-01, 09:57
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

Zehetner
08-09-01, 19:52
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