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 :
- Afficher le spool (WRKSPLF ou WRKOUTQ), entrer l’option 8 en face de l’état voulu ;
- Noter les informations du haut de l’écran (travail, utilisateur, numéro, fichier, numéro) ;
- Entrer ces information dans le même ordre, ainsi qu’un nom court (qui sera le nom du fichier), et un texte long expliquant le contenu de l’état.
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. Cela 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')
/* 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