-
CMD / CL / RTNVAL(*YES)
Hallo zusammen.
Vielleicht könnte jemand mir bei den folgenden Problem helfen.
Ich habe ein CL-Pgm, welches ein API aufruft, um bestimmte Informationen zu holen.
Das CL-Pgm hat mehrere Parameter:
- die ersten 5 sind die Eingabe-Parameter
- der Rest sind die Rückgabe-Parameter
Dieses Pgm möchte ich über einen Befehl aufrufen. In der Befehlsdefinition sind die Rückgabefelder mit RTNVAL(*YES) deklariert.
Diesen Befehl nutze ich dann im weiteren CL-Pgm und fülle es entsprechend mit den CL-Variablen.
Das Problem ist, dass ich nicht immer alle Rückgabeparameter benötige. D.h. ich fülle im Befehl z.B. nur die Rückgabeparameter 1, 4 und 6 mit Variablen aus und die anderen bleiben leer. Dadurch wird vom Befehl für die nicht gefüllte Felder "null pointer" an das CL-Pgm übergeben. Das verursacht wiederum einen Fehler MCH3601 sobald ich eine Aktion mit der jeweiligen Variable machen möchte (z.B. CHGVAR).
Hat vielleicht jemand eine Idee wie ich die Übergabe von "null pointer" vermeiden kann bzw. wie ich die CL-Variablen im Pgm überprüfen könnte?
Vielen Dank im Voraus & Gruß
V_P
-
Mit einem MONMSG MCH3601 direkt nach dem jeweiligen CHGVAR sollte das gehen.
-
Wie gesagt, per MONMSG abfangen.
Ansonsten als ILERPG statt CLP aufrufen, dann kann
%ADDR(PARM) = *NULL
geprüft werden.
-
Das mit %ADDR ist genau wonach ich gesucht habe. Klappt wunderbar.
Vielen Dank!
P.S. Die Alternative mit MONMSG war mir schon klar. Ich wollte es aber absichtlich nicht nutzen, da meiner Ansicht nach die Perfomance drunter leidet.
-
Leider bin ich jetzt auf ein anderes Problem gestossen.
Wenn das CL-Pgm eine Fehlernachricht CPFxxxx hat, kann ich das im RPG-Pgm abfangen. Ich kann aber nicht diesen Fehler an das aufrufende Pgm weiterleiten.
Kann man im RPG sowas ähnliches wie SNDPGMMSG machen?
-
Ja, dafür gibts das API QMHSNDPM.
Aber Achtung:
Wenn du ein ESC-Nachricht nach oben gibst musst du die korrekte Ebene berücksichtigen.
Bei ILE ist das nicht so leicht, da noch Ebenen dazwischen liegen. Ausserdem zieht dann ein LR-Schalter nicht, da die Programmausführung vorzeitig abgebrochen wird (z.B. kein Close von Dateien).
Eine saubere Bereinigung ist dann nicht möglich.
Man kann sich aber auch hier mit einem Trick helfen, in dem zuerst ein CLP aufgerufen wird, dieses ruft das ILERPG auf mit zusätzlichen Parametern (z.B. ErrorID, ErrorData).
Da Adressen in diesem Fall transparent durchgereicht werden tritt in diesem Fall auch kein Laufzeitfehler auf wenn NULL-Pointer weitergegeben werden.
Nach Rückkehr kann man dann z.B. RCLRSC/RCLACTGRP oder ähnliches tun bevor dann per SNDPGMMSG die Abbruchnachricht gesendet wird.
Das Gleiche gilt auch für andere Nachrichtenarten.
-
Danke für die Antwort. Werde mal beide Varianten (API / vorgeschaltetes CL) ausprobieren.
Denn probieren geht über's Studieren.
-
Similar Threads
-
By Sony in forum IBM i Hauptforum
Antworten: 27
Letzter Beitrag: 20-07-09, 21:48
-
By schatte in forum NEWSboard Programmierung
Antworten: 19
Letzter Beitrag: 10-01-07, 11:32
-
By ILEMax in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 26-07-06, 17:07
-
By bo1 in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 23-06-06, 15:00
-
By mk in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 25-09-04, 15:48
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks