pause-café
destinée aux informaticiens sur plateforme IBM i.
Pause-café #60
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.pdfEN 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 spoolsavec 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 jrnLa 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éesLe 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