This is an example of a service program that uses the IBM® i Table Web component as a subfile. When the JSP page containing
the IBM i Table
Web component is first loaded, the INIT procedure is called to create the
space and fill it with records from the COURSES file by calling the FillSFL
procedure. To process the record selected, a Web interaction is defined that
invokes the GetDetail procedure. This procedure uses the QdtsReadcSF API to
determine which record was selected. Note that in this procedure a parameter
named Forward is set with a value that indicates if a record
was selected or not. This parameter is defined in the Web Interaction wizard
as a flow control parameter. The interaction run time uses this value to determine
which page is to be displayed at the end of this interaction. If a record
was not selected, an error page will be displayed. If a record was selected,
the values from the selected record are displayed on a detail page.
*--------------------------------------------------------------*
* Manage CLASSES table *
* This service program is called by the IBM i Table Web *
* component to fill the subfile with all records in the file. *
* When the page containing the IBM i Table Web component *
* is loaded, this service program is called before the page *
* is displayed. *
* Compile instructions: *
* - Use CRTRPGMOD to create this as an RPG module *
* - Use CRTSRVPGM command to create this as a service *
* program. It must be bound with service program *
* QDTSSFL which performs the actual subfile operations *
* *
*--------------------------------------------------------------*
Hnomain
*
* Class table
FCourses IF E k Disk usropn
*
* Define program variables
DFMT S 10A
Drc S 4 0
Dspc S 10A
DisLoggedIn S N Inz(*ON)
*
* Define the subfile record
* The subfile VCT must contain the following columns in this order
* Also ensure the subfile column types/length match the fields
DRecord DS
D SFLName like(name)
D SFLRoom like(room)
D SFLText like(text)
*
* This is the structure passed back to the detail page
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
*
*------------------------------------------------------------*
* Terminate - Called when the subfile page is unloaded *
*------------------------------------------------------------*
PTERM B export
D TERM PI
*
C Close *ALL
C Return
*
PTERM E
*---------------------------------------------------------------*
* INIT - Initialize the subfile *
* This procedure is called by the subfile VCT before the page *
* is actually displayed. *
* This procedure will intialize, clear then fill the subfile *
* with all items in the inventory database *
*---------------------------------------------------------------*
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 *
* This procedure will fill the subfile VCT by reading all *
* records in the file. *
* The appendSF procedure is called to add the records to the *
* subfile *
* *
* Note that the subfile must have been previously initialized *
* and cleared by calling the INIT procedure *
* *
*--------------------------------------------------------------*
PFillSFL B
*
C Open Courses 99
C *LOVAL Setll Courses
C Read Courses
*
* Read all records and add them to the subfile VCT
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 *
* Returns detail information on an item selected in the subfile *
* Setting the variable 'flow' determines which JSP is displayed *
* on return *
*---------------------------------------------------------------*
PGetDetail B export
D GetDetail pi
D sfll 10
D flow 20
D s like(info)
*
* Read the selected record
C Eval rc=readcSF(sfll:
C %Addr(Record):
C %Size(Record):
C 1)
* Clear the return structure
C Clear Info
C Eval s = info
*
* If there was a selected record on the subfile, get it
C If rc > 0
C Open Courses
C ClassName Chain Courses 99
C Eval s = info
C Close Courses
C Eval flow = 'OK'
*
* No record selected
C Else
C Eval flow = 'NOTOK'
C EndIf
*
PGetDetail E
*
* End
*---------------------------------------------------------------*
* Check logged in *
*---------------------------------------------------------------*
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
*
* End