Forum iSeries, hébergé par xdocs400.com

As400, iSeries, i5, System i, une machine qui évolue pour être de plus en plus puissante.

Vous n'êtes pas identifié(e).

Annonce

ATTENTION : Le système anti-spam est à nouveau opérationnel. Nous avons réactivé les inscriptions.

#1 2017-05-16 15:30:43

pat_1980
Membre
Inscription : 2011-07-12
Messages : 108

Retrieve spool file number

Bonjour,

Comment puis-je retriever le spool file number ? Si vous avez un exemple cela serait bien pour moi.

Car je dois faire des cpysplf et j'ai besoin du Spooled file number dans cette commande.

Merci d'avance.

Hors ligne

#2 2017-05-16 15:58:49

vazymimil
Membre
Inscription : 2008-10-15
Messages : 154

Re : Retrieve spool file number

Bonjour,

lorsque le spool est produit par le programme, le spooled file number est dans l'INFDS en position 160 à 163, c'est un entier binaire sur 4 octets.

On peut connaitre le dernier numéro du job en cours avec QSPRILSP, mais dans ce cas on peut aussi faire CPYSPLF  ...SPLNBR(*LAST)

Si c'est depuis un autre job on peut utiliser QUSRSPLA avec -1 ou -2 dans le 8ème paramètre


Nicolas

Hors ligne

#3 2017-05-16 16:06:31

GAPIII
Membre
Inscription : 2010-08-13
Messages : 895

Re : Retrieve spool file number

Bonjour,
Le fichier spool est déterminé par son nom, son job et son numéro.
Du coup, on ne peut pas faire un retrieve car il faudrait connaître son numéro.
Dans la commande CPYSPLF tu peux indiquer *ONLY, *LAST ou *ANY pour copier le fichier spool :
*ONLY = Le travail n'a généré qu'un seul spool de ce nom
*LAST = Le numéro du spool de même nom du même job le plus élevé est utilisé
*ANY  = Le système se servira d'autres paramètres (système de travail, heure de création, ...) pour récupérer le numéro du spool.

Sinon, il y a l'API QUSRSPLA, mais c'est pareil. Il faudra lui donner le numéro : *ONLY ou *LAST

Hors ligne

#4 2017-05-16 17:29:01

pat_1980
Membre
Inscription : 2011-07-12
Messages : 108

Re : Retrieve spool file number

Bonjour GAPIII,

Moi je travaille actuellement sur SPLNBR(*LAST) dans cpysplf mais mon problème est que j'ai 2 spools avec le même job user number, mais le file number est différent et mon fichier d'impression reste en toujours en statut open, alors je cherche une autre moyen pour résoudre mon problème.

Merci

Hors ligne

#5 2017-05-17 08:40:12

GAPIII
Membre
Inscription : 2010-08-13
Messages : 895

Re : Retrieve spool file number

Bonjour.
Je n'ai pas tout compris, mais un spool avec un statut qui reste en open, c'est que le spool est encore en cours d'écriture, ou que SCHEDULE(*JOBEND) a été utilisé pour qu'il ne soit fermé qu'à la fin du travail.
Essaie de vérifier le SCHEDULE du fichier spool pour voir s'il est en *JOBEND ou non.
Note que dans l'API QUSRSPLA, tu peux récupérer le statut du spool et savoir s'il est encore en *OPEN ou en *CLOSED, etc ...
Peut-tu me détailler un peu plus ? Que sont ces 2 spools et viennent ils de ton propre travail ou d'un autre ?

Hors ligne

#6 2017-05-18 12:43:14

pat_1980
Membre
Inscription : 2011-07-12
Messages : 108

Re : Retrieve spool file number

Bonjour GAPIII,

Voici mon exemple de CL le 2ième fichier générer ne se met pas ready et reste en statut OPN et le programme se bloque et pars en erreur.

AVISCLICL    FBE         TEST   AVISCLICL    RDY       2
AVISCLIBQ  FBE          TEST   AVISCLIBQ    OPN       1     File becomes available . . . . . SCHEDULE       *FILEEND

PGM        PARM(&SWS &JOB &USER &NUMBER)             
DCL        VAR(&SWS) TYPE(*CHAR) LEN(8)                   
DCL        VAR(&JOB) TYPE(*CHAR) LEN(10)                   
DCL        VAR(&USER) TYPE(*CHAR) LEN(10)                 
DCL        VAR(&NUMBER) TYPE(*CHAR) LEN(6)                 
RTVJOBA    JOB(&JOB) USER(&USER) NBR(&NUMBER)             
OVRPRTF    FILE(QPRT01) TOFILE(QGPL/QPRT10) +             
              OUTQ(TEST) HOLD(*NO) SAVE(*YES) +       
              USRDTA(AVISCLICL) SPLFNAME(AVISCLICL)           
OVRPRTF    FILE(QPRINT) TOFILE(QGPL/QPRT10) +             
              OUTQ(TEST) HOLD(*NO) SAVE(*YES) +       
              USRDTA(AVISCLIBQ) SPLFNAME(AVISCLIBQ)       
CHGJOB     SWS(&SWS)                                       
CALL       PGM(AVISCLI)
CPYSPLF    FILE(AVISCLICL) TOFILE(DOCUCL/AVISCLICL) +   
             JOB(&USER/&JOB/&NUMBER) SPLNBR(*LAST) +         
             MBROPT(*ADD) CTLCHAR(*FCFC)             
MONMSG     MSGID(CPF3303)                             
MONMSG     MSGID(CPF3309)
DLTOVR     FILE(*ALL)                                     
CPYSPLF    FILE(AVISCLIBQ) TOFILE(DOCUCL/AVISCLIBQ) +   
             JOB((&USER/&JOB/&NUMBER) SPLNBR(*LAST) +             
             MBROPT(*ADD) CTLCHAR(*FCFC)                   
MONMSG     MSGID(CPF3303)                                 
MONMSG     MSGID(CPF3309)                                 
MONMSG     MSGID(CPF3341)                                 
MONMSG     MSGID(CPF3342)                                 
DLTOVR     FILE(*ALL)                                                                   
MONMSG     MSGID(CPF3341)                             
MONMSG     MSGID(CPF3342)                             
ENDPGM                                 

Merci d'avance

Hors ligne

#7 2017-05-18 13:09:23

maj
Membre
Inscription : 2011-11-24
Messages : 745

Re : Retrieve spool file number

Bonjour,

Le CPYSPLF est probablement faux, dans ton CL :

JOB(&USER/&JOB/&NUMBER)

Normalement il devrait être:

JOB(&NUMBER/&USER/&JOB)

Et concernant tes MONMSG fais plutôt :
MONMSG MSGID(CPF3303 CPF3309 CPF3341 CPF3342)   

Jean

Hors ligne

#8 2017-05-18 13:54:47

GAPIII
Membre
Inscription : 2010-08-13
Messages : 895

Re : Retrieve spool file number

Bonjour.
En complément du message de Jean, si le programme AVISCLI se termine par un return sans avoir mis l'indicateur LR à *ON, ni fermé le fichier par un close de qprint, le fichier spool peut rester en état open.
De toute manière, c'est bien &number/&user/&job qu'il fallait utiliser, ou job(*) si c'est ton propre travail, comme c'est le cas ...

Hors ligne

#9 2017-05-19 14:25:48

pat_1980
Membre
Inscription : 2011-07-12
Messages : 108

Re : Retrieve spool file number

Merci à tous pour votre aide maintenant cela fonctionne, mais j'ai un autre petit soucis, le job que je lance génère 2 spools avec le même job - user - number et la seule différence c'est le spool file number, comment puis-je récupérer ce spool file number en variable ?

CPYSPLF    FILE(QPRT01) TOFILE(DOCUCL/AVISCLICL) +
             JOB(FBE/QPRTJOB) SPLNBR(&VARIABLE) +   
             MBROPT(*ADD) CTLCHAR(*FCFC)       


Merci d'avance

Hors ligne

#10 2017-05-19 14:59:56

maj
Membre
Inscription : 2011-11-24
Messages : 745

Re : Retrieve spool file number

s'il génère 2 spools tu peux récupérer le 1er ou le 2eme ou les 2 comme tu veux :

CPYSPLF    FILE(QPRT01) TOFILE(DOCUCL/AVISCLICL) +
             JOB(FBE/QPRTJOB) SPLNBR(1) +   
             MBROPT(*ADD) CTLCHAR(*FCFC) 

et

CPYSPLF    FILE(QPRT01) TOFILE(DOCUCL/AVISCLICL) +
             JOB(FBE/QPRTJOB) SPLNBR(2) +   
             MBROPT(*ADD) CTLCHAR(*FCFC)

Hors ligne

#11 2017-05-19 15:02:10

pat_1980
Membre
Inscription : 2011-07-12
Messages : 108

Re : Retrieve spool file number

Oui si on mais cela en dur, mais ce numéro change à chaque fois ?

Hors ligne

#12 2017-05-19 15:36:00

maj
Membre
Inscription : 2011-11-24
Messages : 745

Re : Retrieve spool file number

non, si c'est un batch qui génère 2 spools ca ne changera pas.

Hors ligne

#13 2017-05-19 15:58:38

GAPIII
Membre
Inscription : 2010-08-13
Messages : 895

Re : Retrieve spool file number

Dans ton exemple, les 2 fichiers spool n'ont pas le même nom : L'un s'appelle AVISCLICL et l'autre AVISCLIBQ.
Il suffit d'un CPYSPLF AVISCLICL JOB(*) SPLNBR(*LAST) pour récupérer les relevés clients
et d'un CPYSPLF AVISCLIBQ JOB(*) SPLNBR(*LAST) pour récupérer les relevés banque.
Comme le dit Jean, le numéro des spools est en fait le numéro d'ordre du spool dans le travail. On devrait donc toujours avoir le même numéro.

Hors ligne

#14 2017-06-13 13:15:12

Bilbao400
Membre
Lieu : Bordeaux
Inscription : 2011-01-10
Messages : 351

Re : Retrieve spool file number

Bonjour,
Voici un exemple permettant de récupérer les références du dernier spoule généré dans un job :

/******************************************************************************/
/*?Nom programme : SPL020P1 Programme de traitement de la commande RTVLSTSPL  */
/*?                                                                           */
/*?Description   :                                                            */
/*?Ce programme permet de récupérer la référence du dernier spoule généré par */
/*?un JOB. Il doit être utilisé lorsque q'un job est exécuté sur un système   */
/*?distant sous l'utilisateur QUSER et que les spoules générés par ce job     */
/*?sont sous un utilisateur et un nom de job différent (QPRTJOB)              */
/*?Date Création : 06 Avril 2010                                              */
/*?Par           : Ivan Farge                                                 */
/******************************************************************************/
                                                                                
             PGM        PARM(&SPLFNAME &JOBNAME &JOBUSER &JOBNBR &SPLFNBR)      
                                                                                
             DCL        VAR(&SPLFNAME)   TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&JOBNAME)    TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&JOBUSER)    TYPE(*CHAR) LEN(10)                    
             DCL        VAR(&JOBNBR)     TYPE(*CHAR) LEN(6)                     
             DCL        VAR(&SPLFNBR)    TYPE(*CHAR) LEN(6)                     
                                                                                
/* Définition des paramètres de l'API QSPRILSP           */                     
                                                                                
             DCL        VAR(&LenRcvr) TYPE(*INT) LEN(4) VALUE(70)               
             DCL        VAR(&Format) TYPE(*CHAR) LEN(8) VALUE('SPRL0100')       
                                                                                
/* Define Qsprilsp list entry data structure */                                 
                                                                                
             DCL        VAR(&QSPRILSPDS) TYPE(*CHAR) STG(*AUTO) LEN(70)         
             DCL        VAR(&WSPLFNAME) TYPE(*CHAR) STG(*DEFINED) LEN(10) +     
                          DEFVAR(&QSPRILSPDS 9)                                 
             DCL        VAR(&WJOBNAME) TYPE(*CHAR) STG(*DEFINED) LEN(10) +      
                          DEFVAR(&QSPRILSPDS 19)                                
             DCL        VAR(&WJOBUSER) TYPE(*CHAR) STG(*DEFINED) LEN(10) +      
                          DEFVAR(&QSPRILSPDS 29)                                
             DCL        VAR(&WJOBNBR) TYPE(*CHAR) STG(*DEFINED) LEN(6) +        
                          DEFVAR(&QSPRILSPDS 39)                                
             DCL        VAR(&WSPLFNBR) TYPE(*INT) STG(*DEFINED) LEN(4) +        
                          DEFVAR(&QSPRILSPDS 45)                                
                                                                                
/* Error return code parameter for APIs */                                      
                                                                                
             DCL        VAR(&ApiErrDS) TYPE(*CHAR) LEN(256)                     
             DCL        VAR(&aProvided) TYPE(*INT) STG(*DEFINED) LEN(4) +       
                          DEFVAR(&ApiErrDS)                                     
             DCL        VAR(&aAvail) TYPE(*INT) STG(*DEFINED) LEN(4) +          
                          DEFVAR(&ApiErrDS 5)                                   
             DCL        VAR(&aMsgid) TYPE(*CHAR) STG(*DEFINED) LEN(7) +         
                          DEFVAR(&ApiErrDS 9)                                   
             DCL        VAR(&aReserved) TYPE(*CHAR) STG(*DEFINED) LEN(1) +      
                          DEFVAR(&ApiErrDS 16)                                  
             DCL        VAR(&aMsgdta) TYPE(*CHAR) STG(*DEFINED) LEN(112) +      
                          DEFVAR(&ApiErrDS 17)                                  
                                                                                
             CALL       PGM(QSPRILSP) PARM(&QSPRILSPDS &LENRCVR &FORMAT +       
                          &APIERRDS)                                            
             IF         COND(&AMSGID = ' ') THEN(DO)                            
                CHGVAR     VAR(&SPLFNAME) VALUE(&WSPLFNAME)                     
                CHGVAR     VAR(&JOBNAME) VALUE(&WJOBNAME)                       
                CHGVAR     VAR(&JOBUSER) VALUE(&WJOBUSER)                       
                CHGVAR     VAR(&JOBNBR) VALUE(&WJOBNBR)                         
                CHGVAR     VAR(&SPLFNBR) VALUE(&WSPLFNBR)                       
             ENDDO                                                              
             ELSE       CMD(DO)                                                 
                                                                                
/* Envoi du message d'anomalie de l'API QSPRILSP dans la log et  */             
/* envoi d'un message d'arrêt programme */                                      
                                                                                
                SNDPGMMSG  MSGID(&AMSGID) MSGF(QCPFMSG) MSGDTA(&AMSGDTA)        
                SNDPGMMSG  MSGID(DOC1008) MSGF(ERRMSGRPG) MSGDTA(&AMSGID +      
                             *CAT 'QSPRILSP  ' *CAT &AMSGDTA) +                 
                             MSGTYPE(*ESCAPE)                                   
             ENDDO                                                              
 FIN:        ENDPGM                                                              

Et la commande qui va avec : RTVLSTSPL

/*********************************************************************/
/*?Cette commande permet de récupérer la référence du dernier spoule */
/*?généré par un JOB. Cette commande doit être utilisée lorsque q'un */
/*?job est exécuté  sur un système distant sous l'utilisateur QUSER  */
/*?et que les spoules générés par ce job sont sous un utilisateur    */
/*?et un nom de job différent (QPRTJOB)                              */
/*?                                                                  */
/*?CRTCMD CMD(TOOLS/RTVLSTSPL) PGM(*LIBL/SPL020P1)                   */
/*?SRCFILE(TOOLSRC/QCMDSRC)                                          */
/*?SRCMBR(RTVLSTSPL) ALLOW(*BPGM *IPGM *BMOD *IMOD)                  */
/*?                                                                  */
/*?Date Création : 20/05/2010                                        */
/*?Par           : Ivan Farge                                        */
/*********************************************************************/
             CMD        PROMPT('Récupérer le dernier spoule')
             PARM       KWD(FILE) TYPE(*CHAR) LEN(10) RTNVAL(*YES) +
                          PROMPT('Variable pour nom spoule  (10)')
             PARM       KWD(JOBNAME) TYPE(*CHAR) LEN(10) RTNVAL(*YES) +
                          PROMPT('Variable pour nom job     (10)')
             PARM       KWD(USER)    TYPE(*CHAR) LEN(10) RTNVAL(*YES) +
                          PROMPT('Variable pour utilisateur (10)')
             PARM       KWD(JOBNBR)  TYPE(*CHAR) LEN(6) RTNVAL(*YES) +
                          PROMPT('Variable pour N° de job   (6)')
             PARM       KWD(SPLFNBR) TYPE(*CHAR) LEN(6) RTNVAL(*YES) +
                          PROMPT('Variable pour N° spoule   (6)') 

Description du message DOC1008 :

ID message . . . . . . . . . :   DOC1008                                    
Fichier de messages  . . . . :   ERRMSGRPG                                  
  Bibliothèque . . . . . . . :     FACOBJ                                   
                                                                            
Message . . . . :   Impossible de récupérer les références du spoule. Erreur
  &1.                                                                       
La récupération des références du spoule à l'aide de l'API &2 s'est terminée
  avec l'erreur &1. Il est probable que le fichier spoule soit vide ou      
  inexistant.                                                               
Données du message d'erreur : &3        

         Type de                              Long     Cli- 
Zone     données      Long      Décimales     var      ché  
&1       *CHAR            7                            *NO  
&2       *CHAR           10                            *NO  
&3       *CHAR          500                            *NO  

Gravité  . . . . . . . . . . :   40            
                                               
Incident dans l'historique . :   *NO           
                                               
Programme par défaut . . . . :   *NONE         
  Bibliothèque par défaut  . :                 
                                               
Niveau du message  . . . . . :   21/02/11 01   
  Niveau de modification . . :     14/11/16 06 
                                               
Option d'alerte  . . . . . . :   *NO           
                                               
Données à clicher  . . . . . :   *JOB

Hors ligne

#15 2017-06-13 14:01:48

pat_1980
Membre
Inscription : 2011-07-12
Messages : 108

Re : Retrieve spool file number

Merci à tous pour votre aide

Hors ligne

Pied de page des forums