PDA

View Full Version : CPF-Fehlermeldung aus API in MSGSFL



andy w
11-12-02, 11:55
Hallo!

Ich habe ein Problem bei einem Dialogprogramm.

Innerhalb des Dialogprogramms (ILE-RPG IV) wird eine Subdatei gefüllt, unter anderem mit Programmnamen und den dazugehörigen Objektbeschreibungen.

Die Beschreibungen werden direkt von der AS/400 geholt. Dies geschieht mit dem API QUSROBJD.
Das funktioniert auch, aber wenn die Objektbeschreibung für ein Programm geholt werden soll, welches nicht mehr existent ist, wird die CPF-Fehlermeldung unten in der MSGSFL ausgegeben.

Dies würde ich gerne vermeiden, da eine eigene Fehlermeldung ausgegeben werden soll bzw. in der Subfileanzeige garkeine Fehlermeldung.

Innerhalb des RPGs habe ich den Fehler in einem Monitor-Block "aufgefangen", aber die Meldung kommt trotzdem.
Auch das ersetzen von QUSROBJD durch QCMDEXC mit CHKOBJ hat nichts gebracht, die Meldung kommt immer noch (zusätzlich zu der manuell von mir eingestellten).

Ich hoffe, jemand kann mir dabei weiterhelfen...
Ich bin über jede Antwort sehr dankbar...

Viele Grüße
Andy

Fuerchau
11-12-02, 13:21
Die Nachrichten der API's werden ins Joblog geschrieben. Die MSGSFL liest selbständig diese Nachrichten aus. Mit dem Schlüsselwort SFLMSGKEY (Feld mit char 4) kannst du den 1. Nachrichten-Key festlegen ab dem die Nachrichten ausgegeben werden sollen.
Wenn die Nachrichten NICHT gebraucht werden, dann entferne sie mit RCVMSG ... RMV(*YES) bzw. dem entsprechenden API.

horschma
11-12-02, 14:17
Hallo,
wenn du beim API Aufruf die optionale Fehlerstruktur übergibst, werden die *ESC oder *DIAG Messages nicht mehr gesendet.

Thomas

andy w
11-12-02, 14:42
Danke für Eure schnellen Antworten!

Zu Fehler-DS bei API: Genau so kannte ich auch die Fehlerbehandlung bei APIs. Innerhalb der Fehlerdatenstruktur war dann auch der entsprechende CPF-Code angegeben.

Bei dem Aufruf von QUSROBJD ist das nicht so.
Bei angegebener Fehler-DS "hängt" sich das Programm auf, wenn CPF9811 erfüllt ist (Programm nicht gefunden). Die Fehler-DS ist nicht gefüllt.

Zwar waren meine bisherigen API-Programme nicht Dialog, aber die DS wurde bei API Fehlern immer gefüllt.

Hat jemand eine Idee was der Haken sein könnte?

Vielen Dank im Vorraus!

horschma
11-12-02, 15:55
Hm,
ich hab mir mal meine (produktiv) laufenden C-Programme angesehen, du hast recht, da ist was oberfaul.

Das Feld Bytes_Available der Fehler DS wird zwar auf > 8 gesetzt, aber die MSGID der Exception fehlt in der DS.

Sieht nach einem PMR aus

Thomas

andy w
12-12-02, 08:19
Hallo!

Danke für die schnelle Antwort.

Aber was ist denn ein PMR?

Außerdem hätte ich noch eine Frage wegen der Fehler-DS:
Wie kann ich denn die Behandlung von Nachrichten vom RPG fernhalten, wenn ich QCMDEXC verwende?
Dort "darf" ich ja keine Fehler-DS angegeben.
Und bei QCMDEXC wird auch in die MSGSFL geschrieben...

Viele Grüße

Fuerchau
12-12-02, 20:22
1. den CALL 'QCMDEXC' mit Bezugszahl abfangen
2. Wenn Bezugszahl an ist, mmit API QMHRCVMSG (oder so ähnlich) die Fehlermeldungen aus dem Joblog entfernen.

Andere Variante direkt in CLP:

chkobj .....
monmsg cpf9800 exec(do)
rcvmsg .... type(*last) rmv(*yes)
enddo