PDA

View Full Version : Aufruf CL aus Programm



malti
25-06-07, 09:58
Hallo,

Ich rufe aus einem Cobolprogramm ein CL auf. Es werden keine Parameter übergeben.
Dieses Programm läuft sporadisch auf Fehler mit der Meldung MCH0802,
Gesamtzahl der übergebenen Parameter stimmt nicht mit der erforderlichen Anzahl überein.

Ein Tipp ???

Gruß Malti

Fuerchau
25-06-07, 10:02
Mach mal ein DSPPGM des aufzurufenden CLP's. Dort siehst du die Anzahl der benötigten Parameter.

Ansonsten würde ich beim Auftreten des Fehlers die LIBL prüfen.
Vielleicht existert ja noch eine andere Version (wrkpgm *all/mypgm).

Bernd Wiezroek
25-06-07, 12:53
Ich hatte so eine Meldung als ich ein RPG ohne die notwendigen Parameter aufgerufen hab.

Erst wenn versucht wurde vom Hauptprogramm ein weiteres Programm auf zu rufen das auf die übergebenen Parameter Bezug nahm kam der beschriebene Parameterfehler.

Daher könnte der Fehler schon im ersten Programmaufruf liegen.

Fuerchau
25-06-07, 16:50
Aufrufe von CLP's mit falscher Parameteranzahl werden direkt beim CALL abgelehnt (siehe DSPPGM, Anzahl Parameter N - N).

Bei RPG/COBOL werden die Parameter mit "0 - N" ausgewiesen, so dass tatsächlich erst beim Zugriff der MCH-Fehler auftritt.

malti
26-06-07, 07:22
Danke für die Antworten,

wir haben das alles vorher schon geprüft, das Problem war, dass dieser Fehler bei 10 Läufen ca. 1 mal auftrat.
Wir übergeben jetzt einen Scheinparameter, in der Hoffung, dass es dann nicht mehr auftritt.

Gruß Malti

Fuerchau
26-06-07, 12:04
Wenn der Aufruf mit einem Scheinparameter klappt, dann muss an der Definition des aufgerufenen Programmes irgendwas nicht stimmen.

a) CLP
CLP's können nur mit der definierten Anzahl Parameter aufgerufen werden !
CALL 'CLPPGM' USING ...

b) CLE-Prozeduren
Hier bestimmt die Prozedur selber, wie viele Parameter tatsächlich verwendet werden, da diese leider mit 0-255 Parametern definiert werden.
CALL PROCEDURE 'MYPRC' USING ... RETURNING ...

c) HLL-Programme (ILE/RPG, ILE/COBOL)
Auch hier gilt, die Anzahl Parameter kann zwischen 0 und N liegen, wobei N die Anzahl der definierten Parameter ist (RPG *ENTRY PLIST, COBOL PROCEDURE DIVISION USING ...)
Hier muss das Programm ggf. die Anzahl der Parameter ermitteln (RPG in SDS).

Wenn also der Aufruf mit dem "Scheinparameter" klappt, dann sind in dem Programm auch Parameter definiert, die anscheinend unter bestimmten Bedingungen dann auch angesprochen werden (z.B. Fehler-Returncode).

Ein Scheinparameter hilft da nicht wirklich, da man ja Typ und Ausprägung mit der Call-Schnittstelle synchronisieren muss.

PS:
Vielleicht ruft ja das CLP manchmal ein weiteres Programm auf, dessen Schnittstelle sich inzwischen geändert hat !

BenderD
26-06-07, 12:13
@Baldur: RPG zumindest ist es als echte Huddel Programmiersprache völlig Wurscht wieviele Parameter übergeben werden, N kann auch größer als die deklarierte Anzahl Parameter sein.




c) HLL-Programme (ILE/RPG, ILE/COBOL)
Auch hier gilt, die Anzahl Parameter kann zwischen 0 und N liegen, wobei N die Anzahl der definierten Parameter ist (RPG *ENTRY PLIST, COBOL PROCEDURE DIVISION USING ...)

Fuerchau
26-06-07, 12:29
Dem muss ich etwas wiederversprechen:

ILERPG akzeptiert 0 - 255 (Das CMD-CALL schafft aber nur 32) und 255 ist sowieso das systemweite Maximum.

OPMRPG erlaubt nicht mehr als N Parameter, weniger bis 0 sind durchaus erlaubt.

BenderD
26-06-07, 13:20
stimmt, da hat mich meine Erinnerung getäuscht (deshalb habe ich auch meine Validity Checker in RPG geschrieben und bis 255 mit dummy Parametern aufgefüllt...)


Dem muss ich etwas wiederversprechen:

ILERPG akzeptiert 0 - 255 (Das CMD-CALL schafft aber nur 32) und 255 ist sowieso das systemweite Maximum.

OPMRPG erlaubt nicht mehr als N Parameter, weniger bis 0 sind durchaus erlaubt.

Marimari1009
29-06-07, 12:00
Hallo Malti,

hast Du schonmal einen RTVCLSRC des gerufenen Programms versucht ?

Klaus