PDA

View Full Version : V5R3 & QCMDEXC



Freezer
24-11-04, 08:44
Kann mir jemand verraten, welche Änderung im Aufruf der QCMDEXC seit V5R3 gemacht wurden?
Alle alten Programme mit diesem Aufruf geben "Fehler im Befehl QCMDEXC".

Danke für die Antworten,

Michael.

Fuerchau
24-11-04, 08:51
Schau mal ins Joblog ! Da müssen noch weitere Meldungen stehen, was an dem jeweiligen Befehl falsch ist.

Robi
25-11-04, 15:16
Hi,
wenn das mit V5R3 zu tun hat, würd mich das sehr interessieren
Gruß
Robi

Freezer
26-11-04, 07:50
wenn ich den casus knaxus finde, werde ich die lösung bekannt geben.

Fuerchau
26-11-04, 12:49
Der aufgetretene Fehler müsste im Joblog direkt vor der Meldung "Fehler im Befehl" stehen. Dieser würde mich nun mal interessieren.

Ich bezweifle, dass IBM irgendwas am QCMDEXC geändert hat.

Häufigste Ursache ist eine eigene System-Lib vor QSYS in der geänderte CMD's stehen. Diese sind natürlich dem neuen Release wieder zu entnehmen und dann anzupassen (Default-Werte).

Freezer
02-12-04, 11:17
... liegt nicht am V5R3, ich bin eher zu blöde, in ILE dem QCMDEXC die richtigen Parameter zu übergeben. Die anderen Beiträgen zum Thema helfen mir nicht wirklich weiter.
Wie muss die Befehlslänge aussehen??
Will testweise nur ein CHGCURLIB machen, aber ...
Ursache . . . . : Im zweiten Parameter, der an QCMDEXC oder QCMDCHK gesendet
wurde, wurde eine ungültige Länge angegeben.

CHGCURLIB CURLIB(sms)
Befehlslänge ist 21 und das Feld mit 15,5 definiert. Oder muss die Befehlslänge mit der Länge des Befehls incl. Leerzeichen übereinstimmen?

sim
02-12-04, 11:42
äh, wenn ich dich richtig verstehe meinst du den Aufruf vom qcmdexc, oder ?

z.Bsp so....

d qcmdexc pr extpgm('QCMDEXC')
d parm1 10000a
d parm2 15p 5

..
..
d cmdtxt s 10000a inz
d cmdlen s 15p 5 inz(%size(cmdtxt))


callp(e) qcmdexc (cmdtxt:cmdlen);

geht auch mit dem api: system

B.Hauser
02-12-04, 12:56
Ich würde den Prototyp wie folgt definieren.

Die maximale Länge, die der Command (Parameter 1) haben kann beträgt 32702 Byte. Und dann gibt es noch einen dritten, optionalen Parameter.

Da alles Input-Parameter sind, können sie mit dem Schlüssel-Wort CONST definiert werden. Damit können abweichende Feldlängen, Konstanten und Literale als Parameter übergeben werden. Beim Aufruf werden temporäre Felder mit den erwarteten Feld-Definitionen erstellt und die Adresse dieser Felder an das aufgerufene Programm übergeben.



D QCMDEXC PR ExtPgm('QCMDEXC')
D P$Cmd 32702A const options(*VARSIZE)
D P$CmdLen 15P 5 const

D P$IGC 3A const options(*NoPass)

D Cmd S 256 varying
*******************************************
/Free
Cmd = 'CHGCURLIB CURLIB(SMS)';
QCmdExc(Cmd: %Len(Cmd));
*InLR = *On;
/End-Free


Das API system hat den Vorteil, dass die Feldlänge nicht angegeben werden muss.
Dafür kann man im Fehlerfall allenfalls an die Message-Id, jedoch nicht an die variablen Message-Texte oder den aufbereiteten Message-Text heran kommen.

Bei der Verwendung von QCMDEXC erhält man den Message-Text in der Programm-Status-Datenstruktur auf Stelle 90-170 und die Message-Id auf Stelle 40-46.

Birgitta

Freezer
02-12-04, 13:38
..., jetzt klappt es. Dass gibt der Sache einen ganz neuen und interessanten Blickwinkel.