Il est possible de jouer avec la table de sélection d'un sous-système EXEMPLE 1: Vous associez au sous-système QINTER la JOBQ QINTER pour les querys utilisateurs,et vous voulez être sûr que cette JOBQ soit utilisée pour la commande RUNQRY uniquement. Nous savons que la commande soumise est placée dans l'external sous forme de message de type *RQS et qu'elle sera traitée par QCMD (Pgm indiqué dans ADDRTGE par défaut) NOUS POUVONS CHANGER CE POSTE AFIN DE PLACER LE PGM SUIVANT: PGM DCL &MSG *CHAR 512 DCL &CLE *CHAR 4 DCL &LG *DEC (3 0) DCL &DEB *DEC (3 0) DCL &LGR *DEC (3 0) DCL &RES *DEC (3 0) |
/* recupérer le message (commande à exécuter) dans l'external */ RCVMSG PGMQ(*EXT) MSGTYPE(*RQS) RMV(*NO) KEYVAR(&CLE) MSG(&MSG) /* conversion min/MAJ et cadrage à gauche */ CALL QCMDCHK PARM(&MSG 512) /* vérifier (via QCLSCAN) si cde RUNQRY */ CHGVAR &LG 512 /* lg de &msg */ CHGVAR &DEBUT 1 /* début de recherche */ CHGVAR &LGR 6 /* lg de RUNQRY /* min/MAJ-! !- cadrage*/ /* v v */ CALL QCLSCAN PARM(&MSG &LG &DEB 'RUNQRY' &LGR '1' '1' '*' &RES) /* RUNQRY non trouvé ==> travail refusé */ IF (&RES = 0) THEN(DO) SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) + MSGDTA('Commande RUNQRY non trouvée, Travail refusé') + MSGTYPE(*ESCAPE) RETURN ENDDO /* RUNQRY trouvé ==> l'ancien message est enlevé (il était déja lu) */ /* puis placement dans l'external d'une copie et enfin tfr à QCMD */ |
ELSE DO RMVMSG PGMQ(*EXT) MSGKEY(&CLE) SNDPGMMSG MSG(&MSG) TOPGMQ(*EXT) MSGTYPE(*RQS) TFRCTL QCMD ENDDO ENDPGM De la même manière les postes de sélection peuvent être utilisés plus finement pour les entrées Télécommunication. Structure de la donnée de routage pour un job télécom: 1 9 19 29 37 47 !mode ou! Device ! user-id ! "PGMEVOKE" ! nom-programme ! biblio-pgm ! ! *ANY ! APPC ! ! ! ! ! l'entrée standard est CMPVAL(PGMEVOKE 29) <-- constante "PGMEVOKE" PGM(*RTGDTA) <--- pgm indiqué en 37-56 |
Vous pouvez personnaliser en indiquant CMPVAL(nom-pgm 37) <-- comparaison sur le pgm PGM(*RTGDTA) et en plaçant cette entrée avant la précédente (N° de séquence plus petit) Par Exemple : ADDRTGE ... CMPVAL(QCNTEDDM 37) PGM(*RTGDTA) CLS(DDMCLS) Quand une demande de communication arrive sur un système cible elle est traitée par QLUS, qui cherche alors un sous-système ayant une entrée télécom adéquat (ADDCMNE) QLUS cherche d'abord une entrée sur 1/ le nom de l'unité DEV(xxx) 2/ le nom de lieu éloigné RMTLOCNAME 3/ le type d'unité DEV(*APPC,...) Si plusieurs sous-systèmes acceptent cette entrée avec un niveau de priorité identique (tous sur le paramètre DEV ou tous sur RMTLOCNAME), un nom de mode sera prioritaire à *ANY. Et enfin, en cas d'égalité,comme sur les autres entrées, le sous-système ayant cherché à acquérir ce type d'unité en premier (=le premier démarré) sera chargé d'initialiser le job correspondant. |
A noter que les jobs PCS/400 de dialogue avec le routeur sont prévus dans QCMN en standard et utilisent le nom de pgm en position 37 pour le routage. Il est possible d'ajouter des postes de routage avec un n° de séquence inférieur (toujours préférable à la modif), sur le même principe. ce qui vous permet de préciser une classe ou un pool particulier. (classe standard QGPL/QWCPCSUP) quelques programmes systèmes (à utiliser pos/37) TOPCD pgm : QTFDWNLD RMTCMD QCNTEDDM (attention cela concerne toutes les demandes DDM) impr. virt. QVPPRINT dossiers QXFSERV en règle générale, regarder le premier programme de la liste d'invocation des jobs générés par PCS |
ET ENFIN: si votre job s'aperçoit en cours de traitement qu'il doit changer de sous-système (ou de pool système), cela est possible. TFRJOB JOBQ(__) RTGDTA(QCMDI) RQSDTA(*NONE) > pour un job interactif (il faut avoir prévu une entrée JOBQ pour le sous-système). TFRBCHJOB RTGDTA(QCMDB) RQSDTA(*NONE) > pour un job batch RRTJOB RTGDTA(QCMDI) RQSDTA(*NONE) > pour re-passer dans la table de routage du MEME sous-système. ATTENTION: commandes invalides avec des travaux de groupe. |