PDA

View Full Version : Mehrfach Datenstruktur



Seiten : [1] 2

beegee
19-03-13, 14:34
Hallo,

ich kämpfe mit der Übergabe von Mehrfachdatenstrukturen mittels Procedure. Die sieht folgendermaßen aus:

D VeDs1 DS Qualified Dim(10)
D Fl1 5
D Ve1 LikeDs(IntVeDs) Dim(%Elem(IntVeDs))
D*
D IntVeDs DS Dim(10) Qualified
D VeNumbers1 6 0 Dim(1000)
D VeValues1 13 4 Dim(1000)

Der Aufruf erfolgt so:

C callp getFlVeValues(einFa:einObj:einObja:einObjg: K_VESCHP
C einJahr:einMonat:Veds1)

Also "VeDs1" wird mitgeschickt.

Jetzt bekomme ich beim Kompilieren den Fehler
*RNF5407 20 412 012700 Mehr Parameter im Prototypaufruf übergeben als zulässig.

Heisst das, ich kann eine so große Anzahl von Parametern so nicht übergeben ?

B.Hauser
19-03-13, 14:50
Wie sieht den der Prototyp zu der Prozedur aus?

Birgitta

beegee
19-03-13, 17:40
Hallo,

der Prototyp sieht so aus:

D getFlVeValues PR
D p#fa 2 0 value
D p#obj 7 0 value
D p#objA 1 0 value
D p#objG 1 0 value
D p#jahr 4 0 value
D p#monat 2 0 value
D p#VeDs DS Qualified dim(10)
D Fl 5
D Ve LikeDs(VeDs) Dim(10)
D*
D VeDs DS Qualified
D p#VeNumbers 6 0 Dim(1000)
D p#VeValues 13 4 Dim(1000)

Lg Christian

B.Hauser
19-03-13, 17:54
Die Datenstruktur ist nicht als Parameter-Feld, sondern als eigenständige Datenstruktur definiert.

Du must im Prototypen die Datenstruktur mit LIKEDS und Dim Definieren, jedoch ohne DS!

Birgitta

beegee
19-03-13, 18:10
Meinst du die ganz DS ab p#VeDs ?

So:

p#VeDs Likeds(i#VeDs) Dim(10)

i#VeDs Ds Qualified dim(10)
Fl 5
Ve LikeDs(VeDs) Dim(10)

VeDs Ds Qualified
p#VeNumbers 6 0 Dim(1000)
p#VeValues 13 4 Dim(1000)

B.Hauser
20-03-13, 06:28
Du musst Referenz-Datenstrukturen bilden, die in die Copy-Strecke in der der Prototyp integriert wird eingebunden werden.
Die Dimension (Schlüssel-Wort DIM()) wird aus einer Referenz-Struktur nicht übernommen, sonder muss explizit im Prototypen bzw. Procedure Interfache angegeben werden. Deshalb habe ich in dem Beispiel die Referez-Struktur RefVEDS auch ohne Dimension definiert.

Etwa so:

D getFlVeValues PR
D p#fa 2 0 value
D p#obj 7 0 value
D p#objA 1 0 value
D p#objG 1 0 value
D p#jahr 4 0 value
D p#monat 2 0 value
D p#VEDS LikeDS(RefVeDS) Dim(10)

* Definition von Referenz-Datenstrukturen
* Template (ab 6.1) = Verwendung nur zur Compile-Zeit
D RefVeDs DS Qualified Template
D Fl 5
D Ve LikeDs(RefVeDs) Dim(10)

D RefVeDs DS Qualified Template
D p#VeNumbers 6 0 Dim(1000)
D p#VeValues 13 4 Dim(1000)

In der Procedure mit dem Procedure Interface ist die Definition der Datenstruktur nicht erforderlich, da über den Prototypen/Procedure Interface definiert.
In den rufenden Prozeduren muss eine (locale) Datenstruktur über LIKEDS basierend auf der Referenz-Struktur (Template!) definiert werden.

Birgitta

beegee
20-03-13, 06:49
Template kenne ich noch nicht. Wenn ich richtig nachgelesen habe, sind diese Variablen oder Datenstrukturen nicht als Programmvariablen verwendbar.

Wie greife ich jetzt auf die Feldgruppe p#VeNumbers zu?

eval p#VeDs(#2).Ve.p#VeNumbers = ....

bringt mir einen Fehler:

RNF7591: An operand of a qualified name expression is not valid.

andreaspr@aon.at
20-03-13, 08:49
Die Namen der Parameter ("Variablen") im Prototype sind nur Schein.
Der Prototype dient jediglich als Definition.
Du könntest beim Prototype auch die Namen ganz weg lassen und nur die Datentypdefinitionen stehen lassen.

Ich fürchte, dass hier ein paar Grundlagen fehlen.
Es wäre sicher nicht schlecht wenn du dir ein Redbook her nimmst oder eine ILE RPG Schulung investierst.
Sonst kommst du schnell zum nächsten Problem.
(Nur ein Tipp von mir :))

lg Andreas

beegee
21-03-13, 17:44
Die Namen der Parameter ("Variablen") im Prototype sind nur Schein.
Der Prototype dient jediglich als Definition.
Du könntest beim Prototype auch die Namen ganz weg lassen und nur die Datentypdefinitionen stehen lassen.

Ich fürchte, dass hier ein paar Grundlagen fehlen.
Es wäre sicher nicht schlecht wenn du dir ein Redbook her nimmst oder eine ILE RPG Schulung investierst.
Sonst kommst du schnell zum nächsten Problem.
(Nur ein Tipp von mir :))

lg Andreas

Danke für deinen tollen Tipp. Wenn ich die Zeit habe ein Redbook durchzulesen, hätte ich mich nicht ans Forum gewandt.
In der Zeit, hättest du - falls du es überhaupt weißt - auch die richtige Eval-Lösung schreiben können.

Übringens, so gehört es:

eval p#VeDs(#2).Ve(#2).p#VeNumbers = ....

camouflage
21-03-13, 18:16
Danke für deinen tollen Tipp. Wenn ich die Zeit habe ein Redbook durchzulesen, hätte ich mich nicht ans Forum gewandt.
In der Zeit, hättest du - falls du es überhaupt weißt - auch die richtige Eval-Lösung schreiben können.


Genau dafür ist dafür ist das Forum da und glaub mir, es nehmen sich viele Leute sich Zeit (unentgeltlich!) die Fragen zu analysieren und Lösungen vorzuschlagen.

Ich denke, Du solltest deinen Ton überdenken, ansonsten das Redbook schnell der letzte Helfer sein wird.