-
So einfach ist auch dies wiederum nicht:
Bei nicht qualified DS kann ein Feld nur in einer DS stecken.
Bei qualified geht das wiederum schon, aber einen automatischen Move gibts da nicht.
Da man bei DSPF/PRTF den Vorteil der Mehrfachdefinition in verschiedenen Formaten gerne genutzt hat, ist das für erweiterte Wünsche dann wieder kontraproduktiv.
I- und O-Felder finden ihren Bezug über ihre Namen.
Der Compiler generiert dann intern die passenden Moves zum jeweiligen Format. Somit schafft das Programm dann die Verbindung zwischen Feld und IO.
Mit qualified kannst du im Prinzip dasselbe erreichen, man muss dafür aber was tun:
Per "Read File DS" kann man die Daten in eine qualified DS lesen.
Per "Write File DS" aus dieser schreiben.
Nun benötigst du nur eine handvoll "eval-corr" um identische Feldnamen mit passenden Typen hin und her zu übertragen. Den Rest erledigst du dann per Einzel-Move/Eval.
-
So einfach ist das nun wirklich nicht :confused
Ich habe die Daten-Struktur definiert bekommen. Allerdings funktionierte das mit den Indicator in der Printer-File nicht und einige der Felder sind bereits im bestehenden Programm definiert.
Diese beiden Probleme kann ich umgehen, indem ich die Felder in der externen Daten-Struktur umbenenne:
PHP-Code:
dcl-ds ds_AB671PV_ABRDVAR ext extname('AB671PV':'ABRDVAR' : *output); Ind51 extfld('*IN51'); Ind69 extfld('*IN69'); Ind97 extfld('*IN97'); $$ZL2 extfld('#ZL2'); $$ZL3 extfld('#ZL3'); $$ZL4 extfld('#ZL4'); $$ZL5 extfld('#ZL5'); $$ZL6 extfld('#ZL6'); $$ZL8 extfld('#ZL8'); $$LGNR extfld('LLGNR'); $$VWNR extfld('LVWNR'); $$TXAB0A extfld('#TXAB0A'); $$TXAB0B extfld('#TXAB0B'); $$TXAB0C extfld('#TXAB0C'); ... end-ds;
Leider geht mit dem Umbenennen der Felder auch der Feld-Inhalt verloren - was ich mir nicht erklären kann. Das Feld bekommt doch "nur" einen anderen Namen - der Speicher-Platz ist doch der gleiche...
Felder in der Printer-File:
PHP-Code:
EVAL #zl5 #ZL5 = 'Vor- und Nachname ' EVAL #zl6 #ZL6 = 'Straße und Hausnummer ' EVAL #zl8 #ZL8 = 'PLZ und Ort '
Felder in der Daten-Struktur:
PHP-Code:
EVAL ds_AB671PV_ABRDVAR IND97 OF DS_AB671PV_ABRDVAR = ' ' IND69 OF DS_AB671PV_ABRDVAR = ' ' IND51 OF DS_AB671PV_ABRDVAR = ' ' $$ZL2 OF DS_AB671PV_ABRDVAR = ' ' $$LGNR OF DS_AB671PV_ABRDVAR = . #KKZ OF DS_AB671PV_ABRDVAR = '-A ' $$ZL3 OF DS_AB671PV_ABRDVAR = ' ' $$VWNR OF DS_AB671PV_ABRDVAR = . $$ZL4 OF DS_AB671PV_ABRDVAR = ' ' $$ZL5 OF DS_AB671PV_ABRDVAR = ' ' $$ZL6 OF DS_AB671PV_ABRDVAR = ' ' $$ZL8 OF DS_AB671PV_ABRDVAR = ' ' #DRKDT OF DS_AB671PV_ABRDVAR = 23062025. #LGADR OF DS_AB671PV_ABRDVAR = 'Straße&Hausnummer, PLZ&Ort ' #LANZP OF DS_AB671PV_ABRDVAR = 01052015. #LEHZP OF DS_AB671PV_ABRDVAR = 30042016. $$TXAB0A OF DS_AB671PV_ABRDVAR = ' ' $$TXAB0B OF DS_AB671PV_ABRDVAR = ' ' $$TXAB0C OF DS_AB671PV_ABRDVAR = ' ' $$TXAB1A OF DS_AB671PV_ABRDVAR = ' ' $$TXAB1B OF DS_AB671PV_ABRDVAR = ' ' $$TXAB1C OF DS_AB671PV_ABRDVAR = ' ' $$TXAB2A OF DS_AB671PV_ABRDVAR = ' ' $$TXAB2B OF DS_AB671PV_ABRDVAR = ' '
Hier kann man gut erkennen, dass die Felder, die nicht von #... auf $$... umbenannt wurden, den zugewiesenen Wert enthalten. Alle Inhalte in den umbenannten Feldern sind verloren gegangen bzw. nicht (mehr) in der Daten-Struktur.
Ich kann also das Satz-Format einer Printer-File in eine Daten-Struktur übertragen - aber nur wenn ich keinen Rename vornehmen muss...
Hat jemand eine Idee?
-
Das Umbenennen in der DS hat keinen Einfluss auf IO.
Das hat nichts mit der Umbenennung in den I-Bestimmungen zu tun!
Die DS wird definiert "as is", die Verwendung entscheidest du und nicht der Compiler.
Eine Beziehung zwischen DS und IO gibt es generell nicht.
Nur die RPG-Definition "Eine Variable existiert nur 1 x", scheint eine Beziehung herzustellen. In Wirklichkeit generiert der Compiler die passenden MOVE's.
Indicator sind vom Typ "ind" (N), in der Datei vom Typ CHAR(1). Das ist nicht dasselbe. Deshalb klappt das auch nicht mit OUTPUT-DS's. Hier hilft allenfalls INDARA in der DSPF/PRTF, da dann die *IN nicht zur DS gehören.
Die Variable IND97 entspricht daher nicht *IN97 bzw. *IN(97) und du scheiters bei EVAL-CORR.
Nur mit Definition kannst du i.d.R nichts reißen.
In den I-Definitionen werden auch nur die Felder aufgeführt, die in der Quelle verwendet sind.
Wenn alle benötigt werden, kann man eine DS extern, nicht qualified, definieren.
Was allerdings dann wieder scheitert, wenn ein Feld in mehreren DSN's auftaucht.
Die einzige Lösung sind Qualified DS'n mit "Read/Write DSName".
D.h. auch, dass O-Bestimmungen durch Write ersetzt werden müssen.
-
 Zitat von Fuerchau
Das Umbenennen in der DS hat keinen Einfluss auf IO.
Das hat nichts mit der Umbenennung in den I-Bestimmungen zu tun!
Das ist auch mein Kenntnisstand.
Trotzdem...
Feld (DruckDatum) nicht umbenannt
PHP-Code:
000010=D $$ZL5 30A EXTFLD (#ZL5) AdressZeile4 2000010 000011=D $$ZL6 30A EXTFLD (#ZL6) AdressZeile5 2000011 000012=D $$ZL8 30A EXTFLD (#ZL8) AdressZeile6 2000012 000013=D #DRKDT 8S 0 DruckDatum 2000013
Wert in der Daten-Struktur:
PHP-Code:
#DRKDT OF DS_AB671PV_ABRDVAR = 23062025.
Feld (#ZL5 ff.) umbenannt
PHP-Code:
000010=D $$ZL5 30A EXTFLD (#ZL5) AdressZeile4 2000010 000011=D $$ZL6 30A EXTFLD (#ZL6) AdressZeile5 2000011 000012=D $$ZL8 30A EXTFLD (#ZL8) AdressZeile6 2000012 000013=D #DRKDT 8S 0 DruckDatum 2000013
Feld in der Printer-File (im Debug)
PHP-Code:
EVAL #zl5 #ZL5 = 'Vor- und Nachname ' EVAL #zl6 #ZL6 = 'Straße und Hausnummer ' EVAL #zl8 #ZL8 = 'PLZ und Ort
Feld in der Daten-Struktur (im Debug)
PHP-Code:
$$ZL5 OF DS_AB671PV_ABRDVAR = ' ' $$ZL6 OF DS_AB671PV_ABRDVAR = ' ' $$ZL8 OF DS_AB671PV_ABRDVAR = ' ' #DRKDT OF DS_AB671PV_ABRDVAR = 23062025.
Ich werde die Sache jetzt aber nicht weiter verfolgen. Einen Teil der Werte finde ich in der Daten-Struktur und die anderen Felder übertrage ich halt einzeln.
Ist vielleicht für den ein oder anderen interessant davon gehört zu haben.
Danke für deinen Vorschlag...
Diese Vorgehensweise (qualified) ist für meine Anwendung nicht möglich, da die Printer-File mehrere Hundert Satz-Formate und das Programm viele Tausend lines of code hat. Der Aufwand wäre einfach zu groß.
-
Da die Felder der Printerfile nicht in der DS sind, werden sie durch Namensgleichheit gefüllt, da ja das Feld nur 1x definiert ist.
Dies betrifft aber grundsätzlich nur I- und O-Felder sowie nicht qualified.
Eine Umbenennung der I-Felder (in I-Bestimmungen) wirkt auch tatsächlich auf die Übertragung und wird korrekt gefüllt. Nur die DS passt halt nicht.Das war schon immer so, bleibt auch weiterhin so und ist nichts unbekanntes;-).
Similar Threads
-
By homue in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 18-07-07, 16:47
-
By JP in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 09-08-06, 08:35
-
By Bratmaxxe in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 24-07-06, 13:25
-
By Phuntomias in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 27-06-06, 09:21
-
By HACHIMAN in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 22-05-06, 09:48
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