Inhaltsverzeichnis SEU-Exit (PPHSEU)   Zeilenbefehle T..   Beispiele  

Ausgabe aller Dateifelder

Ausgabe aller Dateifelder

In diesem Beispiel wollen wir eine Vorlage erstellen, mit der wir ein Programm erzeugen können das:

  • Die Schlüsselfelder eines Datensatzes als Parameter erhält
  • Jedes Feld des Satzes mit seiner Beschreibung auf einer Liste ausgibt.

Der Inhalt der DO-Schleife soll später zugefügt werden

1. Schritt: Vorlagen-Teildatei erstellen

Folgenden Befehl eingeben: STRSEU PPHTPL PRTRCD SEUTYPE(RPGLE)

2. Schritt: Variable definieren

Um eine vollständige Programmquelle zu erstellen benötigen wir einige Angaben wie Name, Autor und Datum.

Für die Datenbankdatei müssen wir keine Variable definieren. PPHSEU ordnet automatisch die folgenden zu:

  • &F Datei
  • &L Bibliothek
  • &R Satzformat

Dann fügen wir eine Zeile mit /TPL ein, womit die eigentliche Vorlage beginnt.
SEU==>                                                                      DO
FMT * *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+.
***************** Datenanfang *****************************************
0001.00 * &N=Name,10,*MBR
0002.00 * &A=Autor,25,*USX
0003.00 * &T=Text,40,*MBX
0004.00 * &D=Datum,25,*DAT
0005.00 * &J=Jahr,4,*Y
0006.00 */TPL

3. Schritt: Programm-Kopfzeilen

Außer den Kommentarzeilen am Anfang fügen wir eine F-Anweisung für die Datenbankdatei ein, die immer dem Platzhalter &F zugeordnet wird und eine F-Anweisung für die Druckausgabe.
SEU==>                                                                  PRTRCD
FMT * *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+.
0006.00 */TPL
0007.00 /TITLE &t
0008.00 *=====================================================================
0009.00 * Modulname . . . . . . . . : &N
0010.00 * Beschreibung . . . . . . . : &t
0011.00 * Autor . . . . . . . . . . : &a
0012.00 * Erstelldatum . . . . . . . : &D
0013.00 *---------------------------------------------------------------------
0014.00 H COPYRIGHT('Kümpflein DV-Beratung GmbH &J ')
0015.00 *---------------------------------------------------------------------
0016.00 * CRTRPGMOD DBGVIEW(*SOURCE)
0017.00 * CRTPGM MODULE(&N<)
0018.00 *=====================================================================
0019.00 H DATEDIT(*DMY.) DATFMT(*EUR) DECEDIT('0,') OPTION(*SRCSTMT:*NODEBUGIO)
0023.00
0024.00 F&F IF E K DISK
0025.00 FQSYSPRT O F 132 PRINTER OFLIND(nOvrFlw) USROPN

4. Schritt: Das Programminterface

Als Parameter erhält unser späteres Programm eine Variable, in der ein Ergebniscode zurückgegeben wird und alle Schlüsselfelder der Datei.

Hierzu erstellen wir einen /FFA-/FFE-Block mit Angabe KEY. Das bewiwrkt, dass die dazwichenliegenden Zeilen für jedes Schlüsselfeld der Datei wiederholt werden.
SEU==>                                                                  PRTRCD
FMT D DName+++++++++++ETDsVon++++Bi/L+++IDG.Schlüsselwörter++++++++++++++++++
0036.00 D &N PR
0037.00 D EPRtnCode 1A
0038.00 /FFA KEY
0039.00 D EP&3 LIKE(&1<)
0040.00 /FFE
0041.00
0042.00 D &N PI
0043.00 D EPRtnCode 1A
0044.00 /FFA KEY
0045.00 D EP&3 LIKE(&1<)
0046.00 /FFE

6. Schritt: Die Ausgabefunktion

Für die Druckausgabe erstellen wir eine Funktion die Feldname, Feldbeschreibung und den Feldinhalt erhält. Zur Druckausgabe benötigen wir Ausgabefelder und einen Überlaufanzeiger.
SEU==>                                                                  PRTRCD
FMT * *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+.
0046.01
0046.02 D LCLPrtFld PR
0046.03 D EPName 10A CONST
0046.04 D EPText 50A CONST
0046.05 D EPData 50A CONST
0046.06
0046.07 * Ausgabefelder
0046.09 D sName S 10A
0046.10 D sText S 50A
0046.11 D sData S 50A
0046.12 * Überlauf
0046.13 D nOvrFlw S N

6. Schritt: Schlüsselliste und lesen des Datensatzes

Wir definieren die Schlüsselliste KEYEP und lesen den gewünschten Satz, falls er nicht existiert geben wir 9 im Rückkehrcode zurück.
SEU==>                                                                  PRTRCD
FMT * *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+.
0048.00 * Schlüssel für Datei &F
0049.00 C KEYEP KLIST
0050.00 /FFA KEY
0051.00 C KFLD EP&3
0052.00 /FFE
0053.00
0054.00 C KEYEP CHAIN &R
0055.00 C IF NOT %FOUND
0056.00 C EVAL EPRtnCode = '9'
0057.00 C RETURN
0058.00 C ENDIF
0059.00

6. Schritt: Ausgabefunktion für jedes Fekd aufrufen

Wir rufen nun für jedes Feld die Funktion LCLPrtFld auf. Diese druckt eine Zeile für jedes Ausgabefeld. Hier müssen wir Zeichfelder anders behandeln als numerische. Mit den /IF:, /ELSE: und /ENDIF-Zeilen können wir Bedingungen setzen. Diese sind nur zwischen /FFA und /FFE zulässig.
SEU==>                                                                  PRTRCD
FMT * *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+.
0059.01
0059.02 * Feldweise Ausgabe
0059.03 * -----------------
0059.04 C OPEN QSYSPRT
0060.00 C EXCEPT EXHDG
0061.00 */FFA
0062.00 * &4
0063.00 */IF: *A
0064.00 C CALLP LCLPrtFld('&1<':
0065.00 C '&4<':
0066.00 C &1<)
0067.00 */ELSE:
0068.00 C CALLP LCLPrtFld('&1<':
0069.00 C '&4<':
0070.00 C %EditC(&1<:'&8<'))
0071.00 */ENDIF:
0072.00 */FFE
0073.00
0074.00 C EVAL EPRtncode = '1'
0075.00 C RETURN

7. Schritt: Ausgabefunktion erstellen

Die Funktion LclPrtFld druckt eine Zeile mit Beschreibung, Feldname und Feldinhalt.

Die Beschreibung ergänzt sie um . . . . zur besseren Lesbarkeit.
0088.00  /TITLE LCLPrtFld Einzelnes Dateifeld ausgeben
0089.00 *=====================================================================
0090.00 * Prozedur . . . . . . . . . : .PrtFld
0091.00 * Beschreibung . . . . . . . : Einzelnes Dateifeld ausgeben
0092.00 *=====================================================================
0093.00 P LCLPrtFld B EXPORT
0094.00 D LCLPrtFld PI
0095.00 D EPName 10A CONST
0096.00 D EPText 50A CONST
0097.00 D EPData 50A CONST
0098.00
0099.00 D iPos S 5I 0
0100.00
0101.00 C EVAL iPos = %CHECKR(' ':EPText)
0102.00 C IF iPos > 0
0103.00 C EVAL sText = *ALL' .'
0104.00 C EVAL %SUBST(sText:1:iPos+1) = EPText
0105.00 C ELSE
0106.00 C EVAL sText = EPText
0107.00 C ENDIF
0108.00
0109.00 C EVAL sName = EPName
0110.00 C EVAL sData = EPData
0111.00
0112.00 C IF nOvrFlw
0113.00 C EXCEPT EXHDG
0114.00 C EVAL nOvrFlw = *OFF
0115.00 C ENDIF
0116.00 C EXCEPT EXFLD
0117.00
0118.00 P LCLPrtFld E

Aufruf der Vorlage zum Test

Unsere Vorlage ist damit fertig.

Wir können nun Druckprogramme für Einzelsätze wie folgt erstellen:

Strseu qrpglesrc testpr Type(RPGLE) TEXT(Beispiel Druck)

Und TPRTRCD eingeben
SEU==>                                                                  TESTPR
FMT H HSchlüsselwörter+++++++++++++++++++++++++++++++++++++++++++++++++++++++
***************** Datenanfang *****************************************
TPRTRCD
'''''''
'''''''

In der Anzeige die nun erscheint müssen wir nur noch den Namen einer geschlüsselten Datenbankdate angeben:
BSRPMT 15.07.06                   Beispiel Druck

Auswahl eingeben und Eingabetaste drücken.

Name . . . . . . . . . . . . . . TESTPR

Autor . . . . . . . . . . . . . . Harald Kümpflein
Text . . . . . . . . . . . . . . Beispiel Druck

Datum . . . . . . . . . . . . . . 15.07.2006
Jahr . . . . . . . . . . . . . . 2006

Datei . . . . . . . . . . . . . . ADRSTM1 F4 für Liste
Bibliothek . . . . . . . . . . . *LIBL F4 für Liste
Satzformat . . . . . . . . . . . *FIRST Name, *FIRST

Ergebnis: Das fertige RPG-Programm

Kopfzeile und F-Anweisung
0002.00  /TITLE Beispiel Druck
0003.00 *=====================================================================
0004.00 * Modulname . . . . . . . . : TESTPR
0005.00 * Beschreibung . . . . . . . : Beispiel Druck
0006.00 * Autor . . . . . . . . . . : Harald Kümpflein
0007.00 * Erstelldatum . . . . . . . : 15.07.2006
0008.00 *---------------------------------------------------------------------
0009.00 H COPYRIGHT('Kümpflein DV-Beratung GmbH 2006')
0010.00 *---------------------------------------------------------------------
0011.00 * CRTRPGMOD DBGVIEW(*SOURCE)
0012.00 * CRTPGM MODULE(TESTPR)
0013.00 *=====================================================================
0014.00 H DATEDIT(*DMY.) DATFMT(*EUR) DECEDIT('0,') OPTION(*SRCSTMT:*NODEBUGIO)
0015.00
0016.00 FADRSTM01 IF E K DISK
0017.00

Programm-Interface
0032.00
0033.00 D TESTPR PI
0034.00 D EPRtnCode 1A
0035.00 D EPNUM LIKE(ADNUM)
0036.00 D EPSEQ LIKE(ADSEQ)
0037.00
0038.00 * Schlüssel für Datei ADRSTM01
0039.00 C KEYEP KLIST
0040.00 C KFLD EPNUM
0041.00 C KFLD EPSEQ
0042.00
0043.00 C KEYEP CHAIN ADSATZ
0044.00 C IF NOT %FOUND
0045.00 C EVAL EPRtnCode = '9'
0046.00 C RETURN
0047.00 C ENDIF
0048.00
0049.00 * Ausgabefunktion für jedes Dateifeld aufrufen
0050.00 * Anschriftennummer
0051.00 C CALLP LCLPrtFld('ADNUM':
0052.00 C 'Anschriftennummer':
0053.00 C %EditC(ADNUM:'Z'))
0054.00 * Folgenummer
0055.00 C CALLP LCLPrtFld('ADSEQ':
0056.00 C 'Folgenummer':
0057.00 C %EditC(ADSEQ:'Z'))
0058.00 * 1. Namenszeile
0059.00 C CALLP LCLPrtFld('ADNM1':
0060.00 C '1. Namenszeile':
0061.00 C ADNM1)

... Alle weiteren Felder


0086.00 * Verwendung
0087.00 C CALLP LCLPrtFld('ADUSG':
0088.00 C 'Verwendung':
0089.00 C %EditC(ADUSG:'Z'))
0090.00
0091.00 C EVAL EPRtncode = '1'
0092.00 C RETURN
0093.00
0094.00 OQSYSPRT E EXHDG 3 3
0095.00 O 'TESTPR'

Alles weitere kommt unverändert aus unserer Vorlage