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 : 98

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 : 152

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 : 886

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 : 98

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 : 886

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 : 98

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 : 716

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 : 886

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 : 98

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 : 716

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 : 98

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 : 716

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 : 886

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

Pied de page des forums