-
CEEDOD im Hauptprogramm
Hallo Gemeinde,
habe folgendes Problem:
Ich möchte gerne ein Programm mit 3 Parametern aufrufen (1000A, 5,0, 1A).
Der erste Parameter kann vom aufrufenden Programm kürzer übergeben werden (z.B. nur 50 Stellen).
Nun habe ich versucht mit Hilfe des API´s CEEDOD mir die Länge ermitteln zu lassen.
Leider geht das nicht weil ich hier imme den Fehler "Fehlender Operationsdeskriptor" bekomme.
Definiert habe ich das ganze wie folgt:
Programm:
d MD0910 PR extpgm('MD0910')
d pi_Text 1000A const options(*varsize)
d pi_TextLen 5 0 const
d po_RtnCode 1A
d MD0910 PI opdesc
d pi_Text 1000a const options(*varsize)
d pi_TextLen 5 0 const
d po_RtnCode 1a
CEEDOD:
DCEEDOD pr
D PosNbr 10i 0 Const
D DescTyp 10i 0
D DataTyp 10i 0
D DescInf1 10i 0
D DescInf2 10i 0
D DataLen 10i 0
D FeedBck 12a Options(*Omit)
// API CEEDOD
d eDescTyp s 10i 0 inz
d eDataTyp s 10i 0 inz
d eDescInf1 s 10i 0 inz
d eDescInf2 s 10i 0 inz
d eDataLen s 10i 0 inz
Aufruf dann in FREE
CEEDOD(1:eDescTyp:eDataTyp: eDescInf1:eDescInf2:eDataLen:*Omit);
Lt. IBM kann man bei Angabe von EXTPGM('MD0910') kein OPDESC angeben.
Wie kann ich hier das lösen?
Bzw. was ist hier falsch?
Danke!
-
"opdesc" funktioniert nur bei Prozeduren.
Definiere die Felder doch einfach als "varying".
Durch das "const" erzeugt der Compiler sowieso eine Kopie deiner Variablen vor dem Call.
-
Danke für die Info!
Aber das Problem ist das bei Varying (bzw. generell) wenn ein kürzerer Parameter übergeben wird der Rest des Parameters nur "Müll" enthält (wobei der Müll ja vom System benötigt wird).
Alternativ kann ich nur vom aufrufenden Programm mir die Länge des Parameters als eigenen Parameter mitgeben lassen damit ich dann die richtige Zeichenlänge "herausschneide". Oder?
Thx
-
Falsch!
Wenn du das externe Programm immer nur aus ILERPG mittels Prototyp aufrufst, legt der Compiler eben eine entsprechend große Kopie an, es gibt dann keinen Müll.
Durch "varying" wird eine 2-byte-Längeninformation vorangestellt, die du einfach mit %len() abfragen kannst.
%len() liefert die Länge des Inhaltes bei varying (bzw. DDS-varlen) Feldern, %size() die tatsächliche definierte Größe.
Bei fixed Variablen liefert %len() und %size() die selbe Information.
Beim Aufruf von CLP definierst du eben eine 1002-Byte-Variable und stellst die Länge per %bin(&Ziel 1 2) voran.
-
Ah, OK Danke!
Wieder etwas gelernt ;-)
Werde ich ausprobieren.
Danke!!
-
 Zitat von XMan
Ah, OK Danke!
Wieder etwas gelernt ;-)
Werde ich ausprobieren.
Danke!!
Hi,
zum Beispiel kann man so die Länge feststellen:
PHP-Code:
/free
values = %char(%len(%size(In_Group))) ;
/end-free
Gruss
Michael
-
 Zitat von XMan
Ah, OK Danke!
Wieder etwas gelernt ;-)
Werde ich ausprobieren.
Danke!!
Hi,
zum Beispiel kann man so die Länge feststellen:
PHP-Code:
/free
values = %char(%len(%size(In_Group))) ;
/end-free
Wobei
%len die Feldgröße 1000 angibt
%size die tatsächliche Länge des Inhalts
Gruss
Michael
-
mk, mal davon abgesehen, dass die Antwort eine relative Themenverfehlung ist, was tut denn Dein Code Deiner Meinung nach genau und wann sollte man das brauchen können???
Denn wenn "In_Group" 1000 Bytes lang ist, und es steht zum Beispiel "Ich sollte den Dingen die Zeit schenken, die sie verdienen." in dieser Variable, liefert Dein Code das Ergebnis "4".
-
Hi,
sorry, ich schäme mich.
Hatte das einfach so runtergetippt.
Um die Länge eines Feldes festzustellen kann man aber folgendes
verwenden.
PHP-Code:
values = %char(%len(%trim( In_Group)))
Gruß
Michael
-
Wofür dann noch die Umwandlung in CHAR ?
Zu beachten ist, dass %trim() auch Leerzeichen am Anfang entfernt!
-
Mal davon abgesehen das die Leerzeichen weg sind hilft das ja auch nicht weiter. Denn wenn der übergebene Parameter 1000 Zeichen hat aber vom aufrufenden Pgm nur 100 bekommt, so steht auch dieser "Datenmüll" drinnen.
Somit ist auch die Länge ein falsches (%len(%trim(...))) Ergebnis.
Mein Problem ist ja das ich dieses Pgm aus verschiedensten Anwendungen (CL, RPGIII, RPG ILE, ...) aufrufen können muss.
Da ich mir das Leben aber selber nicht schwerer machen wollte, habe ich nun einen zusätzlichen Parameter mitgegeben der mir die Länge des Text-Parameters mit gibt. Somit kann ich dann richtig reagieren.
Dennoch Danke ich Euch für die Anregungen!
LG und schönen Abend!
Similar Threads
-
By HeymannJ in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 09-11-12, 11:39
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