Anmelden

View Full Version : Fehler im MOVE Befehl prüfen (RPG)



Domeus
03-05-22, 07:29
Hallo zusammen,

ich habe in einem RPG folgenden Code:



IF FehlerSW = 'J';
cmd = 'MOVE OBJ(''' + %trim(xmldatei_Name) + ''') '
+ 'TODIR(''' + %trim(pfad) + '/Fault'')';
ELSE;
cmd = 'MOVE OBJ(''' + %trim(xmldatei_Name) + ''') '
+ 'TODIR(''' + %trim(pfad) + '/Archiv'')';
ENDIF;
monitor;
qcmdexc(cmd:%size(cmd));
on-error;
//* Hier wird eine Fehleremail versendet
endmon;


Diese Move Befehle funktionieren zu 99% ohne Probleme. Ab und zu aber wird eben diese Fehleremail versendet. Heisst also der Monitor hat einen Fehler abgefangen. Trotzdem wurde aber die Datei mit dem MOVE Befehl verschoben und es sieht alles ganz normal aus. Wie kann ich nun herausfinden wieso hier der on-error auslöst? Gibt es für den MOVE Befehl irgendwelche Fehlercodes die ich abfragen kann o.ä.?

Gruß
Sebastian

camouflage
03-05-22, 07:44
Guckst Du hier ...
https://www.rpgpgm.com/2013/10/capturing-qcmdexc-error-codes.html

Domeus
03-05-22, 08:53
Hallo camouflage,
vielen Dank für Deine schnelle Antwort. Das probiere ich gleich mal aus.

Gruß
Sebastian

camouflage
03-05-22, 09:09
Kleine Anmerkung noch von mir:
Im Beitrag wird unter den Kommentaren auch noch auf die Thematik QCMDEXC vs System, bzw. grundsätzlich der Integration von Commands innerhalb des RPG Codes, eingegangen.
Falls es interessiert.

Fuerchau
03-05-22, 10:27
Bei der C-Funktion System() ist es nur schwieriger an den Fehlercode zu kommen.
System() liefert auch grundsätzlich keinen Error (nur einen Returnwert) ob der Befehl funktioniert hat.
Da ist in der RPG-Welt QCMDEXC schon bequemer;-).

Andreas_Prouza
03-05-22, 10:48
Hallo,

ich verwende schon lange system und kann mir die msgid ganz einfach in eine Variable importieren lassen.
Das passiert automatisch wenn du folgende Deklaration machst:


Dcl-pr system int(10) extproc('system');
cmd pointer value options(*string);
End-pr;

dcl-s ErrMsg char(7) import('_EXCP_MSGID');


lg Andreas

Fuerchau
03-05-22, 12:53
Was glaubst du, was von System() wohl aufgerufen wird?
Ob ich nun dcl-pr system oder dcl-pr QCMDEXC und sds verwende macht ja nicht den großen Unterschied, außer dass ich 2. mit monitor überwachen kann;-).

Andreas_Prouza
04-05-22, 06:40
Mir ist eigentlich egal was in den unteren Ebenen von wem am Ende aufgerufen wird.
Bei system brauch ich keine Längenangabe und kein Monitor.
Ich Prüfe lediglich die MsgId und hab alles was ich brauche. Überwachen kannst du beides, je nachdem welches du nimmst mit einem Monitor oder einem IF.
Ist Geschmackssache, mir gefällt das system API besser :-)

Domeus
04-05-22, 07:53
Wollte mich nur nochmal für die ganze Hilfe bedanken. Hat sehr gut funktioniert.

Gruß
Sebastian