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é #60

Février 2012

Impression, gestion des spools.

 


Pour commencer, qu'est-ce qu'un fichier spool ?

 

LA FONCTION SPOOL PERMET :


         - Le partage des unités non partageables
                  (ex: imprimante )
         - La dissociation du traitement des sorties et les sorties réelles


         - Elle s'exécute dans le sous-système spool (QSPL en standard)


         - Les travaux seront soumis par la commande STRPRTWTR / STRRMTWTR


 DISSOCIATION DU TRAITEMENT DES SORTIES ET LES SORTIES REELLES
                                                                       
 Cette dissociation se fera grâce:

                 - à l'interception des ordres d'écriture vers
                   l'imprimante

                 - à l'écriture réelle vers les supports externes

 LES OUTILS DE CETTE DISSOCIATION

 Le fichier spool

  Lors de la demande de l'impression par un JOB les lignes d'édition
  seront non pas envoyées à l'imprimante mais interceptées par la fonction
  spool qui les enverra dans un membre d'un fichier spool.

  Chaque membre d'un fichier spool est identifié par le nom du fichier
  d'impression qui a permis la création de ce membre spool et par
  des informations sur le travail qui a permis la création de ce
  membre spool.



 La file d'attente de sortie (OUTQ)

    Chaque membre d'un fichier spool est référencé ("placé") dans
     une file d'attente de sortie (Output queue).

    Cette file d'attente de sortie peut être considérée comme
    une "imprimante logique".

    Elle contiendra les membres spools qui lui ont été rattachés.
    

 Le fichier d'impression.

    Interface externe entre le programme (ou la commande) produisant
     un état à imprimer et l'unité d'impression.

    Devra être créé avant son utilisation

    Contient les informations caractérisant l'état à imprimer
          Nombre de lignes - nombre de caractères par ligne
          file d'attente de sortie -  densité etc.... et la mise en page.



    Les paramètres importants d'un PRTF (modèle de spool)


        FORMSIZE  66       nombre de lignes par page
                  132      nombre de caractères par ligne

        LPI       6        nombre de lignes au pouce (Line Per Inch)
        CPI       10       nombre de caractères au pouce (Character Per Inch)

        OUTQ      *JOB     File d'attente où sera placé le fichier spool
                   ou      (*JOB celle associée au travail qui vient de la JOBD ou du profil ou du terminal)
               nom d'outq

        HOLD      *NO      état du fichier spool dans la file d'attente
                   ou      
*YES
*YES le fichier spool sera retenu

                        *NO  le fichier est dans l'état prêt
        SAVE      *NO      Conserver ou non le fichier spool dans
                   ou      l'OUTQ une fois édité
                  *YES
SCHEDULE *FILEEND  Le spool est disponible à l'impression quand le pgm passe l'ordre CLOSE                   ou      
                 *IMMED Le spool est disponible à l'impression immédiatement


 Le fonctionnement se déroule en 2 étapes :


   1 INTERCEPTION DES ORDRES D'ECRITURE.
       __________________________________          ____________
       !                                !          !paramètres! FICHIER
       !                                !     !--> ! CPI/LPI  ! IMPRIMANTE
       !     _________________          !     !  ! ! OUTQ     !
       !     !               !          !     !  ! !  .....   !
       !     ! OPEN FICIMP --!----------------!  ! !__________!
       !     ! ___________   !          !        !
       !     ! ___________   !          !        ! ____________
       !     ! ___________   !          !        ! ! ref  adr ! OUTQ
       !     ! WRITE --------!----------------!  !>!SP01  xxxx!------------
       !     !_______________!          !     !    !          !           !
       !                                !     !    !          !           !
       !                                !     !    !__________!           !
       !________________________________!     v                           !
                                             _________                    !
                                            <_________>  FICHIER <--------!
                                            ! ligne1  !  SPOOL
                                            ! ligne2  !
                                            !_________!

 

 2 EDITION REELLE (1er cas, imprimante connectée à l'AS/400) 

  
  - A un instant donné on relie une file d'attente
      de sortie à une unité physique (imprimante).

   Tous les fichiers prêts à être édités de cette file
 
     d'attente seront édités sur l'unité physique .

  • Une file d'attente ne peut à un instant donné
       alimenter qu'une seule unité physique.

  • La liaison (OUTQ - IMPRIMANTE) se fait grâce
       à une commande STRPRTWTR 

  • Il est possible de sélectionner le TYPE de papier
      (listing, 80 colonnes, doubles exemplaires,...)        seuls les états du type indiqué seront imprimés.


 



   2 EDITION REELLE (2éme possibilité, serveur d'impression)

     - A un instant donné on relie une file d'attente de sortie
       à un serveur d'impression éloigné


       Ce serveur peut être un autre AS/400, un serveur d'impression NT/Unix
Ou un boitier / attachement réseau imprimante implémentant LPD


       si le serveur peut n'est PAS un autre AS/400, l'AS/400 local convertira le spool en ascii
ET TRANSFORMERA LE FLOT EN FLOT COMPRÉHENSIBLE PAR L'IMPRIMANTE ÉLOIGNÉE
(fonction Host Print Transform)


               - l'AS/400 gère de nombreux format dont le PCL5 (plus JET direct) et le postscript
(voyez ce site pour la liste des imprimantes compatibles)


               - La liaison (OUTQ -serveur) se fait grâce
                 à une commande STRRMTWTR

               - L'AS/400 local ne se considère pas responsable des erreurs imprimante

Quelques remarques :

  • le paramètre PAGERANGE (choix des pages à imprimer) n'est pas traité dans le cas d'une OUTQ Remote.


  • Les paramètres EXPDATE et DAYS permettent d'attribuer au spool une date de péremption (ou un nombre de jours avant péremption)
    cette notion étant ensuite (mais uniquement) traitée par la commande DLTEXPSPLF.

  • System i Navigator est très pratique pour :
  • voir les spools (AFP Workbench Viewer)
  • déplacer les spools (l'option déplacement propose le choix entre imprimante et OUTQ, avec un bouton survol)
  • exporter un spool, y compris au format texte sur votre poste.
 DUPLICATION D'UN SPOOL  à l'aide des commandes système

 la première technique est la plus simple, mais elle est réservée au texte 
 Recherche des informations d'un spool par QUSRSPLA (format SPLA0200)
 Création d'un fichier physique de travail RCDLEN(lg d'une ligne + 1)   CPYSPLF .......... CTLCHAR(*FCFC)    ouverture du fichier physique (modification éventuelle du texte)
 Modification éventuelle des paramètres (FORMAT SPLA0200)
 OVRPRTF QSYSPRT CTLCHAR(*FCFC) + paramètres du format SPLA0200   CPYF du PF de travail TOFILE(QSYSPRT)
 Suppression du fichier de travail
 Les caractères de contrôle sont placés à gauche du texte sur 1 octet   et sont : ' ' = espace d'1 ligne, '0' = 2 lignes, '-' = 3 lignes             '+' = pas d'espace             '1' = saut de page           

 DUPLICATION D'UN SPOOL  par API (Flot AFP supporté) 

 création d'un user space
 recherche des informations d'un spool par QUSRSPLA (format SPLA0200)
 ouverture de l'original (QSPOPNSP)   remplissage du user space (QSPGETSP)  fermeture de l'original (QSPCLOSP)
 modification éventuelle des paramètres
 création du nouveau spool (QSPCRTSP)   écriture du nouveau spool (QSPPUTSP)  fermeture du nouveau spool (QSPCLOSP)
 suppression du user space intermédiaire

 

Sauvegarde de spools

Impossible avant la V5R40, depuis cette version il est possible maintenant de sauvegarder les spools.


Mais, par OUTQ avec le paramètre SPLFDTA(*ALL) 

    qui sauvegarde les spools d'une OUTQ en même temps que l'OUTQ elle même
    cette nouveauté est due au fait que depuis la V5R30, on sait manipuler un spool sans avoir les coordonnées du job avec QSPLFACN à *DETACH
    

sur la commande de restauration le paramètre SPLFDTA indique ce qui doit être fait :

      *NEW  les nouveaux spool doivent être restaurés
      *NONE aucun spool ne doit être restauré


    Vous remarquerez que pour restaurer un spool existant, la seule  solution est de le détruire avant de lancer la commande de restauration

 

D'autre part, la même version apporte une nouvelle valeur système :

QLOGOUTPUT : indique qui doit produire la LOG (historique papier) pour un job serveur.


            *JOBEND, l'historique est produite par le travail en fin de JOB.

            *JOBLOGSVR l'historique est produite par un "serveur de JOBLOG" (travail QJOBLOGSVR dans QSYSWRK)

 


  la nouvelle commande WRKJOBLOG, permet de voir l'historique des travaux


     le paramètre JOBLOGSTT constitue le premire critère sur le status


         *PENDING : voir les travaux ayant l'historique en instance
         *SPOOLED : voir les travaux ayant l'historique en spool


         les paramètres PERIOD (date/heure de début et de fin)  et JOB (choix sur le nom et/ou l'utilisateur) constituant les autres critères

 

  l'API QWTRMVJL permet de faire du ménage par programmation.


Conception de PRTF avec Report Designer


Ce produit est livré avec RDP (7.6 et suivantes) et vient compléter Screen Designer, puisqu'il permet de concevoir des états (PRTF) en mode visuel.

 

Il fonctionne sur les mêmes principes :

  • Travail sur des enregistrements ou des groupes (rapports)
  • palette d'outils à droite afin de glisser/déposer les éléments sur la feuille de travail


  • fenêtre propriété (par défaut en bas, à gauche) pour définir le détail d'un élément

, ici sur un format.

 

Vous devez travailler à partir de la palette en glisser/déposer.

Par exemple pour définir une nouvelle constante

 

 

Quand vous lachez la souris, la constante est créé

Saisissez alors votre texte

 

Le processus est le même pour une variable

 

 

Indiquez ensuite les propriétés de cette nouvelle zone :

  • son nom
  • son type
  • les mots-clés associés

 

 

ici, pour une zone référencée, la longueur de substitution


la référence elle même

 

Les attributs Gras et soulignement

 

Les couleurs

Dans tous les cas :

Les indicateurs

 

Liste des mots-clés

Le bouton "Accéder à la page" permet d'aller à l'onglet ou se trouve ce mot-clé.

 

Un onglet Source (en bas de la feuille de travail) permet de voir et d'éditer directement au niveau du source SDD.

 


Graphisme



-> Pour créer des fonds de page et des segments de pages (images, logos), téléchargez le dernier driver AFP à l'adresse suivante :

https://www-304.ibm.com/support/docview.wss?uid=nas1aa9f527b0d5bd6b28625738d005c528a

 

Dézippez le fichier, Installez une nouvelle imprimante sous windows en indiquant la sortie FILE: et l'option disque fourni. Choissiez C:\AFP Driver comme répertoire


Nous avons utilisez le type d'imprimante "Generic InfoPrint 600 dpi AFP"

 

Ensuite revenez sur les propriétés de cette nouvelle imprimante , option d'impression et choisissez bien le type de sortie OVERLAY

 

Imprimez un document sur cette imprimante et indiquez le fichier de sortie

Ce fichier .prn peut être affiché par AFP workbench Viewer.

Avec System i Navigator, nous allons créer le fond de page

 

puis

 

Le fond de peut maintenant être associé à un PRTF (CHGPRTF ou OVRPRTF)

ici, nous avons utilisé la touche Impr du terminal

 

Nous retrouvons le spool sous System i navigator (sorties imprimantes)

et pouvons visualiser ce dernier, qui contient bien nos données et le fond de page

 

Bien sur la fonction Host Print Transform, vous permet d'imprimer ce spool sur n'importe quelle imprimante laser de type PCL5 ou Postscript.

 

Elle permet aussi de générer des fichiers PDF avec 5761TS1

  Ce produit est livré gratuitement et implique que vous ayez installé 5761SS1/option3 et 33 (PASE)
  
 il utilise deux nouvelles fonctions associées aux PRTF :
    1/ le paramètre TOSTMF( ) demandant à ce que le PRTF génère non pas          un spool, mais un fichier stream dans l'IFS.
       Vous pouvez préciser un répertoire et le nom de fichier est généré automatiquement
       Vous pouvez préciser un nom de fichier, il ne doit pas exister quand le fichier stream est généré.

       vous devez aussi indiquer DEVTYPE(*AFPDS)
     2/ le paramètre WSCST (non obligatiore) proposant une transformation
           par objet de personnalisation lors de l'écriture du fichier stream  

       il propose, particulièrement, la valeur *PDF, qui génère ....un PDF.
Ces deux paramètres sont accessibles sur les commandes CHGPRTF et OVRPRTF
  Par exemple
   OVRPRTF QPDSPLIB DEVTYPE(*AFPDS) TOSTMF('/tmp/')        puis DSPLIB xxx  *PRINT
     génère un fichier QPDSPLIB@Dt013.afp (visualisable par AFP Workbench Viewer)
   OVRPRTF QPDSPLIB DEVTYPE(*AFPDS) TOSTMF('/tmp/') WSCST(*PDF)
     génère un fichier QPDSPLIBk3w5pz.pdf
   OVRPRTF QPDSPLIB DEVTYPE(*AFPDS) TOSTMF('/tmp/test.pdf') WSCST(*PDF)
     génère un fichier test.pdf

EN V7R1, le même produit propose une transformation du spool (SI4347)

Voyez le résultat suite à la commande WRKACTJOB OUTPUT(*PRINT)

CPYSPLF QPDSPAJB TOFILE(*TOSTMF) TOSTMF(/temp/wrkactjob.txt)
CPYSPLF QPDSPAJB TOFILE(*TOSTMF) TOSTMF(/temp/wrkactjob.tif) WSCST(QSYS/QWPTIFFG4)
CPYSPLF QPDSPAJB TOFILE(*TOSTMF) TOSTMF(/temp/wrkactjob.pdf) WSCST(*PDF)

Enfin, System i Navigator Director propose dès la version 6, dans opération de base, une navigation par utilisateur ou par imprimante :

Offrant, parmis les options, un affichage PDF possible (charge à vous ensuite de sauvegarder localement)


    Gestion des droits sur les fichiers spools.

     



    la règle est la suivante :

    par défaut, tout le monde peut accèder et manipuler ses propres spools
    avec une OUTQ DSPDTA(*YES), toute personne ayant les droits de lecture sur l'outq peut consulter les spools des autres (ce n'est pas la valeur par défaut)


    - le profil utilisateur possède un attribut droits spéciaux pouvant être *JOBCTL et/ou *SPLCTL
    - l'OUTQ en possède un paramètre OPRCTL

    • avec OPRCTL(*YES), toute personne ayant les droits *JOBCTL peut gérer tous les spools de cette OUTQ.
    • avec OPRCTL(*NO), les droits de l'OUTQ sont alors considérés pour déterminer qui peut manipuler les spools de l'OUTQ :
         > AUTCHK(*OWNER) il faut être le propriétaire de l'OUTQ
         > AUTCHK(*DTAAUT) il faut avoir les droits *CHANGE sur l'outq

    • ATTENTION le droit spécial *SPLCTL donne le droit de gérer les spools d'une OUTQ quelque soit le paramétrage de cette dernière
    (c'est un peu comme *ALLOBJ , mais sur les spools), sauf à interdir explicitement la bibliothèque de l'OUTQ (enlever le droit *Execute) .

     

     

    V7 : Nouveau point d'exit : (rappel-> visibles par WRKREGINF)

     un nouveau point d'exit QIBM_QSP_SECURITY vient compléter les règles   de sécurité existantes concernant les spools, à savoir (comme vu ci-dessus) :

      1/ l'utilisateur est *SPLCTL
      2/ l'utilisateur est *JOBCTL et l'outq est paramétrée OPRCTL(*YES)
      3/ l'utilisateur a les droits sur l'objet OUTQ lui-même.
      4/ le spool appartient à l'utilisateur concerné.


     le point d'exit vient s'ajouter aux règles précédentes en ayant la    possibilité de "forcer" un accord ou un refus d'accès à la fonction.

      cette fonction peut être une des commandes DSPSPLF, DLTSPLF, CPYSPLF etc
    .    ou bien une des API QGSLRSC, QSPMOVSP, QSPOPNSP ou enfin la fonction d'exportation d'iSeries navigator.

     

     

    Pour tout savoir sur l'impression sur IBMi , voyez les redbooks : SG24-2160 et SG24-6250

     


    Avancées (principalement DB2) apportées via PTF en versions 6 et 7

    Extrait des avancées signalées par le site IBM i Technology Updates

    (en plus du CONNECT BY et des améliorations OmniFind, déjà présentés à la dernière Pause-Café)

    • Un projet Open source sur Young I Professionals : XMLSERVICES

    • LA PTF SI44334 (encore en test) devrait apporter une nouvelle commande SNDSMTPEMM, permettant des envois de mail

    • la PTF SI44594 apporte à Client Access une nouvelle fonctionnalité pour System i Navigator.

     Sur la liste des tables, demander à choisir les colonnes par F12

    et vous pourrez faire apparaître 4 nouvelles colonnes

    • nombre de total de lignes
    • nombre de lignes supprimées
    • nombre de membres
    • taille globale

    • pour paramétrer DDM/DRDA sur IP vous pouviez enregistrer à l'avance l'ID utilisateur de connexion par ADDSRVAUTE

      • pour DRDA, par serveur
        ADDSRVAUTE USRPRF(profil_local) SERVER(autre_serveur) USRID(profil_remote) PASSWORD(motdepasse)

      • pour DDM avec QDDMSERVER
        ADDSRVAUTE USRPRF(profil_local) SERVER(QDDMSERVER) USRID(profil_remote) PASSWORD(motdepasse)


      • Vous pouvez maintenant (SF99061 level 21 et SF99071 level 11) faire une entrée générique par
        ADDSRVAUTE USRPRF(profil_local) SERVER(QDDMDRDASERVER) USRID(profil_remote) PASSWORD(motdepasse)


    • TCPIP_INFO, vue retournant des informations sur la connexion (SF99601 level 19, SF99701 level 6)



    • GROUP_PTF_INFO, vue retournant des informations sur les groupes PTF (SF99601 level 19, SF99701 level 6)
       
      PTF group name PTF group description PTF group level Target release PTF group status
      SF99707 TECHNOLOGY REFRESH 1 V7R1M0 INSTALLED
      SF99610 CUMULATIVE PTF PACKAGE C9111610 9111 V7R1M0 NOT INSTALLED
      SF99540 CUMULATIVE PTF PACKAGE C7282540 7282 V7R1M0 APPLY AT NEXT IPL
      SF99709 GROUP HIPER 15 V7R1M0 INSTALLED
      SF99701 DB2 FOR IBM I 3 V7R1M0 INSTALLED
       
       

    • évolutions GET DIAGNOSTIC (SF99601 level 21, SF99701 level 11)

      • GET DIAGNOSTICS ma_variable = ROW_COUNT
        retourne le nombre de lignes insérées suite à CREATE TABLE ou DECLARE TEMPORARY TABLE, WITH DATA

      • GET DIAGNOSTICS CONDITION 1 ma_variable = MESSAGE_TEXT
        retourne le texte du dernier message d'erreur renvoyé par une fonction (UDF) ou une fonction TABLE (UDTF) avec parameter style SQL.


    • Paramètre PROGRAM TYPE sur CREATE PROCEDURE (SF99061 level 7, de base en V7)
      • MAIN, cela créé un programme
      • SUB, cela créé un programme de service plus facilement conservé en mémoire


    • Nouvelle fonction table DISPLAY_JOURNAL (SI39822 en V6) offrant un accès aux récepteurs de journaux :
    • Select * From TABLE (Display_Journal(
      -- bib et journal 'BDVIN1', 'QSQJRN',
      -- bib et récepteur ' ', ' ',
      -- timestampt de début ou null now() - 7 days ,
      -- séquence de début ou null CAST(null as DECIMAL(21 , 0)),
      -- code journal ' ',
      -- type d'entrée ' ',
      -- bib, objet, type, membre ' ' , ' ', ' ' , ' ',
      -- profil utilisateur 'QPGMR',
      -- job ' ',
      -- pgm ' ' ) ) AS jrn

      La colonne contenant les données du poste (ENTRY_DATA) est retournée sous forme de BLOB,
       castez par CAST(ENTRY_DATA AS CHAR(2000)) pour la voir en clair.

    • ET en V7R1 (SF99701 level 3) une fonction table OBJECT_STATISTICS, retournant une liste d'objets.

         select * from table (qsys2.OBJECT_STATISTICS('BDVIN1','JRN') ) as x donne la liste des journaux de BDVIN1

         select * from table (qsys2.OBJECT_STATISTICS('BDVIN1','JRN JRNRCV') ) as x donne la liste des journaux et des récepteurs de BDVIN1

    •  

    • Nouveau paramètre en V7 sur la commande CHGPFCST CHECK(*NO) permettant de ne pas contrôler les lignes existantes lors de la remise en fonction d'une contrainte

       Attention aux risques d'erreurs que cela implique, même si cela rend la mise en fonction beaucoup plus rapide ...


        -> Cette fonctionnalité est aussi disponible en V6 (SF99061 level 6) et V5R40 (SF0504 level 18) par le biais d'une data area QDB_CHG_CST contenant 'UNCHECKED'


    • Dans le même esprit, les PTF SI43156 (V6) et SI43157 (V7) offrent un nouveau mot-clé en spécif H RPG

      VALIDATE(*NODATETIME)

         demandant la non-validation (!!!) des zones date/heure lors de lecture base de données de fichiers qui en contiennent.


    • Nouveautés STRDBMON (SF99061 level 21, SF99701 level 11)

      • Profil de groupe admis sur le paramètre FTRUSER

      • FTRSQLCODE permet de filtrer sur le code SQL avec les valeurs suivantes :
        • *NONE - pas de filtre sur SQLCODE
        • *NONZERO - tout code SQL autre que 0
        • *ERROR - tout code SQL d'erreur (< à 0)
        • *WARN - tout code SQL de Warning (> à 0)
        • <un n° de SQLCODE>


      • les variables globales PROGRAMID, APPLNAME, USERID, WRKSTNNAME et ACCTNG sont maintenant renseignées par STRSQL et RUNSQLSTM


      • Ces mêmes variables globales peuvent être des filtres sur la commande STRDBMON en V7
        • FTRCLTPGM pour PROGRAMID
        • FTRCLTAPP pour APPLNAME
        • FTRCLTUSR pour USERID
        • FTRCLTWS pour WRKSTNNAME
        • FTRCLTACG pour ACCTNG


        • dans le paramètre COMMENT en V6, par exemple COMMENT('FTRCLTPGM(STRSQL)')

      • ces informations seront placées dans le résultat du STRDBMON quand QQRID = 1000
        • QVC3006 pour PROGRAMID
        • QVC3001 pour APPLNAME
        • QVC3002 pour USERID
        • QVC3003 pour WRKSTNNAME
        • QVC3005 pour ACCTNG


    • Plus besoin d'être obligatoirement *JOBCTL pour administrer la base de données (SF99061 level 16, de base en V7) avec Administration d'applications sous System i navigator

      ou WRKFCNUSG et les fonctions QIBM_DB_SQLADM et QIBM_DB_SYSMON


                        Gestion de l'utilisation de fonctions                      

    Indiquez vos options, puis appuyez sur ENTREE.
    2=Modifier l'utilisation 5=Utilisation

    Opt ID fonction Nom de la fonction
    _ QIBM_DIRSRV_ADMIN IBM Tivoli Directory Server Administrator
    _ QIBM_ACCESS_ALLOBJ_JOBLOG Accès à l'historique de travail du travai
    _ QIBM_ALLOBJ_TRACE_ANY_USER Trace any user
    _ QIBM_WATCH_ANY_JOB Watch any job
    _ -> QIBM_DB_SQLADM Administrateur de base de données
    _ -> QIBM_DB_SYSMON Informations de base de données

    Le premier fournit l'accès aux options d'administration de la base, le deuxième un accès restreint en consultation.



    Voyez les tableaux suivants pour plus de détail






Copyright © 1995,2012 VOLUBIS