[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2006
    Beiträge
    78

    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!

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    "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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Feb 2006
    Beiträge
    78
    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

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Feb 2006
    Beiträge
    78
    Ah, OK Danke!

    Wieder etwas gelernt ;-)

    Werde ich ausprobieren.

    Danke!!

  6. #6
    Registriert seit
    Jan 2001
    Beiträge
    850
    Zitat Zitat von XMan Beitrag anzeigen
    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

  7. #7
    Registriert seit
    Jan 2001
    Beiträge
    850
    Zitat Zitat von XMan Beitrag anzeigen
    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

  8. #8
    Registriert seit
    Nov 2012
    Beiträge
    51

    Thumbs down

    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".

  9. #9
    Registriert seit
    Jan 2001
    Beiträge
    850
    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(%trimIn_Group))) 
    Gruß
    Michael

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wofür dann noch die Umwandlung in CHAR ?

    Zu beachten ist, dass %trim() auch Leerzeichen am Anfang entfernt!
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  11. #11
    Registriert seit
    Feb 2006
    Beiträge
    78
    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

  1. Fehler CEE0502 bei der Ausführung des API CEEDOD
    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
  •