[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  2. #2
    Registriert seit
    Mar 2006
    Beiträge
    33
    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?

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Mar 2006
    Beiträge
    33
    Zitat Zitat von Fuerchau Beitrag anzeigen
    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=$$ZL6                          30A   EXTFLD (#ZL6)                         AdressZeile5                             2000011
    000012=$$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=$$ZL6                          30A   EXTFLD (#ZL6)                         AdressZeile5                             2000011
    000012=$$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ß.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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;-).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. ILE RPG / SQL Füllen einer Feldgruppe
    By homue in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 18-07-07, 16:47
  2. Datenstruktur mit Mehrfachvorkommen
    By JP in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 09-08-06, 08:35
  3. Datenstruktur
    By Bratmaxxe in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 24-07-06, 13:25
  4. Listenfelder eines Befehls im CL füllen
    By Phuntomias in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 27-06-06, 09:21
  5. SQL UDF Prob mit leeren Feldern
    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
  •