[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2001
    Beiträge
    163

    Angry "Schrott" in CL-Parameter

    Hallo zusammen,

    kurz vor dem Fest noch eine komische Sache.
    Ich habe 1 RPG-PGM und 2 CL-PGMs. mit folgenden Parametern :

    CL-PGM1
    PGM PARM(&PARTNER &PFAD &FILE)
    DCL VAR(&PARTNER) TYPE(*CHAR) LEN(10)
    DCL VAR(&PFAD) TYPE(*CHAR) LEN(250)
    DCL VAR(&FILE) TYPE(*CHAR) LEN(128)
    SBMJOB CMD(CALL PGM(EDIPMPRCV2) PARM(&PARTNER &PFAD +
    &FILE)) JOB(&JOBNAME) JOBQ(QPGMR)

    CL-PGM2
    PGM PARM(&PARTNER &PFAD &FILE)
    DCL VAR(&PARTNER) TYPE(*CHAR) LEN(10)
    DCL VAR(&PFAD) TYPE(*CHAR) LEN(250)
    DCL VAR(&FILE) TYPE(*CHAR) LEN(128)


    Wenn ich mir nun den Inhalt der Variablen Pfad und File ansehe,
    so finde ich dort ausser dem erwarteten Inhalt auch noch jede menge "Schrott". In Variable Partner passiert das nicht, auch nicht, wenn nicht die gesamte Feldlänge benötigt wird.
    Verkürze ich in CL-PGM2 die Länge der Variablen auf 32 Byte ist ebenfalls alles OK.

    Ich rufe aus dem RPG das CL-PGM1 auf, das ist noch OK. Dann der SBMJOB und in den Variablen des PGM2 steht Datenmüll :-((

    Hat jemand dazu eine Erklärung für mich ?

    Vorab schon einmal vielen Dank

    Peter

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.370
    Der SBMJOB ist hier das Problem !!

    Da dem Kommando CALL keine Paramter per Adresse sondern nur per Wert mitgegeben werden können schlägt hier eine gemeine Falle zu:

    Zeichenketten werden in ihrer Länge, jedoch mit max. 32 Stellen übergeben, d.h. Leerzeichen am Ende werden abgeschnitten, Zahlen immer als 15.5 !

    Lösung:

    Setze den CALL per CHGVAR und *CAT zusammen, so dass die Original-Längen erhalten bleiben !

    chgvar mycall ('CALL PGM(EDIPMPRCV2) PARM(''' *cat &PARM *CAT ''' ''' *CAT &PFAD *CAT ''' ''' *CAT &FILE *CAT ''')')

    Sieht etwas kompliziert aus, aber die Hochkomma sind wichtig, damit die Leerzeichen erhalten bleiben.

    Alternativ und einfacher wäre da die Benutzung der LDA:

    PGM1:
    chgvar %sst(*lda 1 10) &partner
    chgvar %sst(*lda 11 250) &pfad
    chgvar %sst(*lda 261 128) &file

    PGM2:
    chgvar &partner %sst(*lda 1 10)
    :

    Die LDA wird beim SBMJOB immer mitkopiert, so dass man dort Daten übergeben kann (max. 1KB).

    Sollte diese belegt sein, kann man sich diese ja vorher retten und hinterher wiederherstellen.
    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
    Mar 2001
    Beiträge
    163
    Hallo Fürchau,

    also erst einmal schönen Dank für die schnelle Hilfe.
    Die Idee mit der LDS scheint mir da sehr Sinnvoll.
    Ich werde das sofort mal ausprobieren und anschliessend ggf Vollzug melden.

    Gruß

    Peter

  4. #4
    Registriert seit
    Mar 2001
    Beiträge
    163
    Hallo Fürchau,

    hier noch die versprochene Vollzugsmeldung.

    "klappt prima" Das mit der übergebenen LDA war mir nicht bekannt, man lernt halt nie aus ....

    Gruß und ggf schon schöne Feiertage...

    Peter

Similar Threads

  1. Dynamisches SQL in einem CL erstellen
    By Sony in forum IBM i Hauptforum
    Antworten: 27
    Letzter Beitrag: 20-07-09, 21:48
  2. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  3. Übergabeparameter im CL Script
    By bo1 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 23-06-06, 15:00
  4. Parameter von CL nach ILECOBOL
    By Frank.Sobanek in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 15-03-06, 11:27
  5. CMD Parameter im CL Programm
    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
  •