AS400 et Bureautique Valid XHTML 1.1Cette page est conforme à la norme CSS!Mise à jour 04-2013
SOMMAIRE

Présentation
Les exemples
    Transfert de spoule par mail
    Création/envoi excel AS400
    Transfert vers excel + mail
    SQL - Client/Access
    Panneaux d'aide PNLGRP
    Création de fonds de page
    Coloriser les sources SEU
    Transférer des sources entre as400
    Lister des structures de fichiers
Télécharger les exemples

PRESENTATIONRetour en haut de page

Cette page présente quelques outils utiles dans le monde de l'as400.
On y trouvera notamment :
  • le transfert de spoule par mail,
  • la création et l'envoi de fichier excel sur l'as400,
  • l'envoi de mail,
  • la transformation de SQL en demande client/access et réciproquement

LES EXEMPLES DETAILLESRetour en haut de page

Envoi d'un spoule par mail Suiv.

Le programme permet l'envoi d'un fichier spoule par mail.

Le fichier spoule est copié dans un dossier partagé (FLR), d'où il est envoyé par SNDDST. L'utilisateur doit être déclaré dans le répertoire de distribution (WRKDIRE).
Voir ci-dessous la liste source.

    100 /*****   ENVOI DE SPOULE  PAR MAIL   *****/
    200
    300 PGM
    400
    500              DCL        VAR(&SUBJECT) TYPE(*CHAR) LEN(50)
    600              DCL        VAR(&PJ  ) TYPE(*CHAR) LEN(12)
    700              DCL        VAR(&PJ2 ) TYPE(*CHAR) LEN(30)
    800              DCL        VAR(&PMAIL) TYPE(*CHAR) LEN(100) +
    900                           VALUE('a@b.fr')
   1000              DCL        VAR(&EMAIL) TYPE(*CHAR) LEN(100) +
   1100                           VALUE('c@d.fr')
   1200              DCL        VAR(&BODY) TYPE(*CHAR) LEN(100)
   1300
   1400 /*   RAZ DU FICHIER DE TRAVAIL   */
   1500              DLTF       QTEMP/FIC
   1600              MONMSG     CPF0000
   1700              CRTPF      FILE(QTEMP/FIC) RCDLEN(200) SIZE(500000)
   1800
   1900 /*   RECUPERATION DU SPOULE  */
   2000              CPYSPLF    FILE(SPLF) TOFILE(QTEMP/FIC) SPLNBR(*LAST)
   2100
   2200 /*   TRANSFORMATION DU SPOULE EN DOCUMENT AS400 (DANS QDLS) : PJ.TXT  */
   2300              CHGVAR     VAR(&PJ) VALUE('PJ.TXT')
   2400              CHGVAR     VAR(&PJ2) VALUE('/QDLS/IRIS/' *CAT &PJ)
   2500              CPYTOSTMF  +
   2600                           FROMMBR('QSYS.LIB/QTEMP.LIB/FIC.FILE/FIC.MB+
   2700                           R') TOSTMF(&PJ2) STMFOPT(*REPLACE) +
   2800                           STMFCODPAG(*PCASCII)
   2900
   3000 /*   INDIQUER UN TEXTE CORRECT POUR LE DOCUMENT CREE. CELUI-CI SERA REPRIS +
   3100      EN TANT QU'OBJET DU MAIL                                                */
   3200              CHGVAR     VAR(&SUBJECT) VALUE('Notre commande ....')
   3300              CHGDOCD    DOC(&PJ) FLR(IRIS) DOCD(&SUBJECT) +
   3400                           USRAUT((*PUBLIC *ALL))
   3500
   3600 /*   ENVOI DU MAIL  */
   3700
   3800              CHGVAR     VAR(&BODY) VALUE(' ')
   3900              SNDDST     TYPE(*DOC) TOINTNET((&PMAIL) (&EMAIL *CC)) +
   4000                           DSTD('Description inutile mais +
   4100                           obligatoire') MSG(&BODY) SNDFMT(*NOCHG) +
   4200                           DOC(&PJ) FLR(IRIS)
   4300              DLTDLO     DLO(&PJ) FLR(IRIS)
   4400
   4500 FIN:
   4600 ENDPGM

Création et envoi de fichier excel par l'AS400 Préc.Suiv.

Le programme illustre la possibilité de créer un fichier excel directement sur l'as400 et de l'envoyer par mail.

Le fichier de données est copié dans un répertoire de l'ifs, en y ajoutant une tabulation entre chaque champ (le code x'05' devient x'09' par la conversion ebcdic-ascii).

Le fichier de données est en fait composé de deux tables; la première pour les entetes de colonne, la seconde contenant les données des lignes.
On peut inclure dans le fichier des formules de calcul. Celles-ci doivent faire référence au n° de ligne que l'enregistrement portera dans excel.

L'envoi du mail est ici réalisé par la commande freeware SNDM. Les différentes sources sont listées ci-dessous.

Entetes de colonnes
  FICHIER SOURCE  . . . . .  QDDSSRC	MEMBRE  . . . . . . . . .  TSTXLE
  SEQNBR*...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
    100
    200      A          R TSTXLEF1
    300      A            ENT1          20          COLHDG('ENTETE 1')
    400      A            ENT2          20          COLHDG('ENTETE 2')
    500      A            ENT3          20          COLHDG('ENTETE 3')
                                  * * * *  F I N  D U  S O U R C E  * * * *

ENTETE 1              ENTETE 2              ENTETE 3
Zone 1                Zone 2                Résultat
* * * F I N  D U  R A P P O R T * * *
Données
  FICHIER SOURCE  . . . . .  QDDSSRC  MEMBRE  . . . . . . . . .  TSTXLD
  SEQNBR*...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
    100
    200      A          R TSTXLDF1
    300      A            ZONE1          5S 0       COLHDG('ZONE 1')
    400      A            ZONE2          5S 0       COLHDG('ZONE 2')
    500      A            FORMUL        30          COLHDG('FORMULE')
                                  * * * *  F I N  D U  S O U R C E  * * * *

ZONE 1   ZONE 2   FORMULE
     1        2   =A2+b02
    10       20   =abs(a3-b3)
   100      200   =si(a4>b4;"plus";"moins")
     0        0   =SOMME(a2:a4)
* * * F I N  D U  R A P P O R T * * *
Texte du corps du mail
  FICHIER SOURCE  . . . . .  TSTXLSSRC  MEMBRE  . . . . . . . . .  MAIL
  SEQNBR*...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
    100 Ci-joint fichier excel ...
    200
    300 Cordialement,
    400 Didier JACQUEMART
                                  * * * *  F I N  D U  S O U R C E  * * * *
CL de traitement
  FICHIER SOURCE  . . . . .  QCLSRC  MEMBRE  . . . . . . . . .  TSTXLS
  SEQNBR*...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
    100 /**************************************************************/
    200 /*  CREATION ET ENVOI PAR MAIL DE FICHIER EXCEL               */
    300 /*                                                            */
    400 /*  DJ   18.02.2010                                           */
    500 /**************************************************************/
    600 PGM
    700              DCL        VAR(&FROM) TYPE(*CHAR) LEN(50)
    800              DCL        VAR(&TO1) TYPE(*CHAR) LEN(50)
    900              DCL        VAR(&TO2) TYPE(*CHAR) LEN(50)
   1000
   1100              CHGVAR     VAR(&FROM) VALUE('from@a.fr')
   1200              CHGVAR     VAR(&TO1) VALUE('to1@b.fr')
   1300              CHGVAR     VAR(&TO2) VALUE('to2@c.fr')
   1400
   1500              /*  * ENVOI DU MAIL                           */
   1600              /*       COPIER L'ENTETE                      */
   1700              CPYTOIMPF  FROMFILE(TSTXLE ) +
   1800                           TOSTMF('/IRIS/TSTXLS.XLS') MBROPT(*REPLACE) +
   1900                           STMFCODPAG(*PCASCII) RCDDLM(*CRLF) +
   2000                           STRDLM(*NONE) FLDDLM(X'05') DECPNT(*COMMA)
   2100              /*       COPIER LE FICHIER EN FORMAT EXCEL    */
   2200              CPYTOIMPF  FROMFILE(TSTXLD) +
   2300                           TOSTMF('/IRIS/TSTXLS.XLS') MBROPT(*ADD    ) +
   2400                           STMFCODPAG(*PCASCII) RCDDLM(*CRLF) +
   2500                           STRDLM(*NONE) FLDDLM(X'05') DECPNT(*COMMA)
   2600              /*       ENVOYER LE MAIL                      */
   2700              SNDM       FROM(&FROM) TO((&TO1) (&TO2 *N *CC)) +
   2800                           FILE(TSTXLSSRC) MBR(MAIL) SUBJECT('Test +
   2900                           excel par mail') +
   3000                           ATTACHMENT('/iris/tstxls.xls')
                                  * * * *  F I N  D U  S O U R C E  * * * *

Transfert d'un fichier sous excel et envoi par mail Préc.Suiv.

Le programme permet le transfert d'un fichier sous excel via client/access et son envoi éventuel par mail, après compression.
Il utilise pour ceci le programme, écrit en vbs, tfrxls.vbs et la demande de transfert tfrxls.dtf.

La demande de transfert a pour contraintes que le nom de fichier as400 est symbolisé par la chaine XXXXXXXXXX et celui de sortie par YYYYYYYYYY.
Le reste de la demande est pré-établi (adresse système, version d'excel, ccsid 65535 ...).
Ci-dessous l'enchaînement du dialogue.

Fichier à transférer

tfrxls1.jpg

Fichier de destination

tfrxls2.jpg

Le nom du fichier de destination reprend par défaut celui du fichier d'origine. Il est bien sûr modifiable.

Destinataire du fichier

tfrxls3.jpg

Si le destinataire n'est pas saisi, le fichier ne sera pas envoyé par mail mais simplement transféré sous excel.
Le nom peut être tapé de 3 manières :
  • entièrement,
  • semi-entièrement : le domaine est abrégé (@my=@mycompany.fr),
  • en abrégé (3 lettres) pour les destinataires les plus souvent utilisés.

Objet du mail

tfrxls4.jpg

Corps du mail

tfrxls5.jpg

Les points sont transformés en retour chariot.
Si aucun texte n'est saisi, un texte par défaut est utilisé.

Déroulement

La demande de transfert de base est complétée des noms de fichiers as400 et de destination, puis lancée via la commande dos rtopcb.
Si un envoi par mail est demandé, le fichier est compressé par winrar puis envoyé par l'objet CDO.

Transformation d'une requête SQL en demande de transfert Client/Access Préc.Suiv.

Ce petit utilitaire transforme une requête élaborée sous SQL interactif en demande de transfert Client/Access.
Les jointures par JOIN ne sont pas traitées.

Fonctionnement
La requête SQL est au préalable copiée dans le presse-papiers à partir de la session AS400.
L'appel du programme provoque la récupération de cette requête et sa transformation. Cette dernière se base sur une demande de transfert modèle, dans laquelle les instructions sql sont ensuite modifiées.
Le résultat est un nouveau fichier .dtf.

Voir dans le fichier téléchargé de plus amples explications.

Transformation d'une demande de transfert Client/Access en requête SQL Préc.Suiv.

Ce petit utilitaire opère à l'inverse du précédent pour reprendre dans SQL une demande de transfert Client/Access.
Les jointures par JOIN ne sont pas traitées.

Fonctionnement
Le programme de conversion reçoit en paramètre le nom de la demande de transfert (fichier .dtf). Ceci peut se réaliser en tirant l'icône de la demande sur l'icône du programme.
La requête SQL est disponible dans le presse-papiers, d'où il suffit de la coller.

Voir dans le fichier téléchargé de plus amples explications.

Création de panneaux d'aide Préc.Suiv.

La création d'écrans d'aide peut s'effectuer par l'intermédiaire de panneaux (objets *PNLGRP).
L'aide ainsi créée est semblable à l'aide fournie par le système et bénéficie des mêmes fonctionnalités (aide étendue, indexation, ...)

Un langage spécifique permet de définir le contenu du fichier et des différents points d'accès (les panneaux).
La création du source utilise SEU; ensuite le fichier doit être compilé et le fichier écran modifié pour faire appel aux rubriques d'aide.

Le langage est constitué de mots-clés devant respecter une certaine hiérarchie.
Les mot-clés sont précédés du caractère ":" et suivi d'un "."; ils peuvent écrits en minuscules. Les commentaires sont précédés d'un ".".

Le source commence par le mot-clé PNLGRP et se termine par EPNLGRP.
Un écran d'aide commence par HELP, qui définit le nom du panneau, et se termine par EHELP. Plusieurs panneaux peuvent être définis dans un même source.
Ensuite, divers ensembles de mots-clés permettent de définir des formats de contenus différents. Voici les principaux :
  • rubrique, introduite par le mot-clé H2 (double-brillance, souligné); il existe aussi H1,H3, et H4,
  • paragraphe, introduit par le mot-clé P,
  • liste de termes, tableau de 2 colonnes (par exemple explication synthétique des touches de fonction) utilisant les mots-clés DL et terminée par EDL; les mots-clés DTHD, DDHD,DT,DD définissent respectivement l'entête et les lignes de la liste.
  • liste numérotée, introduite par le mot-clé OL et terminée par EOL,
  • liste non numérotée, similaire à la précédente où le n° est remplacé par une puce; elle est introduite par le mot-clé UL et terminée par EUL,
  • liste simple, sans n° ni puce, introduite par le mot-clé SL et terminée par ESL,
Dans les trois derniers types de listes, les entrées sont identifiées par le mot clé LI.
Le mot clé LP définit un paragraphe à l'intérieur d'une ligne de liste.

La hiérarchie d'un groupe de panneaux peut se représenter ainsi:
Groupe de panneauxPNLGRP     
Panneau HELP    
Entete de rubrique  Hx   
Paragraphe   P  
Liste de termes   DL  
Entete liste    DTHD
DDHD
 
Ligne    DT
DD
 
Fin liste de termes   EDL  
Liste numérotée   OL  
Ligne    LI 
Paragraphe     LP
Fin liste numérotée   EOL  
Liste non numérotée   UL  
Ligne    LI 
Paragraphe     LP
Fin liste non numérotée   EUL  
Liste simple   SL  
Ligne    LI 
Paragraphe     LP
Fin liste simple    ESL  
Fin panneau EHELP    
Fin groupe de panneauxEPNLGRP     

A chaque niveau de mot-clé, les textes peuvent commencer sur la ligne du mot-clé et se continuer sur les lignes suivantes, qui ne possèdent pas de mot-clé.
La mise en page obéit aux règles suivantes :
  • les textes des lignes source sont concaténés en ignorant les espaces de fin (sauf un),
  • sur le texte concaténé, les espaces de début sont supprimés.
Les différents types de listes et paragraphes peuvent être imbriqués. Ceci se traduit par des indentations supplémentaires à l'écran.

Extrait du code source (Fichier QPLNGRP, membre SBSJBQ, type PNLGRP) :
0005.00 :PNLGRP.  
  ...
0060.00 :HELP NAME='AIDE03'.                                                 
0061.00 :H2.Fonction F10                                                     
0062.00 :P.                                                                  
0063.00 La touche F10 a une fonction particulière.                           
0064.00 Elle permet d'actualiser la liste des sous-systèmes et de ce fait    
0065.00 prend un certain temps interactif à s'exécuter.                      
0066.00 :EHELP.                                                              
  ... 
0070.00 :EPNLGRP.
Dans le source du fichier écran, l'aide est appelée par les mots clés suivants, présents soit au niveau fichier, soit enregistrement :
  • ALTHELP définit la touche d'appel de l'aide,
  • HLPTITLE donne un titre au fichier d'aide,
  • HLPPNLGRP définit quel panneau afficher,
  • HLPARA définit la zone d'écran active pour déclencher le panneau.
Extrait du code source DDS:
0009.00      A                                      ALTHELP(CA01)              
0010.00      A                                      HLPTITLE('AIDE SBSJBQ')    
0011.00      A                                      HLPPNLGRP('AIDE01' SBSJBQ) 
  ...
0074.00      A          H                           HLPPNLGRP('AIDE03' SBSJBQ)  
0075.00      A                                      HLPARA(23 25 23 52)         
Voir dans le fichier téléchargé les sources complets.

Création de fonds de page Préc.Suiv.

Il existe plusieurs manières de créer des fonds de page sur as400 :
  • l'utilitaire AFP STRAFPU, qui présente un écran en mode caractère pas très convivial pour la création de cadres et le cadrage de ceux-ci,
  • Word pour dessiner le formulaire.
C'est ici la seconde méthode qui est décrite.

Imprimer le document dans un fichier
Il faut au préalable charger le driver de l'imprimante AFP300, disponible dans client/access.
Il est important de modifier les options d'impression de l'imprimante de la façon suivante :

fondpage.jpg

Imprimer le document word sur cette imprimante, en demandant une sortie fichier, d'extension .prn.

Transférer le fichier sur l'as400
Le fichier créé est transféré sur l'as400, par exemple par une commande ftp, émise à partir du pc, comme celle-ci :
open adresse_ip_as400			
user util motpas 		
bin		
put d:\temp\fichier.prn fond			
close					
bye				
Selon la configuration du ftp sur l'as400, il peut être nécessaire de préciser la bibliothèque de destination.

Convertir le fichier en fond de page
En écran de commande as400, lancer la commande :
CRTOVL OVL(bib/fondpage) FILE(bib/fond) MBR(fond) DATATYPE(*AFPDS)
TEXT(*MBRTXT)                                                              
Utilisation du fonds de page
Le fonds de page peut être utilisé de deux façons.

La première inclut le fonds de page dans le fichier imprimante, avec les dds suivantes :
**************  Début des données  *******************************************
      A          R GH001                                                      
      A                                      OVERLAY(*LIBL/FONDPAGE 0. 0.)
Avant la première impression dans le fichier, écrire l'enregistrement définissant le fond de page.

La seconde permet d'utiliser un fichier imprimante avec ou sans dds, grâce à un ovrprtf :
OVRPRTF FILE(fichimp) DEVTYPE(*AFPDS) FRONTOVL(bib/fondpage)

Colorisation des sources SEU Préc.Suiv.

Pour améliorer la présentation et la lisibilité des sources, il est utile de pouvoir affecter des couleurs aux différentes lignes. Ceci se réalise en insérant avant les caractères à coloriser un code de contrôle. Sous client/access, on peut redéfinir les touches clavier pour faciliter la tâche.
Il suffit d'affecter à une combinaison de touches la fonction apl xx, où xx représente le code de contrôle hexadécimal de la couleur. Voir ci-dessous la liste de ces codes et les combinaisons couleur caractère / couleur de fond.
20 vert  / noir
21 noir  / vert
22 blanc / noir
23 noir  / blanc
24 vert  / noir     souligné
25 noir  / vert     souligné
26 blanc / noir     souligné
27 invisible

28 rouge / noir
29 noir  / rouge
2a rouge / noir     clignotant
2b noir  / rouge    clignotant
2c rouge / noir     souligné
2d noir  / rouge    souligné
2e rouge / noir     clignotant souligné
2f invisible

30 cyan  / noir
31 noir  / cyan
32 jaune / noir
33 noir  / jaune
34 cyan  / noir     souligné
35 noir  / cyan     souligné
36 jaune / noir     souligné
37 invisible

38 rose  / noir
39 noir  / rose
3a bleu  / noir
3b noir  / bleu
3c rose  / noir     souligné
3d noir  / rose     souligné
3e bleu  / noir     souligné
3f carré vert + vert


Transfert de sources Préc.Suiv.

FTP permet de transférer des sources d'un as400 à un autre. Le principe repose sur l'utilisation d'un fichier de sauvegarde.
Le programme MEPSRCIN présenté ci-dessous sauvegarde un fichier de sources préalablement constitué des sources à envoyer, transfère la sauvegarde sur un autre système, puis lance la restauration du fichier d'origine.

PGM                                                                 
             CLRSAVF    BIB/SAVSRC                                  
             SAVOBJ     OBJ(SRC) LIB(BIB) DEV(*SAVF) SAVF(BIB/SAVSRC)  
             OVRDBF     INPUT  BIB/QTXTSRC MBR(MEPSRCIN)            
             OVRDBF     OUTPUT BIB/QTXTSRC MBR(LOG)            
             FTP        AS400DEST
ENDPGM          
Le fichier BIB/SRC comporte les sources sélectionnées pour le transfert.
Le fichier BIB/SAVSRC est un fichier de type *SAVF, qui doit exister sur les deux systèmes.
Le fichier QTXTSRC comporte un membre MEPSRCIN, qui contient les commandes FTP à lancer. Le membre LOG est destiné à recevoir le log du transfert.

Liste du membre MEPSRCIN
User password                                                          
bin                                                                        
put bib/savsrc bib/savsrc                                                    
quote rcmd dltf bib/src                                                        
quote rcmd RSTOBJ OBJ(SRC) SAVLIB(BIB) DEV(*SAVF) SAVF(BIB/SAVSRC) RSTLIB(BIB)  
quit           

Lister des descriptions de fichiers Préc.

Cet outil permet de lister de manière lisible des descriptions de fichiers. Il permet de gérer des tables classiques, ainsi que des tables SQL, dont les noms de tables et de champs peuvent dépasser les 10 caractères habituels.

L'écran de lancement demande un nom de fichier ou un nom de table sql, et la bibliothèque à utiliser ou *LIBL.
Un programme de contrôle permet de vérifier l'exactitude des données entrées :
  • Nom de fichier OU table SQL
  • Bibliothèque obligatoire
  • Table sql existante
Les noms de tables sql doivent être transformés en leurs équivalents sur 10 caractères, afin de pouvoir utiliser les commandes du système. On trouve cette équivalence dans la table systables.
Si le nom de bibliothèque est précisé, il suffit de rechercher le nom de table et le nom de bibliothèque as400. Si le nom de bibliothèque est *LIBL, il faut faire le traitement précédent pour chacune des bibliothèques de la liblist du job.
Si la correspondance n'est pas trouvée, la table SQL n'existe pas (bibliothèque ou libl).

La phase suivante consiste à extraire plusieurs informations du fichier as400 déterminé :
  • Description du fichier pour obtenir son intitulé (DSPFD)
  • Description du fichier pour obtenir ses zones clés (DSPFD)
  • Description des champs du fichier (DSPFFD)
Les trois fichiers obtenus sont regroupés par une requête QM, laquelle sert au programme d'édition. L'édition est ensuite copiée dans un fichier texte qui peut être utilisé pour une intégration dans un traitement de texte pour réaliser une documentation.

Note sur les tables SQL
Tous les fichiers et tables sql sont décrits dans la table systables.
Les tables créées par sql peuvent comporter des noms (table et champs) dépassant les 10 caractères. Dans ce cas, l'équivalence est calculée en prenant les cinq premiers caractères et en ajoutant un n° de séquence à 5 chiffres.
Pour le nom de table, il est donné dans systables, pour les noms de champs, on les trouve dans les entetes de colonne du DSPFFD.

Par exemple, dans une table on a les champs CLIENT_NUM et CLIENT_NOM dans cet ordre, les noms as400 seront CLIEN00001 et CLIEN00002. Dans une autre table, selon l'ordre des champs, CLIENT_NUM pourra avoir un autre équivalent.
Pour les tables, même chose, notamment lorsque l'on crée des vues, selon l'ordre de création, le nom as400 pourra être différent selon les bibliothèques (entre développement, homologation et production par exemple).