PDA

View Full Version : Funktion 'SYSTEM' in Ile Cobol aufrufen oder CL-Befehl mit Returncode



Seiten : [1] 2

rebe
15-05-06, 14:58
Hallo,

ich möchte gerne die Funktion SYSTEM aus QC2LE in ILE Cobol aufrufen, einen CL-Befehl übergeben und einen Returncode bekommen. Geht das? Wenn ja, wie ist die Systax? Wenn nicht, wie kann ich einen CL-Befehl aufrufen und einen Returncode bekommen? Vielleicht noch über ein API? Wenn ja, welches könnte ich nehmen?

Danke für Tipps.

Grüße
Reiner

Fuerchau
15-05-06, 17:52
CLP's werden genauso aufgerufen wie andere COBOL-PGM'e:

call "Name" using Variable

pgm parm(&var)
dcl &var *char 10
/* tuwas */
endpgm

Prozeduren ist in COBOL etwas schwieriger, allerdings geht das auch:

process NOMONOCASE <= Namen nicht in Grossbuschstaben

77 Kommando pic x(..).
77 Wert pic s9(9) comp-4.

string "kommando" x"00" delimited by size into Kommando.
call procedure "system" using Kommando returning Wert.

Allerdings kannst du die CPF-Meldung nicht wie in RPG abfangen, daher ist es besser ein CLP aufzurufen.

rebe
16-05-06, 07:37
Danke Herr Fürchau für die Antwort.

Das mit dem allgemeinen Prozeduren- und Funktionenaufruf ist bekannt. Mir ging es darum, die CPF-Meldung im Cobol-Programm abzufangen.

Ok, geht nicht, dann halt über den Umweg eines kleines CL-Programms.

Grüße
Reiner

Fuerchau
16-05-06, 07:41
Das Abfangen von Meldungen geht mittels:

call "Programm" using ...
on overflow ...
end-call

Allerdings kann die Meldung selbst nur per API QMHRCVPM abgefragt werden.

BenderD
18-05-06, 17:47
@Baldur: Wenn man im COBOL Variablen importieren kann, dann sollte das gehen, da gibt es einen Export aus einem Serviceprogramm; falls es geht schau ich mal den Namen nach

mfg

Dieter Bender


CLP's werden genauso aufgerufen wie andere COBOL-PGM'e:

call "Name" using Variable

pgm parm(&var)
dcl &var *char 10
/* tuwas */
endpgm

Prozeduren ist in COBOL etwas schwieriger, allerdings geht das auch:

process NOMONOCASE <= Namen nicht in Grossbuschstaben

77 Kommando pic x(..).
77 Wert pic s9(9) comp-4.

string "kommando" x"00" delimited by size into Kommando.
call procedure "system" using Kommando returning Wert.

Allerdings kannst du die CPF-Meldung nicht wie in RPG abfangen, daher ist es besser ein CLP aufzurufen.

Fuerchau
19-05-06, 07:02
@Dieter
Im- und Export geht auch in COBOL, schließlich ist es ja ILE.

BenderD
19-05-06, 08:03
Hallo,

dann braucht man nur _EXCP_MSGID zu importieren (sieben stellig alfa deklarieren) und beim binden das Binding directory QC2LE mit zu verwenden. In dieser Variable steht dann immer die letzte aufgetretene CPF Message drin, man muss also vor dem Aufruf von system initialisieren und bei Rückgabe von 1 durch system die Variable auslesen.

mfg

Dieter Bender


@Dieter
Im- und Export geht auch in COBOL, schließlich ist es ja ILE.

rebe
19-05-06, 11:07
Hallo Dieter,

wie geht denn Variablen importieren?
Ich kenne nur "copy member of sourcedatei".

Ich kann die Prozedur SYSTEM nicht aufrufen.

IDENTIFICATION DIVISION.
PROGRAM-ID. T4.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 cl-cmd pic x(256).
77 fehler pic s9(9) comp-4.

PROCEDURE DIVISION.
H1.
move "DLYJOB DLY(2)" to cl-cmd
call procedure "SYSTEM" using cl-cmd returning fehler
goback.


Ich wandle das Programm um mit CRTBNDCBL mit Binderverzeichnis QC2LE. Fehlermeldung:

Nachricht . . . : Definition für Symbol 'SYSTEM' nicht gefunden.
Ursache . . . . : Für Referenz SYSTEM in *MODULE Objekt T4 der Bibliothek
QTEMP wurde keine Definition gefunden. Entweder ist die Definition nicht
vorhanden, oder sie gehört nicht zu demselben Datentyp oder derselben
Prozedurart wie die Referenz. Fehlerbeseitigung: Den Befehl CRTPGM
(Programm erstellen) wiederholen, wobei ein Objekt angegeben wird, das eine
Definition für Symbol SYSTEM enthält.

Was mache ich falsch?
Vielen Dank für Hinweise schon mal.

Grüße
Reiner

Fuerchau
19-05-06, 11:27
Siehe oben:

process NOMONOCASE <= Namen nicht in Grossbuschstaben

Der Name der Prozedur ist "system" und nicht "SYSTEM", casesensitive.

rebe
19-05-06, 11:34
"system" klein habe ich probiert.
Macht das Umwandlungsprogramm raus:

* 10 ID: LNC0047 BEW.STUFE 20 FOLGENR. 001400
Nachricht . . . : Programmname '"system"' ist ungültig. Als
'"SYSTEM"' akzeptiert.

Und dann kommt wieder die gleiche Fehlermeldung wie angegeben.

Muß ich da beim Umwandeln noch einen Schalter setzen?

Reiner