[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Zitat Zitat von camouflage Beitrag anzeigen
    Hallo Baldur,

    klar, blöd ist nur, dass der dcl-pi praktisch nochmals eine Deklaration bewirkt. Heisst, ich kann mich nicht direkt auf die dcl-ds referenzieren. Noch mehr Spass macht's, wenn die Struktur noch extern referenziert ist. :-)

    Aber passt schon...
    Wir deklarieren Strukturen als template. Dann belegen sie keinen Speicherplatz und man kann im Programm beliebig oft eine Instanz mit likeds erzeugen:

    Z.B.:
    Code:
    dcl-ds testDS_templ qualified template;
        text varchar(1000);
        netto packed(15:2);
        brutto packed(15:2);
    end-ds;
    
    dcl-s testDS likeds(testDS_templ);
    
    oder
    
    dcl-pi *n;
       inputDS likeDS(testDS_templ);
    end-pi;
    Die neue dcl-pi - Anweisung ist eine tolle Sache. Jetzt sieht man jedem Parameter direkt an, welchen Datentyp er hat. Bei den alten Parm-Anweisungen konnte man z.B. ein Datumsfeld oder ein Boolean nicht erkennen. Dazu musste man immer erst zu deN D-Anweisungen blättern.

    Dieter

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wenn eine DS qualified ist sollte sie bei LIKEDS auch qualified ansprechbar sein, ansonsten wird sie als Zeichenfeld fester Länge definiert.
    Den Move kann man sich sparen, wenn man den Pointer einer BASED-DS auf die Adresse des Parameters setzt.
    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
    Jan 2012
    Beiträge
    1.199
    Wahrscheinlich habe ich das Problem nicht richtig verstanden. Ich weiß gar nicht, warum ein Move notwendig sein soll. In meinem Beispiel kann man doch direkt mit der empfangenen Datenstruktur "inputDS" arbeiten. Wenn man die nicht qualified haben möchte, lässt man das Schlüsselwort "qualified" einfach weg.

    Ein Umschieben ist nur dann erforderlich, wenn sich die dcl-pi Anweisung in einer Procedure befindet und man die Datenstruktur global haben möchte. Im Main-Bereich eines "normalen" RPG-Programms (also in einem Nicht-Serviceprogramm) sind die empfangenen Parameter aber sowieso global. Genauso wie bei *ENTRY PLIST.

    Dieter

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Der wesentliche Unterschied zwischen *ENTRY PLIST und dcl-pi (bzw. die alte PI-Definition) ist, dass du bei *ENTRY PLIST auf definierte Variablen verweist (incl. der impliziten Definition von Single-Variablen).
    Bei PI und dcl-pi definierst du allerdings neue Variablen und verweist eben nicht auf Bestehende.
    Daher kann bei LIKEDS(xxx) für das korrekte Ansprechen nur eine qualified-DS verwendet werden.
    dcl-pi funktioniert ja i.W. wie ein dcl-ds mit dem kleinen Unterschied, dass jede Variable pointerbasiert ist.
    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
    Jan 2012
    Beiträge
    1.199
    Das Schlüsselwort qualified ist bei der DS nicht nowendig. Allerdings stimmt es, dass der Zugriff auf die Struktur nur qualifiziert erfolgen kann.
    Folgender Code funktioniert (man beachte, dass kein Schlüsselwort qualified gesetzt ist):
    Code:
           dcl-ds testDS_templ template;
             text varchar(50);
             netto packed(15:2);
             brutto packed(15:2);
           end-ds;
    
    
           test1();
    
    
           *inlr = *on;
    
    
           //----------------------------------
           dcl-proc test1;
    
    
           dcl-ds test1DS likeDS(testDS_templ);
    
    
           test1DS.text = 'hallo';
           test2(test1DS);
    
    
           end-proc;
    
    
           //----------------------------------
           dcl-proc test2;
           dcl-pi *n;
              inputDS likeDS(testDS_templ);
           end-pi;
    
    
           dsply inputDS.text;
    
    
           end-proc;

  6. #6
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    Hallo Baldur, hallo Dieter

    Zugriff qualified, das ist der Unterschied zur PLIST. Daher mach ich meinen Move, sonst muss ich das ganze Programm umstellen. Hab eh schon genug Zeit verplempert, nun ist gut.

    Danke für die Zeit und Postings.
    kf

  7. #7
    Registriert seit
    Mar 2006
    Beiträge
    98
    Hallo, ist es möglich eine Mehrfachdatenstruktur als Parameter zu übergeben??

    dcl-pr xxx extpgm('xxx ') ;
    in char(4000) const;
    pakstuecke likeDs(verpackung) dim(50) ;
    end-pr;


    dcl-ds verpackung dim(50) qualified ;
    vepart char(30) inz ;
    vepmng int(3:0) inz ;
    end-ds;

    in = '4711';
    callp xxx(in:verpackung) ;


    hier müsste ich doch die Informationen in Verpackung (als mehrfachdatenstruktur) aus dem unterprogramm als Parameter bekommen. es kommt aber immer nichts

    Gruß
    LABM

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das hängt nun davon ab, wie du dein "dcl-pi" in dem aufgerufenen Programm deklariert hast.
    Die Definitionen sind nur für den Compiler wichtig, für sonst niemanden.

    Wenn dein aufgerufenes Programm "xxx" keine identische PI-Definition zur PR-Definition hat, weißt du halt nicht was kommt.
    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

  9. #9
    Registriert seit
    Mar 2006
    Beiträge
    98
    Danke für die Antwort.
    Das unterprpgramm verarbeitet die Informationen aus der in Parameter und gibt gibt die dann als mehrfachdatenstruktur zurück an das aufgerufene Programm.
    Wie kann ich genau sehen was da für Daten zurückgegeben werden. Irgendwo da legt das Problem.

    Dcl-pi *n
    in char(4000) ;
    pakstuecke likeds(Verpackung) dimm(50) ;
    end-pi

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Wahrscheinlich an dieser Stelle nur ein Schreibfehler, aber dim() schreibt sich nur mit einem m.
    Aber besser alles abprüfen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  11. #11
    Registriert seit
    Mar 2006
    Beiträge
    98
    Das ist nur ein schreib Fehler von jetzt. Rdi hätte es bemängelt.
    Habe nur auf dem Handy getippt.
    Gruß
    labm

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Da du ja nur "By reference", also nur Adressen austauscht, müsstest du doch die Inhalte per Debugger ansehen können.

    Aber ich denke, dass es bei externen Programmen anders läuft als bei Prozeduren und die Definition als insgesamt 1 Struktur laufen müsste:

    dcl-ds Verpackung qualified template;
    vepart char(30) ;
    vepmng int(3:0) ;
    end-ds;

    dcl-ds verpackungen qualified inz;
    packstuecke likeds(Verpackung) dim(50);
    end-ds;

    dcl-pr/pi ....
    in ...
    verpackungen likeds(verpackungen);
    end-pr/pi;
    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

Similar Threads

  1. Schönes Outfit......
    By BeRe in forum Intern - Hilfe - Feedback - Tests-Forum
    Antworten: 39
    Letzter Beitrag: 27-11-13, 15:49
  2. %dec in free-rpg ??
    By Gimli in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-03-03, 10:16
  3. Free RPG??
    By DEVJO in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 05-03-03, 07:18
  4. Free - RPG
    By Gimli in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 04-03-03, 09:47
  5. Free-RPG
    By Gimli in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 03-03-03, 10:23

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •