-
Ungültige Zeichen im Übergabeparamter bei CL
Hallo AS400-Experten,
ich brauche mal eure Unterstützung, weil ich mit meinem Latein am Ende bin:
Ich habe ein CL, dem ich 5 Parameter übergebe.
PGM PARM(&LIB &PF &DATEI &EMAIL &NACHRICHT)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DCL VAR(&PF) TYPE(*CHAR) LEN(10)
DCL VAR(&DATEI) TYPE(*CHAR) LEN(10)
DCL VAR(&EMAIL) TYPE(*CHAR) LEN(32)
DCL VAR(&NACHRICHT) TYPE(*CHAR) LEN(64)
Dieses CL rufe ich wie folgt aus einem anderen CL auf:
CALL MEINPG('MEINELIB' &MEINDAT 'DATNAM.XLS' &EMAIL 'Das ist der Betreff der Email')
%MEINDAT ist als char(10) und &EMAIL asl Char(32) definiert.
Inhalt sind eine AS400-Tabelle (max 10 zeichen) und eine Emailadresse (max. 32 Zeichen)
Das Problem ist jetzt, das im Programm MEINPG der Text 'Das ist der Betreff der Email' mit nicht darstellbaren Zeichen am Ende ankommt. D.h. es werden einfach scheinbar beliebige Zeichen hinten mit übergeben.
Scheinbar sind diese Zeichen jedesmal anders, je nachdem, welcher Text übergeben wird bzw. wie lange dieser ist.
Eine weitere Verarbeitung (SQL Insert in eine Logdatei) funktioniert dann nicht mehr.
Woran liegt das bzw. was mache ich falsch?
Vielen Dank für eure Antworten
HS
-
CLs (und nicht nur die) übergeben Literale per Reference (= Pointer) und ein AS/400 Pointer weiß nicht auf was er da zeigt, was bei der Übergabe von Literalen Nebeneffekte haben kann. Mit anderen Worten: weise 'Das ist der Betreff einer eMail' einer Variablen zu und übergebe diese als Parameter.
D*B
Zitat von hs
Hallo AS400-Experten,
ich brauche mal eure Unterstützung, weil ich mit meinem Latein am Ende bin:
Ich habe ein CL, dem ich 5 Parameter übergebe.
PGM PARM(&LIB &PF &DATEI &EMAIL &NACHRICHT)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DCL VAR(&PF) TYPE(*CHAR) LEN(10)
DCL VAR(&DATEI) TYPE(*CHAR) LEN(10)
DCL VAR(&EMAIL) TYPE(*CHAR) LEN(32)
DCL VAR(&NACHRICHT) TYPE(*CHAR) LEN(64)
Dieses CL rufe ich wie folgt aus einem anderen CL auf:
CALL MEINPG('MEINELIB' &MEINDAT 'DATNAM.XLS' &EMAIL 'Das ist der Betreff der Email')
%MEINDAT ist als char(10) und &EMAIL asl Char(32) definiert.
Inhalt sind eine AS400-Tabelle (max 10 zeichen) und eine Emailadresse (max. 32 Zeichen)
Das Problem ist jetzt, das im Programm MEINPG der Text 'Das ist der Betreff der Email' mit nicht darstellbaren Zeichen am Ende ankommt. D.h. es werden einfach scheinbar beliebige Zeichen hinten mit übergeben.
Scheinbar sind diese Zeichen jedesmal anders, je nachdem, welcher Text übergeben wird bzw. wie lange dieser ist.
Eine weitere Verarbeitung (SQL Insert in eine Logdatei) funktioniert dann nicht mehr.
Woran liegt das bzw. was mache ich falsch?
Vielen Dank für eure Antworten
HS
-
mit anderen Worten...
Es gibt immer Probleme, wenn die Länge der einzelnen Parameter zwischen rufendem und gerufenem Programm nicht übereinstimmen.
Erstelle am besten einen CMD für das gerufene Programm. Das wäre die sauberste Lösung.
Gruß,
KM
-
Danke für eure Antworten.
Habe das Problem verstanden, wenn ich den Text erst in eine Variable schreibe, funktionierts.
Werde es aber beser in ein CMD ändern.
Gruß
HS
-
Solange Du das Programm aus einem anderen CL/RPG oder was auch immer Programm aufrufst, macht das Umladen in eine Variable Sinn. In diesem Fall ist ein zusätzlicher Command nicht erforderlich.
Das Erstellen eines Commands ist dann sinnvoll, wenn das Programm von einer Befehlszeile oder einem Menü heraus mit Parameter aufgerufen oder submittet werden soll. Der Command sorgt dafür, dass die Parameter korrekt übergeben werden.
Werden CL-Programme direkt aufgerufen, werden numerische Parameter mit einer Definition von 15P 5 angenommen und alphanumerische Felder mit 32A. Ist Dein Parameter kürzer, wird der folgende Speicherbereich übernommen.
Birgitta
-
Zu diesem Thema hatten wir schon verschiedene Beiträge.
Beim CALL-Kommando werden Alpha-Zeichen in der angegebenen Länge, mindestens jedoch 32 Zeichen übergeben.
Erwartest du längere Argumente musst du entsprechend viele Leerzeichen anhängen.
Das Programm bekommt, wie Dieter schon sagt, nur eine Adresse auf den Wert.
Ist deine Variable länger definiert, greifst du eben auf irgendwas dahinter zu.
Bei CMD's wird automatisch die erwartete Länge reserviert (Ausnahme: variabel lange Felder mit Längeninformation), bei direktem Call mit Variable, reservierst du ja den Speicher bereits selber, was auch manchmal zu den selben Effekten führen kann.
-
Das Problem tritt jedoch nur beim letzten Parameter auf.
Bei den ersten 4 funktionierts einwandfrei.
Da ich keine große Lust habe, alle Programme mit Call auf dieses CL zu ändern:
Könnte ich einen 6. Parameter optional in das CL MEINPG einfügen?
Dann müsste ich die aufrufenden Programme nicht ändern?
-
Nein, das geht leider nicht.
CLP kennt keine optionalen Parameter.
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 Christian.Hesse in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 04-08-06, 10:04
-
By bo1 in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 23-06-06, 15:00
-
By becama in forum IBM i Hauptforum
Antworten: 12
Letzter Beitrag: 11-08-05, 15:05
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