pause-café
rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
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
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 © 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 © 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>