-
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
-
Nein, LIKEDS(XYDS) funktioniert auch da, so wie früher.
-
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
-
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...
-
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
-
Zitat von camouflage
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
-
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.
-
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
-
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.
-
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;
-
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
-
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
-
By BeRe in forum Intern - Hilfe - Feedback - Tests-Forum
Antworten: 39
Letzter Beitrag: 27-11-13, 15:49
-
By Gimli in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 11-03-03, 10:16
-
By DEVJO in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 05-03-03, 07:18
-
By Gimli in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 04-03-03, 09:47
-
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
-
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