Exemple de sous-fichier

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

Commentaires en retour