Le web de Dominique Guebey – IBM AS/400 iSeries

Page : http://www.dg77.net/tekno/as400/as400spool.htm


   D o m i n i q u e   G u e b e y    J u n g l e     IBM AS/400 iSeries

Comment mettre un etat as400 "en ligne" (sous forme de fichier html)

D’abord créer une commande (par exemple "SPLWEB"), utilisant le prompt ci-dessous et lançant le programme CL qui suit.

On renseignera les zones de la façon suivante :

Ce traitement crée simultanément une "page" .htm et un fichier .txt, placés tous deux dans un répertoire du système de fichier intégré (IFS) nommé /MONREPERT/WEB/SPOOL.

Pour ne pas avoir à tout resaisir, il est possible de récupérer les données de cette page : d’abord "afficher la source" ou assimilés (cf option du navigateur), puis "enregistrer sous" dans un fichier quelconque. Puis, après manipulation, envoyer les modules sur l’AS400. Celà peut se faire par FTP, par Client-Access, ou par le "voisinage réseau".

Exemple de création de commande, si nommée "SPW" : CRTCMD CMD(MABIBLIO/SPW) PGM(MABIBLIO/SPLWEBCL) SRCFILE(MABIBLIO/QCMDSRC) SRCMBR(SPWCMD)

Suivant cet exemple, on doit avoir dans MABIBLIO/QCMDSRC le membre SPWCMD de type "CMD" qui suit :

/* TRANSFORME UN ETAT EN FICHIER HTML                         */
/* d’après BRIAN SINGLETON, VU DANS NEWS MAGAZINE N. 54 NOV 98  */
/* Perfectionnement par Dominique Guebey                           */
  
             CMD        PROMPT('Convertir SPOOL en page HTML')
PARM KWD(JOB) TYPE(*CHAR) LEN(10) MIN(1) +
     CHOICE('NAME') PROMPT('Nom du travail')
PARM KWD(USER) TYPE(*CHAR) LEN(10) MIN(1) +
     CHOICE('USER') PROMPT('Utilisateur')
PARM KWD(NUMBER) TYPE(*CHAR) LEN(6) MIN(1) +
     CHOICE('NUMBER') PROMPT('Numéro du travail')
PARM KWD(FILE) TYPE(*CHAR) LEN(10) MIN(1) +
     CHOICE('NAME') PROMPT('Fichier spool')
PARM KWD(SPLNBR) TYPE(*CHAR) LEN(5) DFT(*ONLY) +
     MIN(0) CHOICE('0-9999, *ONLY') +
     PROMPT('Numéro du fichier')
/* on sort dans un "STREAM FILE"                                */
PARM KWD(TOSTMF) TYPE(*CHAR) LEN(8) MIN(1) +
                          PROMPT('Votre référence')
/* POUR LE <TITLE> </TITLE>                                     */
PARM KWD(TITRE) TYPE(*CHAR) LEN(40)  +
                          PROMPT('Titre')
Programme SPLWEBCL lancé par la commande, membre source dans MABIBLIO/QCLSRC :
/* TRANSFORME UN ETAT EN FICHIER HTML                         */
/*   PAR BRIAN SINGLETON, VU DANS NEWS MAGAZINE N. 54 NOV 98  */
/* Perfectionnements par Dominique Guebey                     */

CVTSPLF: PGM PARM(&JOBNM &JOBUS &JOBNB &SPLNM &SPLNB &REFER &TITRE)
/* DECLARE LES PARAMETRES */
DCL VAR(&USER)  TYPE(*CHAR) LEN(10)
DCL VAR(&JOBNM) TYPE(*CHAR) LEN(10)
DCL VAR(&JOBUS) TYPE(*CHAR) LEN(10)
DCL VAR(&JOBNB) TYPE(*CHAR) LEN(06)
DCL VAR(&SPLNM) TYPE(*CHAR) LEN(10)
DCL VAR(&SPLNB) TYPE(*CHAR) LEN(05)
DCL VAR(&REFER) TYPE(*CHAR) LEN(08)
DCL VAR(&PROG)  TYPE(*CHAR) LEN(10) VALUE(SPHTMCL)
DCL VAR(&TITRE) TYPE(*CHAR) LEN(40)
/* ZONES DE TRAVAIL       */
DCL VAR(&NOMFI) TYPE(*CHAR) LEN(12)
DCL VAR(&TOLOC) TYPE(*CHAR) LEN(80)
DCL VAR(&TOTXT) TYPE(*CHAR) LEN(80)
DCL VAR(&USDIR) TYPE(*CHAR) LEN(80)
DCL VAR(&PUDIR) TYPE(*CHAR) LEN(80)
DCL VAR(&PRDIR) TYPE(*CHAR) LEN(80)

MONMSG MSGID(CPF2105)

             RTVJOBA    USER(&USER)
             CHGVAR     VAR(&TOLOC) VALUE('/MONREPERT/WEB/SPOOL/' *TCAT +
                     &USER *TCAT '/' *TCAT &REFER *TCAT '.htm')
             CHGVAR     VAR(&TOTXT) VALUE('/MONREPERT/WEB/SPOOL/' *TCAT +
                     &USER *TCAT '/' *TCAT &REFER *TCAT '.txt')


             CHGVAR     VAR(&USDIR) VALUE('/MONREPERT/WEB/SPOOL/' *TCAT +
                          &USER)
             CHGVAR     VAR(&PRDIR) VALUE('/MONREPERT/WEB/SPOOL/' *TCAT +
                          &USER)
             CHGVAR     VAR(&PUDIR) VALUE('/MONREPERT/WEB/SPOOL/' *TCAT +
                          &USER)

/* CREE LE FICHIER TEMPORAIRE */
DLTF FILE(QTEMP/HTMTMP)
CRTPF      FILE(QTEMP/HTMTMP) RCDLEN(220) SIZE(100000 32767)

/* FICHIER DES DONNEES SESSIONS */
CALL MABIBLIO/SPLWECCL PARM(&PROG)

/* INSERE LE TAG D'ENTETE 1ERE PARTIE (JUSQU'AU TAG TITLE */
CPYF FROMFILE(MABIBLIO/HTMLTAG) TOFILE(QTEMP/HTMTMP) +
                          MBROPT(*REPLACE) FROMRCD(1) TORCD(1) +
                          FMTOPT(*NOCHK)
/* AJOUT DU TITRE */
CHGDTAARA  DTAARA(*LDA (201 40)) VALUE(&TITRE)
OVRDBF HTMFIC QTEMP/HTMTMP
CALL MABIBLIO/SPHTMAJ
/* INSERE LE TAG D'ENTETE 3EME PARTIE (A PARTIR DU TAG /TITLE */
CPYF FROMFILE(MABIBLIO/HTMLTAG) TOFILE(QTEMP/HTMTMP) +
                          MBROPT(*ADD) FROMRCD(2) TORCD(2) +
                          FMTOPT(*NOCHK)
/* AJOUTE LE FICHIER SPOOL */
CPYSPLF FILE(&SPLNM) TOFILE(QTEMP/HTMTMP) +
     JOB(&JOBNB/&JOBUS/&JOBNM) SPLNBR(&SPLNB) +
     MBROPT(*ADD)
             MONMSG     MSGID(CPA0000 CPF0000)
/* AJOUTE LES TAG DE FIN */
CPYF FROMFILE(MABIBLIO/HTMLTAG) TOFILE(QTEMP/HTMTMP) +
     MBROPT(*ADD) FROMRCD(3) TORCD(3) +
     FMTOPT(*NOCHK)
CPYF FROMFILE(QTEMP/DONNEES) TOFILE(QTEMP/HTMTMP) +
                          MBROPT(*ADD) FROMRCD(1) TORCD(3) +
                          FMTOPT(*NOCHK)
CPYF FROMFILE(MABIBLIO/HTMLTAG) TOFILE(QTEMP/HTMTMP) +
     MBROPT(*ADD) FROMRCD(4) TORCD(5) +
     FMTOPT(*NOCHK)
/* CREE EVENTUELLEMENT LES REPERTOIRES                             */
             CRTDIR     DIR(&USDIR) DTAAUT(*INDIR)
             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(DIREX1))
             CHGAUT     OBJ(&USDIR) USER(*PUBLIC) DTAAUT(*NONE) +
                          OBJAUT(*ALL)
             CHGAUT     OBJ(&USDIR) USER(&USER) DTAAUT(*RWX) +
                          OBJAUT(*ALL)
             CHGAUT     OBJ(&USDIR) USER(QSECOFR) DTAAUT(*RWX) +
                          OBJAUT(*ALL)
             CHGAUT     OBJ(&USDIR) USER(GUD) DTAAUT(*RWX) OBJAUT(*ALL)
 DIREX1:
/* MET LE FICHIER DANS L'IFS */
CPYTOSTMF FROMMBR('QSYS.LIB/QTEMP.LIB/HTMTMP.FILE/HTMTMP.MBR +
     ') TOSTMF(&TOLOC) +
     STMFOPT(*REPLACE) +
     STMFCODPAG(819)
/* CHANGE AUTHORITY POUR AUTORISER SERVICE HTTP */
/* CHGAUT OBJ(&TOLOC) USER(QTMHHTTP) DTAAUT(*RX)                 */
             CHGAUT     OBJ(&TOLOC) USER(*PUBLIC) DTAAUT(*NONE) +
                          OBJAUT(*ALL)
             CHGAUT     OBJ(&TOLOC) USER(&USER) DTAAUT(*RWX) +
                          OBJAUT(*ALL)
             CHGAUT     OBJ(&TOLOC) USER(QSECOFR) DTAAUT(*RWX) +
                          OBJAUT(*ALL)
             CHGAUT     OBJ(&TOLOC) USER(GUD) DTAAUT(*RWX) OBJAUT(*ALL)
/* Pendant qu'on y est, on met aussi une version .TXT */
CRTPF FILE(QTEMP/HTMTXT) RCDLEN(200)
             MONMSG     MSGID(CPF0000)
CPYSPLF &SPLNM QTEMP/HTMTXT JOB(&JOBNB/&JOBUS/&JOBNM) SPLNBR(&SPLNB)
             MONMSG     MSGID(CPF0000)
/* MET LE FICHIER DANS L'IFS */
CPYTOSTMF FROMMBR('QSYS.LIB/QTEMP.LIB/HTMTXT.FILE/HTMTXT.MBR +
     ') TOSTMF(&TOTXT) +
     STMFOPT(*REPLACE) +
     STMFCODPAG(819)
/* CHANGE AUTHORITY POUR AUTORISER SERVICE HTTP */
/* CHGAUT OBJ(&TOTXT) USER(QTMHHTTP) DTAAUT(*RX)                 */
             CHGAUT     OBJ(&TOTXT) USER(*PUBLIC) DTAAUT(*NONE) +
                          OBJAUT(*ALL)
             CHGAUT     OBJ(&TOTXT) USER(&USER) DTAAUT(*RWX) +
                          OBJAUT(*ALL)
             CHGAUT     OBJ(&TOTXT) USER(QSECOFR) DTAAUT(*RWX) +
                          OBJAUT(*ALL)
             CHGAUT     OBJ(&TOTXT) USER(GUD) DTAAUT(*RWX) OBJAUT(*ALL)

/* MENAGE            */
DLTF FILE(QTEMP/HTMTXT)
             MONMSG     MSGID(CPF0000)
DLTF FILE(QTEMP/HTMTMP)
             MONMSG     MSGID(CPF0000)
ENDPGM

FICHIER MABIBLIO/HTMLTAG : QUATRE ENREGISTREMENTS (qu’on peut créer simplement par DFU), contient les "tags" ou "balises" html, entre lesquelles les données sont insérées.


<HTML> <HEAD> <TITLE>
        </TITLE> </HEAD> <BODY BGCOLOR=#FFFFEE> <B> <PRE> <SMALL>
</SMALL><PRE></B><P align=center><SMALL><SMALL>Créé sur AS400 par
</SMALL></SMALL></P><BODY></HTML>

Les 2 CL et programmes RPG qui suivent servent à récupérer des informations ajoutées en fin de page html.

SPLWECCL

PGM PARM(&PROG)
DCL VAR(&PROG) TYPE(*CHAR) LEN(10)
/* ZONES DE TRAVAIL                                                 */
DCL VAR(&NOMSYS) TYPE(*CHAR) LEN(08)
DCL VAR(&DATE) TYPE(*CHAR) LEN(06)
DCL VAR(&DATF) TYPE(*CHAR) LEN(08)
DCL VAR(&HEURE) TYPE(*CHAR) LEN(06)
DCL VAR(&HEURF) TYPE(*CHAR) LEN(08)
DCL VAR(&JOB) TYPE(*CHAR) LEN(10)
DCL VAR(&USER) TYPE(*CHAR) LEN(10)
DCL VAR(&ENREG) TYPE(*CHAR) LEN(256)

CALL PGM(MABIBLIO/DGINFOCL) PARM(&NOMSYS &JOB &USER &DATE &HEURE)

CHGVAR VAR(%SST(&HEURF 3 4)) VALUE(':  :')
CHGVAR VAR(%SST(&HEURF 1 2)) VALUE(%SST(&HEURE 1 2))
CHGVAR VAR(%SST(&HEURF 4 2)) VALUE(%SST(&HEURE 3 2))
CHGVAR VAR(%SST(&HEURF 7 2)) VALUE(%SST(&HEURE 5 2))
CHGVAR VAR(%SST(&DATF 3 4)) VALUE('/  /')
CHGVAR VAR(%SST(&DATF 1 2)) VALUE(%SST(&DATE 1 2))
CHGVAR VAR(%SST(&DATF 4 2)) VALUE(%SST(&DATE 3 2))
CHGVAR VAR(%SST(&DATF 7 2)) VALUE(%SST(&DATE 5 2))

CHGVAR VAR(&ENREG) VALUE(&PROG *CAT ', Systeme : ' *CAT &NOMSYS -
*CAT ', poste : ' *CAT &JOB *CAT ', utilisateur : ' *CAT &USER *CAT -
', le ' *CAT &DATF *CAT ', à ' *CAT &HEURF)

DLTF FILE(QTEMP/DONNEES)
MONMSG MSGID(CPF0000)
CRTPF FILE(QTEMP/DONNEES) RCDLEN(256) OPTION(*NOSRC *NOLIST) -
SIZE(100 10 1000)
MONMSG MSGID(CPF0000)
OVRDBF FILE(DONNEES) TOFILE(QTEMP/DONNEES)
CALL PGM(MABIBLIO/SPLWEBR) PARM(&ENREG)
ENDPGM

DGINFOCL

PGM PARM(&NOMSYS &JOB &USER &DATE &HEURE)
             DCL        VAR(&NOMSYS) TYPE(*CHAR) LEN(08)
             DCL        VAR(&DATE)   TYPE(*CHAR) LEN(06)
             DCL        VAR(&HEURE)  TYPE(*CHAR) LEN(06)
             DCL        VAR(&JOB)    TYPE(*CHAR) LEN(10)
             DCL        VAR(&USER)   TYPE(*CHAR) LEN(10)

             RTVNETA    SYSNAME(&NOMSYS)
             RTVSYSVAL  SYSVAL(QDATE) RTNVAR(&DATE)
             RTVSYSVAL  SYSVAL(QTIME) RTNVAR(&HEURE)
             RTVJOBA    JOB(&JOB) USER(&USER)

ENDPGM

SPLWEBR (programme RPG3)

     FDONNEES O   F     256            DISK
     C           *ENTRY    PLIST
     C                     PARM           ZONE  256
     C                     EXCPTSORTIE
     C                     SETON                     LR
     ODONNEES E                SORTIE
     O                         ZONE     256

SPHTMAJ (programme RPG3)

0001.00      FHTMFIC  O   F     220            DISK                      A     
0002.00      E                    T       1   1 40                             
0003.00      I           UDS                                                   
0004.00      I                                     02010240 DTAARA             
0005.00      C           DTAARA    IFEQ *BLANK                                 
0006.00      C                     MOVELT,1       DTAARA                       
0007.00      C                     ENDIF                                       
0008.00      C                     EXCPTSORTIE                                 
0009.00      C                     SETON                     LR                
0010.00      OHTMFIC  EADD             SORTIE                                  
0011.00      O                         DTAARA                                  
0012.00 **                                                                     
0013.00 ETAT CREE SUR AS400