Dies ist ein Beispiel eines Serviceprogramms, das die IBM i-Webkomponente "Tabelle" als Subdatei verwendet. Wenn die JSP-Seite mit der IBM i-Webkomponente "Tabelle" zum ersten Mal geladen wird, wird die Prozedur INIT aufgerufen, um den Bereich zu erstellen und mit Sätzen aus der Datei COURSES zu füllen (durch Aufruf der Prozedur FillSFL). Für die Verarbeitung
des ausgewählten Satzes wird eine Webinteraktion definiert, die die Prozedur GetDetail aufruft.
Diese Prozedur bestimmt mit Hilfe der API QdtsReadcSF, welcher Satz ausgewählt wurde.
In dieser Prozedur wird ein Parameter mit dem Namen Forward und mit einem Wert definiert, der anzeigt, ob ein Satz ausgewählt wurde oder nicht. Dieser Parameter wird im Assistenten für Webinteraktion als Ablaufsteuerungsparameter definiert. Der Interaktionslaufzeitcode bestimmt mit diesem Wert, welche Seite am Ende dieser Interaktion angezeigt werden soll. Wurde kein Satz ausgewählt, wird eine Fehlerseite angezeigt. Wurde ein Satz ausgewählt, werden die Werte aus dem ausgewählten Satz auf einer Detailseite angezeigt.
*--------------------------------------------------------------*
* Tabelle CLASSES verwalten *
* Dieses Serviceprogramm wird von der IBM i-Webkomponente *
* "Tabelle" aufgerufen, um die Subdatei mit allen Sätzen in *
* der Datei zu füllen. Wenn die Seite mit der IBM i-Webkompo- *
* nente "Tabelle" geladen wird, wird dieses Serviceprogramm *
* aufgerufen, bevor die Seite angezeigt wird. *
* Kompilieranweisungen: *
* - Mit CRTRPGMOD als RPG-Modul erstellen *
* - Mit Befehl CRTSRVPGM als Serviceprogramm *
* erstellen. Es muss an Serviceprogramm QDTSSFL *
* gebunden werden, das die eigentlichen *
* Subdateioperationen ausführt. *
* *
*--------------------------------------------------------------*
Hnomain
*
* Klassentabelle
FCourses IF E k Disk usropn
*
* Programmvariablen definieren
DFMT S 10A
Drc S 4 0
Dspc S 10A
DisLoggedIn S N Inz(*ON)
*
* Subdateisatz definieren
* Der Subfile-VCT muss folgende Spalten in dieser Reihenfolge enthalten
* Außerdem sicherstellen, dass Typ/Länge der Subdateispalte den Feldern entsprechen
DRecord DS
D SFLName like(name)
D SFLRoom like(room)
D SFLText like(text)
*
* Diese Struktur wird an die Detailseite zurückgegeben
DInfo DS
D ClassName like(name)
D ClassRoom like(room)
D ClassText like(text)
*
DGetDetail PR ExtProc('GetDetail')
D sfl 10
D flow 20
D i Like(info)
*
DCHECKLOG PR ExtProc('ATTEND')
D forward 20
*
DFillSFL PR
*
/Copy WEBTOOLS/QRPGLESRC,SUBFILEPR
*
*------------------------------------------------------------*
* Beenden - Aufgerufen, wenn die Subdateiseite entladen wird *
*------------------------------------------------------------*
PTERM B export
D TERM PI
*
C Close *ALL
C Return
*
PTERM E
*---------------------------------------------------------------*
* INIT - Subdatei initialisieren *
* Diese Prozedur wird von Subdatei-VCT aufgerufen, bevor die *
* Seite tatsächlich angezeigt wird. *
* Diese Prozedur initialisiert die Subdatei, löscht ihren *
* Inhalt und füllt sie dann mit allen Einträgen in der *
* Bestandsdatenbank. *
*---------------------------------------------------------------*
PINIT B export
DINIT PI
D spcl 10
*
C Eval spc = spcl
C Eval rc = initSF(spcl):
C %Addr(Fmt):
C %Size(Record))
C Eval rc = clearSF(spcl)
C CallP FillSFL
C Return
PINIT E
*
*--------------------------------------------------------------*
* *
* FillSFL *
* Diese Prozedur füllt den Subdatei-VCT, indem alle Sätze *
* in der Datei gelesen werden. *
* Die Prozedur appendSF wird zum Einfügen der Sätze in die *
* Subdatei aufgerufen. *
* *
* Die Subdatei muss bereits durch die Prozedur INIT *
* initialisiert und ihr Inhalt gelöscht worden sein. *
* *
*--------------------------------------------------------------*
PFillSFL B
*
C Open Courses 99
C *LOVAL Setll Courses
C Read Courses
*
* Alle Sätze lesen und dem Subdatei-VCT hinzufügen
C DoW NOT %EOF
C Eval SFLName = Name
C Eval SFLRoom = room
C Eval SFLText = text
C Eval rc = appendSF(spc:
C %Addr(Record):
C %Size(Record))
C Read Courses
C EndDo
*
C Close Courses
*
PFillSFL E
*---------------------------------------------------------------*
* GetDetail *
* Gibt Detailinformationen zu einem aus der Subdatei *
* ausgewählten Eintrag aus. Das Definieren der Variable 'flow' *
* legt fest, welche JSP bei der Rückkehr angezeigt wird. *
*---------------------------------------------------------------*
PGetDetail B export
D GetDetail pi
D sfll 10
D flow 20
D s like(info)
*
* Den ausgewählten Satz lesen
C Eval rc=readcSF(sfll:
C %Addr(Record):
C %Size(Record):
C 1)
* Inhalt der Rückgabestruktur löschen
C Clear Info
C Eval s = info
*
* War ein ausgewählter Satz in der Subdatei, diesen abrufen
C If rc > 0
C Open Courses
C ClassName Chain Courses 99
C Eval s = info
C Close Courses
C Eval flow = 'OK'
*
* Kein Satz ausgewählt
C Else
C Eval flow = 'NOTOK'
C EndIf
*
PGetDetail E
*
* Ende
*---------------------------------------------------------------*
* Prüfung angemeldet *
*---------------------------------------------------------------*
PCHECKLOG B export
D CHECKLOG pi
D forward 20
*
C If isLoggedIn
C Eval forward = 'LOGOK'
*
C Else
C Eval forward = 'NOTLOG'
C EndIf
*
PCHECKLOG E
*
* Ende