PDA

View Full Version : DTAARA *LDA?



RaMai
01-08-07, 18:18
Hallo,
ich erweitere gerade ein PGM.
Dabei muss ich je nach User Action andere PGM aufrufen.
Parameteruebergabe zu den gerufenen PGM per lokaler DTAARA, jetzt mein Problem.
Die DTAARA ist in allen PGM "LOCAL", die DS aber jeweils unterschiedlich.
Wie kann ich das loesen?
Ich kann ja im rufenden PGM nicht 3 unterschiedliche "LOCAL" DTAARA definieren......

Gruss ratloser Ralf

Fuerchau
01-08-07, 18:21
Dann musst du dir den Inhalt im Programm vorher retten (interne DS).
Die *LDA gibts im Job halt nur 1 Mal !

RaMai
01-08-07, 18:33
Dann musst du dir den Inhalt im Programm vorher retten (interne DS).
Die *LDA gibts im Job halt nur 1 Mal !

Hä?
Sogut Du mir immer hilfst Fuerchau, das verstehe ich nicht.
Also kann ich das Ding nennen wie ich will? Ich mache nur OUT vor- bzw. in nach dem PGM Aufruf um die Daten in meine DS zu bekommen oder wie?
Ich rufe bei F16 <F16>Programm A auf, das erwartet eine DTAARA die LOKAL heisst.
Bei F17 <F17>rufe ich Programm B auf, das erwartet ebenfalls eine DTAARA LOKAL (aber anders aufgebaut).

:confused:

RaMai
01-08-07, 19:16
Sorry, ist wohl zu warm heute oder so was in der Art :D
Ich denke jetzt hab ich es verstanden.
Ich brauche nur eine lokale DTAARA - ich leg nur die Felder von mehreren DS drueber...
z.B.
PGM A benoetigt
1 6 Feld A
7 14 Feld B
PGM B benoetigt
1 4 Feld C
5 6 Feld D

Dann mache ich eine DS
mit allen Feldern und fuelle vor dem Call was ich gerade benoetige, richtig?

Gruss Ralf

B.Hauser
01-08-07, 19:52
Hallo Ralf,

Deine Lösung funktioniert, solange:
sich numerische, alphanumerische und Datums/Zeitfelder sich nicht überlagern. Dadurch könnten ungültige Werte in die numerischen oder Datums- und Zeitfelder gelangen, was dann zu einem Programm-Abbruch führt.

Besser wäre es, 3 unterschiedliche Datenstrukturen zu definieren und vor Programm-Aufruf die benötigte Datenstruktur in die *LDA, die mit einem einzigen Feld mit 1024A definiert wurde, auszugeben.



D LDA UDS dtaara(*LDA)
D LDAInhalt 1024

D DSParPgm1 DS Qualified
D Par1 50A
D Par2 15S 0
D Par3 D

D DSParPgm1 DS Qualified
D Par1 11S 3
D Par2 30A
*------------------------------------------------------
/Free
//Füllen Datenstrukturen für Parameterübergabe
in LDA;
Clear LDAInhalt;
Select;
When Bedingung = 1;
LDAInhalt = DSParPGM1;
Out LDA;
CallP Pgm1;
When Bedingung = 2;
LDAInhalt = DSParPGM2;
Out LDA;
CallP Pgm2;
EndSL;
Out LDA;
/End-Free


Birgitta

RaMai
01-08-07, 20:02
Danke Birgitta, wieder was gelernt.
Alle DS sind bei mir alpha, werde trotzdem deine Loesung verwenden - ich finde dadurch ist der Code lesbarer.

Gruss Ralf

camouflage
02-08-07, 11:10
Es gäbe noch einen Weg,
Holzhackermethode halt.

Leg die Datenbereiche innerhalb der LDA
fest.

1-99 = PGM1
101-200 = PGM2
...

Hat den Vorteil beim Debuggen, dass Du gleich alle übergebenen Werte in der LDA
siehst und zwischenspeichern muss man auch nicht

Fuerchau
02-08-07, 11:12
Bei einer Neukonzeption von Parameterübergaben würde ich die *LDA nicht mehr nehmen sondern Aufrufparameter.
Dies ist auf jeden Fall sicherer und flexibler.

Bei "alten" Programmen muss man meist nehmen was gerade da ist.

camouflage
02-08-07, 11:31
Da geb ich Dir recht Fuerchau.