PDA

View Full Version : OPNQRYF per RPG-PGM erstellen



Seiten : [1] 2

Heyd
15-10-04, 07:32
Hallo,

ich bin noch Neuling und habe ein dickes Problem.

Über ein RPG-Programm soll der QRYSLT zusammengesetzt und dann
an das aufrufende CL weitergegeben werden.
Dabei sollen auch die "Konstanten" %RANGE, %VALUES sowie SPACE also
der ganze Syntax mit " mitgegeben werden.

Die Füllung erfolgt über eine Selektionsmaske mit z.Zt. 8 Felder aus der ich mit von-bis als auch list die Auswahlfelder füllen kann.

Kann mir hier jemand aus meiner Not helfen ?

MFG
Heyd

RobertMack
15-10-04, 08:27
Hallo,

hier ist ein Beispiel in CL:


CHGVAR VAR(&QRY) VALUE('(FELD1 *NE 1 *AND FELD2 +
*EQ 1 *AND FELD3 *EQ 0 *AND FELD4 *GE +
5000 *AND FELD5 *EQ "A")')

OPNQRYF FILE((YOURFILE)) OPTION(*ALL) QRYSLT(&QRY)

Den Parameter &QRY würdest Du aus dem RPG-Programm übergeben. Hier noch ein Link für weitere Details:

http://publib.boulder.ibm.com/iseries/v5r2/ic2929/index.htm

"OPNQRYF" zur Suche eingeben.

Viel Erfolg,
Robert


P.S. wenn's gar nicht gelingen will, poste mal ein Beispiel oder ein Abbild der Eingabemaske.

Heyd
15-10-04, 09:28
Danke Du, aber ich glaube ich habe mich nicht verständlich genug ausgedrückt:

Beispiel:
Von Bis LIST ( 10 Eingaben möglich )

Kundennr. 107012 bis 12220 LIST

Artikelnr. 880000, 894500, 902253

Materialgruppe AAA bis 999

Sachbearbeiter XXX, YYY, ZZZ


Entweder ich gebe Von – Bis pro Feld an oder einzelne Werte

<O:p></O:p>

Ich hatte mir erst ein PF(EDS) für die Übergabe an das CL gemacht, aber da sind die Felder fix in Ihrer Reihenfolge und je nach Auswahl auch noch leer, den „Von – Bis Bereich“ könnte man mit Unterlassungswerten füllen, aber bei LIST hm ????

<O:p></O:p>

Da habe ich ein Problem, daß soll alles möglichst variabel und ohne Mühe erweiterbar sein.

Gruss
Heyd

RobertMack
15-10-04, 10:08
Nun,

hier scheint die Fleißaufgabe eher in der Erkennung der AND/OR Kombinationen zu bestehen.

Eine Eingabe wie: AAAA-BBBB,CCCC,DDDD

würde so aussehen:

(FELD=%range("AAAA" "BBBB") *OR FELD *EQ "CCCC"
*OR FELD *EQ "DDDD")

u.s.w.

(ich ziehe *OR *EQ dem %VALUES vor, da einfach nur jedes
weitere gefundene Feld angefügt werden braucht; CAT/EVAL)

Gruß,
Robert

B.Hauser
15-10-04, 10:37
[Ich hatte mir erst ein PF(EDS) für die Übergabe an das CL gemacht, aber da sind die Felder fix in Ihrer Reihenfolge und je nach Auswahl auch noch leer, den „Von – Bis Bereich“ könnte man mit Unterlassungswerten füllen, aber bei LIST hm ????


Auch bei LIST kannst Du Unterlassungs-Werte verwenden. Du füllst einfach den ersten Wert in alle nicht gefüllten Felder.

Birgitta

Heyd
15-10-04, 10:45
Auch bei LIST kannst Du Unterlassungs-Werte verwenden. Du füllst einfach den ersten Wert in alle nicht gefüllten Felder.

Birgitta
Das hatte ich Anfangs auch vor, will mein Chef aber nicht, da das PGM später auf unendlich viele LIST-Felder erweitert werden soll:(

HEYD

Heyd
15-10-04, 10:49
Nun,

hier scheint die Fleißaufgabe eher in der Erkennung der AND/OR Kombinationen zu bestehen.

Eine Eingabe wie: AAAA-BBBB,CCCC,DDDD

würde so aussehen:

(FELD=%range("AAAA" "BBBB") *OR FELD *EQ "CCCC"
*OR FELD *EQ "DDDD")

u.s.w.

(ich ziehe *OR *EQ dem %VALUES vor, da einfach nur jedes
weitere gefundene Feld angefügt werden braucht; CAT/EVAL)

Gruß,
Robert
Hm, das könnte ich doch mit einem EDS über eine Satzlänge von meinethalben 1000
und ohne feste Feldzuordnung wie vor beschrieben machen, oder ?
Was mich noch stört ist das setzen von Opcodes wie z.B. %range= oder Hochkomma im RPG-PGM. Kann man das noch anders machen?

Gruss
Heyd

RobertMack
15-10-04, 11:05
Um die Feldnamen im String wirst Du nicht herumkommen, die Satz/Feldlänge muß den maximal möglichen String aufnehmen können.

Ich übergebe immer nur die absolut benötigte Anzahl an Argumenten, und die möglichst auch noch gut lesbar weil so auch als Listenüberschrift geeignet.

Bei numerischen Werten entfallen übrigens die Hochkommas, statt *EQ kann auch = eingesetzt werden.

Gruß,
Robert

Heyd
15-10-04, 11:25
Um die Feldnamen im String wirst Du nicht herumkommen, die Satz/Feldlänge muß den maximal möglichen String aufnehmen können.

Ich übergebe immer nur die absolut benötigte Anzahl an Argumenten, und die möglichst auch noch gut lesbar weil so auch als Listenüberschrift geeignet.

Bei numerischen Werten entfallen übrigens die Hochkommas, statt *EQ kann auch = eingesetzt werden.

Gruß,
Robert
Ok, danke Euch, probiers gleich mal aus, ist aber jede Menge Codierarbeit :( bei 8 Feldern geht es ja noch, das ganze soll aber bis ins endlose mühelos erweiterbar sein und das in RPG

Gruß

Fuerchau
15-10-04, 11:28
Um das "zusammenbauen" bei dynamischen Befehlen kommt man nun mal nicht herum.
Sonst wäre es nicht dynamisch sondern statisch:

eval qryslt = '(' + fldnam1 + ' %range("' + fldval1 + '" "' + fldval2 + '") "

usw. usw.usw.