[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jan 2007
    Beiträge
    905

    Schönes, neues free RPG: DCL-PI Frage

    Seh ich das richtig, dass ich bei einem DCL-PI nicht mehr direkt eine Datenstruktur angeben kann, sondern den Parameter in die Struktur übertragen muss? Und zurück natürlich auch.

    Danke für den Feedback.
    kf

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Nein, LIKEDS(XYDS) funktioniert auch da, so wie früher.
    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 2007
    Beiträge
    905
    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...
    kf

  4. #4
    Registriert seit
    Apr 2005
    Beiträge
    385
    Also das mit dem DCL-PI habe ich nicht ganz durchschaut.... Habe es nciht geschafft drei Parameter in dieser Deklarationsanweisung zu Hinterlegen...

    Habe dann wieder die gute alte D-Karte genutzt...

    Doku ist auch etwas rar was das Thema angeht...

  5. #5
    Registriert seit
    Jan 2007
    Beiträge
    905
    Hi,

    So schwör ist's auch wieder nicht.

    Beispiel:
    PHP-Code:
    //
    // Entry parameter list
    //
      
    dcl-pi *n;    
        
    $Parm1            char(1);
        
    $Parm2            like(myField);
        
    $Parm3            likeds(myDS);
      
    end-pi
    Parameter 1 und 2 kannste gleich verarbeiten, Parameter 3 muss vorgängig in die myDS verschoben werden damit die Daten richtig zur Verfügung stehen. Ist zumindest meine Erfahrung - wer's besser weiss, nur her damit.
    kf

  6. #6
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    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

  8. #8
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    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

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    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

  10. #10
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    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;

  11. #11
    Registriert seit
    Jan 2007
    Beiträge
    905
    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

  12. #12
    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

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
  •