Pause-Café Volubis

pause-café

rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
Elle a lieu 3 à 4 fois par an : en Bretagne et sur internet.

Pause-café #12

Juin 1997

Fin


TCP/IP - V3R20, V3R70 : Détails techniques.


SLIP :


 Possible avec tout modem suportant les commandes AT derrière une carte:


   2609, 2612 et 6152.(elles s'attachent à un IOP 2623 ou un MFIOP)


 1/ Création d'une ligne asynchrone


 2/ Configuration du modem


    CFGTCPPTP (Point à point) Option 11


 3/ Définition d'un profil, associant un modem,une ligne et une adresse IP
                                                               (WRKTCPPTP)
    Le profil peut-être : *ANS
                        : *DIAL (avec un script de connexion)


   puis activation par STRTCPPTP

                    


 SLIP, Mise en oeuvre :


     > la ligne asynchrone doit être créée avec les paramètres suivants


                    CRTLINASC   LIND(son-nom)    RSRCNAME(CMNxx ou LINxx)
                                 LINESPEED(19200) MAXBUFFER(1500)
                                 CNN(*SWTPP)      DIALCMD(*OTHER)
                                 SWTCNN(*DIAL)    AUTOANS(*NO)
 (même en utilisation *ANS)      AUTODIAL(*YES)   INACTTMR(*NOMAX)


     > puis vous devez définir votre modem en mode asynchrone
       (les modems IBM type 7857 sont par défaut en mode synchrone SDLC)


             - mode commandes AT, liaison Asynchrone sur réseau commuté


     > et enfin configurer un type de modem sur AS/400, avec :


          ATZx = réinitialisaion avec la configuration x
          ATDT = passage en mode numérotation
          ATSx=y = attribution de la valeur y au registre x
                ATS0=2 ==> registre 0, nombre de sonneries avant de répondre

                        Work with Point-to-Point TCP/IP 
   #         # 
 Type option, press Enter. 
   1=Add     2=Change   3=Copy   4=Remove          5=Display details   6=Print 
   9=Start   10=End     12=Work with line status   14=Work with job 


                                                   Line      Line    Job 
 Opt  Name        Mode   Type   Status          Description  Type    Name 
                        
 2    DIALIN      *ANS   *SLIP  INACTIVE        DIALIN       *ASYNC  QTPPANS029 
      AXONE       *DIAL  *SLIP  INACTIVE        DIALUP       *ASYNC             




                                ########################################## 
                                #                                        # 
                                #  Option 9 pour démarrer, "Status" doit # 
                                #   passer à RINGW.                      # 
                                #  Option 14 et 4( spool) en cas de prb. # 
                                ########################################## 
                                                                #  #          Fin 
 F8=Work with modems   F9=Command line   F10=Local interface status 
 F11=Display text      F12=Cancel   F14=Work with active jobs   F24=More keys 

                   Change TCP/IP Point-to-Point *ANS Profile        
   #         #                                                Système:   S44R7480 
 Name:   DIALIN     
 Text   communications entrantes                           


 Type choices, press Enter. 
 TCP/IP information: 
   Protocol type . . . . . . . . . . :   *SLIP 
   Local interface address . . . . . .   130.1.1.1         Address, F4 for list 
   Remote IP address . . . . . . . . .   130.1.1.2         Address 
   Maximum transmission unit . . . . .   576               576-1006 
   Allow proxy ARP . . . . . . . . . .   N                 Y=Yes, N=No 
   Add default route . . . . . . . . .   N                 Y=Yes, N=No 


 Physical line information: 
   Line description  . . . . . . . . .   DIALIN            Name 
   Line type . . . . . . . . . . . . :   *ASYNC 
   Autocreate controller and device      Y                 Y=Yes, N=No 
     Remote location name  . . . . . .                     Name 
                                                                  #  A suivre... 
 F2=Change modem information   F3=Exit   F4=List   F9=Command line 
 F12=Cancel 

                   Change TCP/IP Point-to-Point *ANS Profile        
   #         #                                                Système:   S44R7480 
 Name:   DIALIN     
 Text   communications entrantes                           


 Type choices, press Enter. 
 Modem information: 
   Use a modem . . . . . . . . . . . .   Y                 Y=Yes, N=No 
     Modem information name                                F4 for list 
       IBM 7857                                                         


 Script source information: 
   Use connection dialog script  . . .   N                 Y=Yes, N=No 
     Member  . . . . . . . . . . . . .   ANS400            Name 
     File  . . . . . . . . . . . . . .   QATOCPPSCR        Name 
       Library . . . . . . . . . . . .     QUSRSYS         Name 
     ASCII character set identifier      00819             1-65533, *DFT 


 !----- Avec F2
 V                                                                  A suivre... 
 F2=Change modem information   F3=Exit   F4=List   F9=Command line 
 F12=Cancel 

                 Change TCP/IP Point-to-Point Modem Information     
   #         # 
 Modem information name: 
   IBM 7857                                                         




 Type changes, press Enter. 


   Modem initialization string 
     AT                                                               


   Modem reset string 
     ATZ1                             


   Modem dial command 
     ATDT                                             


   Modem answer command 
     ATS0=2                                           




 F3=Exit   F12=Cancel 

 FTP :


  FTP permet en V3R10 de travailler avec QSYS              (namefmt 0)
                                    ou
                                         QSYS.LIB et QDLS  (namefmt 1)


  En V3R20, V3R70 FTP accepte tous les systèmes de fichiers IFS.


     QOpenSys, QLANSrv, "root" (la racine) avec "QUOTE site namefmt 1" .


  Vous pouvez associer à FTP (serveur) des pgms de contrôle "maison".


   (Exits Points, comme avec Client access), chargés de vérifier la
     validité d'une demande et de gérer les entrées "ANONYMOUS"
     autre nouveauté de cette version.


   QIBM_QTMF_CLIENT_REQ : Pour valider une demande FTP/client


   QIBM_QTMF_SERVER_REQ : Pour valider une action FTP/serveur


   QIBM_QTMF_SVR_LOGON  : Pour valider une demande de connexion.

                    


 AS/400, serveur POP (stockage des e-mail, couplé avec SMTP)


 les utilisateurs sont enregistrés dans le répertoire système avec des
  paramètres SMTP :


                    Modification d'un poste du répertoire


ID util et adresse  . . :   AF400CM   AF400CM


Indiquez vos modifications, puis appuyez sur ENTREE.


  Niveau de service de
    messagerie  . . . . .   2                      1=Index utilisateur
                                                   2=Messagerie système
                                                   3=Autre service de
                                                     messagerie


   Adresse de prédilection   3                      1=ID util et adresse
                                                    2=Nom d'O/R
                                                    3=Nom SMTP
                                                    4=Autre adresse


 F19 = permet de gérér l'adresse SMTP :


                               Change Name for SMTP
                                                              System:   S44R
  User ID/Address . . . . . :   AF400CM  AF400CM


  Type choices, press Enter.


    SMTP user ID  . . . . . .   cmasse                           
    SMTP domain . . . . . . .   S44R7480.APPN.SNA.IBM.COM
 




 l'e-mail est cmasse@S44R7480.APPN.SNA.IBM.COM


 Vous modifiez les paramètres POP par CHGPOPA (Autostart, nbre de jobs ..)


 Vous démarrez le serveur POP par: STRTCPSVR SERVER(*POP)


  Vous pouvez maintenant utiliser EUDORA, ou tout produit micro en
    indiquant l'adresse IP de votre AS/400 en tant que serveur POP.

 Si vous êtes en SNA (ou IPX) il vous faut utiliser Client Access.


 1/ N'installez CC:MAIL sur votre PC qu'après Client Access


 2/ cliquez sur l'icone Courrier dans le panneau de configuration


 3/ Choisissez le service "cc:mail pour IBM AS/400" qui utilisera votre
      connexion AS/400 (routeur Netsoft,IP ou IPX)


 4/ prenez ensuite l'onglet "adressage", utilisez "Ajouter"
     et selectez "carnet d'adresse IBM AS/400" qui enverra sur votre PC
     le répertoire de distribution (géré par ADDDIRE).


 5/ Sur l'AS/400, renseignez la commande CHGPOPA avec


                                         HOSTSVRCNN(*SNA *IP *IPX)
                                         ADRBOOK(*YES)


    arrêter et relancez le serveur POP par ENDTCPSVR *POP
                                           STRTCPSVR *POP.


    Chaque utilisateur cc:mail doit être enregistré dans le répertoire.


 Le lien est assuré avec SNADS :


  + Depuis un terminal passif :


    -  SNDDST     TYPE(*MSG) TOUSRID((USER SYSTEM))            +
                  DSTD('entête du message') MSG('corps du message')


                   le système fait le lien avec le nom SMTP.


    - l'utilisateur se connecte avec son logiciel micro pour aller
                chercher ses messages.


  + Depuis un micro ves un terminal passif :


    -  Vous envoyez un message à USER?SYSTEMàS44R7480.APPN.SNA.IBM.COM
                                 <-ID SNADS> <système><---domaine---->


    -  pour le recevoir   QRYDST dans un OUTFILE (pour connaitre la clé)


                          puis RCVDST avec la(les) clé(s) lue(s).

                    


 AS/400 Serveur HTTP (pages WEB) :


 commande CFGTCPHTTP :


                             Configure TCP/IP HTTP
                                                              Système   SYSTEM
  Choisissez l'une des options suivantes :


        1. Change HTTP attributes
        2. Work with HTTP configuration


     Autres options:
       10. Configure workstation gateway




 1/ CHGHTTPA permet la configuration du nombre de jobs démarrés et des
     paramètres liés à la langue (NLS)


 2/ WRKHTTPCFG permet le paramétrage du serveur HTTP
    (gestion des répertoires, gestion des erreurs, time-out, ...)

                    

                         Work with HTTP Configuration
                                                               Système : SYSTEM
   Type options, press Enter.
     1=Add   2=Change   3=Copy   4=Remove   5=Display   13=Insert


       Sequence
   Opt  Number  Entry
   __   _____   ____________________________________________________________
   __   00010   # Set this to point to the directory where you unpacked the
   __   00020   #
   __   00030
   __   00040   #
   __   00050   # The default port for HTTP is 80; if you are not root you
   __   00060   Port 80
   __   00070   Redirect    http://my400/QDLS/mypage.html   http://your400/Q
   __   00080
   __   00090   Map  MYDOC    QUSRSYS/MYDIR/MYFILE/MYDOC.HTML
   __   00100   Map  doclist  QDLS/Homedir/document/list.html
   __   00110   Map  newdoc   QDLS/Homedir/document/Newdocs/doc.html
                                                                      Bottom
    F3=Exit  F5=Refresh   F6=Print list   F12=Cancel   F17=Top   F18=Bottom
    F19=Edit Sequence


Il s'agit ici de DIRECTIVES données au serveur HTTP, selon le modèle du CERN


 pass


     autorise une partie de l'arborescence IFS à être utilisée par le
      serveur HTTP :


      pass /QDLS/DOCUMENTS/*


      autorise le serveur HTTP à utiliser la branche /QDLS/DOCUMENTS.


 map


     permet d'entrer un nom abrégé dans une URL :


       map /image/* /QDLS/DOCUMENTS/IMAGE/*


 indique que l'URL http://www.as400.com/image/photo.gif doit être remplacé
  par http://www.as400.com/QDLS/DOCUMENTS/IMAGE/photo.gif.



                    

fail


     interdit un ou plusieurs documents ou répertoires :


     fail /QDLS/DOCUMENTS/IMAGE/MOI.GIF


exec


     autorise le serveur à utiliser des programmes CGI :


     exec /QSYS.LIB/MACGIBIB.LIB/*


redirect


    même syntaxe que pass, mais la substitution renvoie sur un autre serveur.


welcome


    définition de la page d'acceuil (stockée dans le fichier WELCOME) :


    welcome homepage

                    


 TCP/IP V3R20 - V3R70 reconnait la norme CGI


 Il s'agit de définir dans une page HTML :


 - des zones d'entrée


 - des objets graphiques : boutons radio/cases à cocher


 - deux boutons  a/ submit  (validation)


                 b/ reset   (remise à blanc)


 et d'associer un pgm de traitement sur le serveur.


 Principaux TAGs HTML :


<FORM ACTION="/QSYS.LIB/WWWCGI.LIB/SIGNATURCL.PGM" METHOD=POST>


 Définit le programme à exécuter (syntaxe IFS)



                    


<INPUT NAME=NOM TYPE=TEXT SIZE=15 MAXLENGTH = 15>


 définition d'une zone de saisie, son nom, son type, sa taille maxi




<INPUT TYPE=SUBMIT VALUE="VALIDATION">
<INPUT TYPE=RESET VALUE="effacer">


Définition des deux boutons de traitement avec leur texte .


le programme signaturcl va dons être appellé, et les paramètres transmis
 dans Le flot d'entrée (STDIN) sous la forme


                "chemin/nom-de-pgm?nom1=valeur1&nom2=valeur2"


                nom1, nom2 sont les noms tel qu'indiqué par INPUT NAME=


                les valeurs sont transmises à la longueur saisie
                 et non à la longueur déclarée.


                la paramètre se termine par un zéro hexa


 Votre programme doit recevoir le paramètre et générer un résultat


   soit sous la forme "location : http://<<--URL--->>


    ce qui renvoit vers un document déja écrit




   exemple
                  location: http://129.1.1.1/html/cgi/erreur.html








   soit sous la forme "content-type : type-mime/sous-type


   ce qui permet de renvoyer du texte HTML dynamique




   exemple
                  Content-type: text/html <HTML> ....</HTML>

                    


 APIs Liées :




     QtmhRdStin             Lire STDIN (le flot en entré)


        + char(?)           paramètre à lire
        + bin(4)            lg de la variable
        + bin(4)            lg de la valeur
        + char(?)            structure std de gestion des erreurs






     QtmhWrStout            écrire dans STDOUT (le flot en sortie)


        + char(?)           paramètre à écrire
        + bin(4)            lg de la variable
        + char(?)            structure std de gestion des erreurs







                    


     QtmhCvtDb              découper un paramètre suivant un format BD


        + char(20)          <--fichier(10c)-><--bib(10c)-->
        + char(?)           paramètre lu (à découper)
        + bin(4)            lg de la variable
        + char(?)           data structure résultat
        + char(10)          nom du format BD
        + bin(4)            code retour
                            0  = OK
                            -1 = Erreur à la conversion
        + char(?)            structure std de gestion des erreurs


     QtmhGetEnv             lire le contenu d'une variable d'environnement


        + char(?)           paramètre à lire
        + bin(4)            lg de la variable
        + bin(4)            lg de la valeur
        + Char(?)           nom de la variable d'environnement
        + BIN(4)            lg du nom
        + char(?)            structure std de gestion des erreurs

                    


 Il existe deux méthodes de transmission des données avec CGI :


    GET = les valeurs sont transmises dans une variable d'environnement


          QUERY_STRING




    POST = les valeurs sont transmises dans le flot de données en entrée


          (STDIN), une variable nommée CONTENT_LENGTH donne la longueur






  Vous devez autoriser l'une de ces méthodes (ou les deux) dans la
   configuration HTTP (WRKHTTPCFG) par :


   enable GET


ou
   enable POST

                    


  Les variables d'enrivonnement peuvent être assignées par :


   ADDENVVAR ENVVAR(Essai) VALUE(valeur)




  les commandes CHGENVVAR et WRKENVVAR sont également disponibles.






  le serveur HTTP founit automatiquement certaines variables comme :


  REMOTE_ADDR : adresse IP


  REMOTE_HOST : nom de machine


  SERVER_NAME : nom du serveur


  QUERY_STRING: la chaîne de caractère après ?


   etc ..

                    

                         Vous devez donc : 
  1/ lire STDIN


  2/ découper les données transmises


     a/ par pgm (en scannant les caractères "&")


     b/ par API en créant un fichier PF qui servira de modèle


  3/ découper les données transmises


     traiter les données (enregistrement ET/OU lecture base de données)


  4/ fournir une réponse (STDOUT)


     a/ soit en indiquant les coordonnées d'un fichier HTML


        (données statiques)


     b/ soit en fournissant par pgm le flot HTML de réponse


        (données dynamiques)


 Pour plus d'information sur CGI


  sur AS/400, voyez la documentation  SC41-3420-04


      "TCP/IP Configuration and reference" , chapitre 13.


  sur la norme, voyez les sites WEB suivants :


  - http://hoohoo.ncsa.uiuc.edu/cgi/


  et sur YAHOO la liste des sites parlant de CGI est :
  - http://www.yahoo.com/Computers/World_Wide_Web/
                                              CGI__Common_Gateway_Interface/


    (sur une seule ligne bien sur)




  Vous pouvez aussi regarder l'exemple qui suit.





                    

<HTML>
<HEADER>
<TITLE> CGI : Essai de pgm RPGLE</TITLE>
</HEADER>
<H1>Merci de laisser votre signature </H1>
<P>
renseignez les parametre suivants : <P>
<FORM ACTION="/QSYS.LIB/WWWCGI.LIB/SIGNATURCL.PGM" METHOD=POST>
<P> votre nom : <INPUT NAME=NOM TYPE=TEXT SIZE=15 MAXLENGTH = 15>
<P> votre prenom : <INPUT NAME=PRENOM TYPE=TEXT SIZE=15 MAXLENGTH = 15>
<P> votre email : <INPUT NAME=EMAIL TYPE=TEXT SIZE=20 MAXLENGTH = 50>
<P>
<P>puis validez.
<P>
<INPUT TYPE=SUBMIT VALUE="VALIDATION">
<INPUT TYPE=RESET VALUE="effacer">
<P> ce site est encore en cours de construction <img src="/html/travaux.gif" ali
</FORM>
</BODY>
<HR>
<center><address>Copyright &copy; 1995,1996  VOLUBIS</address></center>
</HTML>


SIGNATURCL :


PGM
DCL &EXISTE *LGL
             ADDLIBLE   WWWCGI
                 MONMSG CPF2103 EXEC(CHGVAR &EXISTE '1')
             CALL       PGM(WWWCGI/SIGNATUR)
             IF (*NOT &EXISTE) RMVLIBLE WWWCGI
ENDPGM


















pgm rpgle SIGNATUR :



                    


      *
      * LINKER CE PGM AVEC QTMHCGI *SRVPGM
      *
     FSIGNPF1   O    E             DISK


     DSORTIE           S            240
     DSORTIELG         S              9B 0 INZ(%LEN(SORTIE))
     DRECUE            S           1024
     DRECUELG          S              9B 0 INZ(%LEN(RECUE))
     DVALEURLG         S              9B 0
     Ddebut            S              9B 0
     Dfin              S              9B 0
     DAPIERR           DS
     D ERRLG                          9B 0 INZ(%len(apierr))
     D ERRLGDISPO                     9B 0
     D ERRID                          7
     D ERRRESERVE                     1
     D ERRMSG                        50


      *                     API POUR recevoir la saisie
     DQREAD            PR                  EXTPROC('QtmhRdStin')

     D  wRECUE                             like(recue)
     D  wRECUELG                           like(recuelg)
     D  wVALEURLG                          like(valeurlg)
     D  wAPIERR                            like(apierr)
      *                     API POUR GÉNÉRER LA SORTIE
     DQWRITE           PR                  EXTPROC('QtmhWrStout')
     D  wSORTIE                            like(sortie)
     D  wSORTIELG                          like(sortielg)
     D  wAPIERR                            like(apierr)
      * CONSTANTES
     DEOL              C                   X'15'


     DPROBLEME         C                   'location: http://129.1.1.1/html/cgi+
     D                                     /erreur.html'
     Dentete           C                   'Content-type: text/html'
     dACCORD1          C                   '<HTML> <HEADER> <TITLE> +
     d                                      CGI : Essai de pgm RPGLE</TITLE> +
     d                                      </HEADER><H1>Merci</H1><P> +
     d                                      merci '
     DACCORD2          C                   ',et a bientot !</BODY><HR>+
     d                                      </BODY></HTML>'

                    

     C
     C                   CALLP     QREAD(RECUE : RECUELG : VALEURLG :
     C                              APIERR)


     c                   exsr      decoup
     C                   IF        NOM = ' ' OR EMAIL = ' '
     C                   EVAL        SORTIE = PROBLEME + EOL
     C                   ELSE
     C                   EVAL        SORTIE = entete  + EOL + EOL  +
     C                                        ACCORD1 + PRENOM +
     C                                        ACCORD2 + EOL
     C                   WRITE     SIGNF1
     C                   ENDIF
     C
     C                   CALLP     QWRITE(SORTIE : SORTIELG :
     C                              APIERR)
     C                   EVAL      *INLR = *ON
      *
     C     decoup        begsr
     C                   eval      debut = %scan('NOM=' : recue : 1)
     C                   eval      debut = debut + 4
     C                   eval      fin = %scan('&' : recue : debut)

     C                   if        fin > debut
     c                   eval       nom = %subst(recue: debut :
     c                                           fin - debut )
     C                   endif
      *
     C                   eval      debut = %scan('PRENOM=' : recue : fin)
     C                   eval      debut = debut + 7
     C                   eval      fin = %scan('&' : recue : debut)
     C                   if        fin > debut
     c                   eval        prenom = %subst(recue: debut:
     c                                           fin - debut )
     C                   endif
      *
     C                   eval      debut = %scan('EMAIL=' : recue : fin)
     C                   eval      debut = debut + 6
     C                   eval      fin = %scan(x'00' : recue : debut)
     C                   if        fin > debut
     c                   eval        email = %subst(recue: debut :
     c                                           fin - debut )
     C                   endif
     C                   endsr

                    


erreur.html


<HTML>
<HEADER>
<TITLE> CGI : Essai de pgm RPGLE</TITLE>
</HEADER>
<BODY BGCOLOR="#d0d0d0">
<H1>DESOLE</H1>
<P>
Il nous faut au moins votre nom et votre email !
</BODY>
<HR>
<center><address>Copyright &copy; 1995,1996  VOLUBIS</address></center>
</HTML>













                    


 Net.Data est un programmes CGI livré avec l'OS/400 qui permet d'intégrer
  des requêtes SQL (et leur résultat) dans des pages HTML.


 Net.data est un standard DB2
  (disponible donc sur OS/400, OS/2, NT, AIX et système 390)


 Vous devez d'abord copier le programme DB2WWW de la bibliothèque QTCP
  dans votre bibliothèque CGI.


 Puis accorder les droits *USE à *PUBLIC ou au profil QTMHHTP1.


 et enfin paramètrer votre configuration HTTP par WRKHTTPCFG


 avec                           (WWWCGI est donné à titre d'exemple)


     00640     ENABLE POST
     00650     ENABLE GET
     00660     map /cgi-bin/db2www/*  /QSYS.LIB/WWWCGI.LIB/DB2WWW.PGM
     00670     map /CGI-BIN/DB2WWW/*  /QSYS.LIB/WWWCGI.LIB/DB2WWW.PGM
     00700     exec /QSYS.LIB/WWWCGI.LIB/*
     00710     exec /qsys.lib/wwwcgi.lib/*


 Vous devez ensuite créer un fichier d'initialisation


   par CRTSRCPF WWWCGI/INI RCDLEN(240) et ajouter un membre DB2WWW


    contenant :


    MACRO_PATH path


               un ou plusieurs chemin dans lesquels chercher les macros


    INCLUDE_PATH path


               un ou plusieurs chemin pour les fichiers %include()


    EXEC_PATH path


               localisation des routines Net.Data


    ENVIRONMENT
               permet de configurer chaque langage

                    


 DTW_REXX    emplacement des routines REXX
 DTW_SQL     emplacement des routines SQL
 DTW_SYSTEM  emplacement des programmes "maison"


 à chaque fois vous pouvez préciser la liste des paramètres transmis.


 exemple :


MACRO_PATH /html/macros


ENVIRONMENT(DTW_REXX) /QSYS.LIB/QTCP.LIB/QTMHREXX.SRVPGM ( )
ENVIRONMENT(DTW_SQL)  /QSYS.LIB/QTCP.LIB/QTMHSQL.SRVPGM
              (IN DATABASE,                                                 ABLE
               LOGIN, PASSWORD, TRANSACTION_SCOPE, SHOWSQL,
               DB_CASE, OUT DTWTABLE, SQL_CODE)


DATABASE, LOGIN, PASSWORD, etc.. sont des variables qui peuvent être
 définies dans vos macros par :


               %DEFINE LOGIN="QUSER"
               %DEFINE PASSWORD="QUSER"


Vous devez ensuite faire référence à une fonction dans un fichier macro
 par




<a href="/cgi-bin/db2www/html/macros/db2w01/input">SQL/400


le mot SQL/400 fait référence à la fonction input


           dans le fichier db2w01 du répertoire html/macros.




vous noterez l'appel à la routine DB2WWW qui sera remplacé par
      /QSYS.LIB/WWWCGI.LIB/DB2WWW.PGM


grâce à la ligne du fichier de configuration HTTP :


      map /cgi-bin/db2www/*  /QSYS.LIB/WWWCGI.LIB/DB2WWW.PGM




voici le fichier macro :

                    


tout d'abord, définition de quelques variables locales par %DEFINE


la variable fichier s'utilise sous la forme $(fichier) dans le code HTML




%define {
DATABASE="*LOCAL"
fichier ="af4mbrp1"
 %}




 Puis la fonction input, il s'agit de code HTML standard, utilisant CGI
  en référence à une autre fonction (result) située plus loin dans le source


%html(input){ </p>
<html>
<title>Exemple net.data</title>
<body>
<h1>requete sur le fichier $(fichier)</h1>
<p>Entrez un SUJET: </p>
<form action="result" method="POST">


<p><input type=text size=30 maxlength=256 name="sujet"> </p>
<p><input type=submit> <input type=reset> </p>
</form>
</body>
</html>
%}




%html(result){
<html>
<title>resultat de net.data</title>
<body>


<h1>Requete sur $(fichier) - Liste des cours</h1>
<p>Votre critere <b>$(sujet) </b></p>     ################################# 
<p>@query() </p>                          # <-- le résultat affiché est   # 
<p><a href="input">Autre requete</a> </p> #     renvoyé par la "fonction" # 
<p>                                       #     QUERY ci-dessous          # 
</body>                                   ################################# 
</html>
%}


Query est une fonction contenant du code SQL (DTW_SQL)


                                         ATTENTION : journalisation
%function(DTW_SQL) query() {                                obligatoire
 select AF4MDL, AF4MBR, AF4TXT from
   AF4TEMP.$(fichier) where sujet LIKE '%$(sujet)%'


%report constitue le résultat affiché


        on fait référence à une zone par (Vx) ou x est le N° dans le select
                          à une entète de colonne par (Nx) ou x est le N°
                          à la ligne en cours par %row
%report{


<table border=1>
<tr><th align=left>$(N1)</th><th align=left>$(N2)</th><th align=left>$(N3)</th><
<tr><td>%row{ </td></tr>
<tr><td>$(V1)</td><td>$(V2)</td><td>$(V3)</td></tr>
<tr><td>%} </td></tr>
</table>

                    




la fonction %message indique l'action et le texte à afficher en cas d'erreur


ici le code SQL 100 qui indique qu'il n'y pas d'enregistrement.




<p>%} %message{
100: "Aucun cours ... $(sujet)":CONTINUE
%}


%}



















                    


 Et enfin : HTML Workstation Gateway server


  la configuration se fait par CFGTCPWSG


   puis :
                            Change WSG Attributes (CHGWSGA)


   Type choices, press Enter.


    Autostart  . . . . . . . . . . .   *NO              *YES, *NO, *SAME
    Number of clients per server . .   3                1-50, *SAME, *DFT
    Inactivity timeout . . . . . . .   10               0-60 minutes, *SAME
    Data request timeout . . . . . .   10               1-1200 seconds, *SA
    Display sign on panel  . . . . .   *NO              *SAME, *NO, *YES
    Access logging . . . . . . . . .   *YES             *SAME, *NO, *YES
    Top banner URL . . . . . . . . .   *NONE

    Bottom banner URL  . . . . . . .   





 indiquez si la connexion se fait par entrée de mot de passe DSPSGN(*YES)


         ou par programme de validation (exit point encore une fois)


    pensez à renseigner la valeur système QAUTOVRT.


 Puis lancez  STRTCPWSG. (HTTP doit être actif).




 Pour accèder à l'AS/400 depuis votre WEB BROWSER, saisissez comme URL


  http://nom-host:5061/WSG


         pour une connexion avec SIGNON


  http://nom-host:5061/WSG/QAPP0100?paramètres


         pour une connexion par programme de contrôle


  le pgm associé au point d'exit QIBM_QTMT_WSG sera appellé


 Pour ajouter des images ou d'autres codes HTML sur vos écrans,



  utilisez le nouveau mot-clé SDD HTML :


     A                                 23  5HTML('xxxxxxxxxx')


     A                                 23  5HTML(&CODEHTML)
     A            CODEHTML      50   P


 - la syntaxe HTML n'est pas vérifiée.


 - Ligne/colonne n'indiquent que l'ordre d'envoi du code HTML.


 - EHNDSP(*NO) sur le DSPF désactive ce mot-clé.
__________________________________________________________________


 en HTML le lien avec une image se fait par :


      <IMG ALIGN=middle SRC="doc.gif">


le lien avec un serveur ou une page WEB par :


      <a href="http://www.ibm.com/">IBM Page d'accueil</a>


début