Voici un exemple de programme de service qui utilise le composant Web Table comme sous-fichier IBM® i. Lorsque la page JSP contenant le composant Web Table IBM i
est chargée pour la première fois, la procédure INIT est appelée pour créer l'espace et le remplir avec des enregistrements
du fichier COURSES en appelant la procédure FillSFL. Pour traiter
l'enregistrement sélectionné, une interaction Web chargée d'appeler la procédure GetDetail est définie. Cette procédure utilise l'API QdtsReadcSF pour déterminer quel
enregistrement a été sélectionné. Notez que, dans cette procédure, un paramètre nommé
Forward est défini avec une valeur qui indique si un enregistrement a été
(ou non) sélectionné. Ce paramètre est défini dans l'assistant d'interaction Web en tant
que paramètre de contrôle de flux. L'exécution de l'interaction utilise cette valeur pour déterminer la page qui doit être affichée à la fin de cette interaction. Si aucun enregistrement n'a été sélectionné, une page d'erreur s'affiche. Sinon, les valeurs de l'enregistrement sélectionné sont affichées dans une page de détails.
*--------------------------------------------------------------*
* Gestion de la table CLASSES *
* Ce programme de service est appelé par le composant Web Table IBM i *
* pour remplir le sous-fichier avec tous les enregistrements du fichier. *
* Lorsque la page contenant le composant Web Table IBM i *
* chargée, ce programme de service est appelé avant que la *
* page s'affiche. *
* Instructions de compilation : *
* - Utilisez CRTRPGMOD pour générer un module RPG. *
* - Utilisez la commande CRTSRVPGM pour générer un programme *
* de service. Ce programme doit être lié au programme de *
* service QDTSSFL qui exécute les opérations concrètes de *
* sous-fichier. *
* *
*--------------------------------------------------------------*
Hnomain
*
* Table Classes
FCourses IF E k Disk usropn
*
* Définition des variables de programme
DFMT S 10A
Drc S 4 0
Dspc S 10A
DisLoggedIn S N Inz(*ON)
*
* Définition de l'enregistrement de sous-fichier
* Le sous-fichier VCT doit contenir les colonnes suivantes, dans cet ordre.
* Vérifiez que les types/longueur des colonnes correspondent aux zones.
DRecord DS
D SFLName like(name)
D SFLRoom like(room)
D SFLText like(text)
*
* Structure retransmise à la page de détails
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 - Proc. appelée lorsque la page de sous-fichier *
* est déchargée. *
*------------------------------------------------------------*
PTERM B export
D TERM PI
*
C Close *ALL
C Return
*
PTERM E
*---------------------------------------------------------------*
* INIT - Initialisation du sous-fichier *
* Cette procédure est appelée par le sous-fichier VCT avant *
* que la page ne soit effectivement affichée. *
* Elle est chargée d'initialiser, d'effacer et de remplir le *
* sous-fichier avec tous les éléments de la base de données *
* d'inventaire. *
*---------------------------------------------------------------*
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 *
* Cette procédure remplira le sous-fichier VCT lors de la *
* lecture de tous les enregistrements du fichier. *
* La procédure appendSF est appelée pour ajouter les enregis- *
* trements au sous-fichier. *
* *
* Notez que le sous-fichier doit avoir été préalablement ini- *
* tialisé et effacé suite à appel de la procédure INIT. *
* *
*--------------------------------------------------------------*
PFillSFL B
*
C Open Courses 99
C *LOVAL Setll Courses
C Read Courses
*
* Lecture de tous les enregistrements et ajout de ceux-ci au sous-fichier 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 *
* Renvoie des informations détaillées sur un élément *
* sélectionné du sous-fichier. *
* La définition de la variable 'flow' détermine quelle page JSP *
* est affichée en retour. *
*---------------------------------------------------------------*
PGetDetail B export
D GetDetail pi
D sfll 10
D flow 20
D s like(info)
*
* Lecture de l'enregistrement sélectionné
C Eval rc=readcSF(sfll:
C %Addr(Record):
C %Size(Record):
C 1)
* Nettoyage de la structure renvoyée
C Clear Info
C Eval s = info
*
* S'il y avait un enregistrement sélectionné dans le sous-fichier,
* extraction de celui-ci
C If rc > 0
C Open Courses
C ClassName Chain Courses 99
C Eval s = info
C Close Courses
C Eval flow = 'OK'
*
* Aucun enregistrement sélectionné
C Else
C Eval flow = 'NOTOK'
C EndIf
*
PGetDetail E
*
* End
*---------------------------------------------------------------*
* Vérification de la connexion *
*---------------------------------------------------------------*
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