TRAVAUX DE GROUPE SUR AS/400 Les travaux de groupe sont des travaux utilisant le même écran et le même profil utilisateur,pouvant être actifs en meme temps mais s'exécutant de maniere alternée,et ce sous la même ouverture de session. ----------------- 123459/QPGMR/DSP01 --!-------------- ! 123458/QPGMR/DSP01 ---------------- --!-------------- ! !123457/QPGMR/DSP01 ! ! ! ! ! ! DSP01 ! ! ! ! ! ! QPGMR ! ! ! ! !-- 16 MAXI. 123456 ! ! ! !--/ ---------------- -----------------/ / / / / ---------------- ----------------- Travail interactif simple Travaux de groupe |
Chaque travail d'un groupe a ces propres ressources: . Attributs . n° de travail . QTEMP . *LIBL ! (mais initialisées par copie du travail . *LDA ! ayant activé ce job) Tous les travaux d'un même groupe partagent une data-area particulière qui s'appelle *GDA. (512 c) Le processus de passage d'un travail simple à des travaux de groupe est le suivant: 1/ sur un travail actif (ouverture de session realisée) il faut transformer ce travail en travail de groupe CHGGRPA 2/ pour initialiser un autre travail au sein du groupe TFRGRPJOB Chaque travail de groupe prend 1Ko de plus en memoire du fait même qu'il soit travail de groupe. |
Modifier attributs de groupe (CHGGRPA) Indiquez vos choix, puis appuyez sur Entrée. Travail de groupe . . . . . . . GRPJOB GRPJOB1 File d'attente de messages . . . MSGQ *SAME Bibliothèque . . . . . . . . . Texte 'descriptif' . . . . . . . TEXT '1er travail de groupe' Fin F3=Exit F4=Invite F5=Réafficher F12=Annuler F13=Mode d'emploi invite F24=Autres touches |
Le travail interactif ayant passé cette commande devient travail de groupe (le premier et le seul du groupe pour l'instant) La data-area *GDA est crée. Maintenant ou peut demander le transfert à un autre travail de groupe Si ce travail n'existe pas il sera initialisé,le travail actuel étant suspendu comme pour une session alternée. La difference avec la session alternée est qu'il ne sera pas nessécaire d'ouvrir une session (profil et mot de passe) le second travail de groupe utilisant forcemment le même profil. Le paramètre INLGRPPGM sera utilisé pour initialiser ce job. SI = QCMD le processus sera celui d'une ouverture de session (qcmd retrouve INLPGM ou INLMNU) SI = pgm applicatif,le pgm sera appellé. |
Transférer à travail de groupe (TFRGRPJOB) Indiquez vos choix, puis appuyez sur Entrée. Travail de groupe . . . . . . . GRPJOB GRPJOB2 Programme initial de groupe . . INLGRPPGM xxxxxxx Bibliothèque . . . . . . . . . *LIBL Texte 'descriptif' . . . . . . . TEXT 'travail de groupe n° 2' Fin F3=Exit F4=Invite F5=Réafficher F12=Annuler F13=Mode d'emploi invite F24=Autres touches |
Le second travail de groupe peut lui-meme passer la commande TFRGRPJOB. -vers un travail inconnu, ce job sera initialisé comme vu precedement -vers le travail precedent(*PRV = le travail ayant provoqué le transfert) GRPJOB2 sera alors suspendu GRPJOB1 reprendra le contrôle à l'instruction suivant TFRGRPJOB. GRPJOB1 aura alors lui-meme le même choix. La commande TFRGRPJOB n'est valide que si le travail est un travail de groupe (initialisé par un TFRGRPJOB ou ayant passée la commande CHGGRPA) La commande TFRGRPJOB admet *SELECT pour le paramètre GRPJOB Le système liste alors les travaux de groupe suspendus en offrant à l'utilisateur le choix du transfert. |
Transfert au travail de groupe Système: XXXXXXXX Travail de groupe actif : GRPJOB1 Texte . . . . . . . . . : 1er travail de groupe Indiquez votre option, puis appuyez sur Entrée. 1=Transférer à un travail de groupe ------------------Travaux de groupe en suspens------------------- Opt Travail Texte GRPJOB2 travail de groupe n° 2 GRPJOB3 travail de groupe n° 3 Fin F3=Exit F5=Réafficher F6=Démarrer un nouveau travail de groupe F12=Annuler |
La fin du pgm initial pour un travail de groupe provoque la fin du travail de groupe et le retour au travail ayant demandé le transfert vers ce job pour la derniere fois. Il est possible d'anticiper cette fin de travail par la commande ENDGRPJOB. Cette commande laisse le choix quant au travail à arreter. (dft = '*', le travail en cours) Cette commande laisse le choix quant au travail à reprendre. (dft = '*PRV', idem à une fin de pgm) valide uniquement si le job à arreter est le job en cours. Elle est equivalente à la commande SIGNOFF pour le dernier travail d'un groupe. La commande SIGNOFF arrete TOUS les travaux d'un groupe |
Arrêter un travail de groupe (ENDGRPJOB) Indiquez vos choix, puis appuyez sur Entrée. Travail de groupe . . . . . . . GRPJOB * Travail de groupe à reprendre . RSMGRPJOB *PRV Historique du travail . . . . . LOG *NOLIST Fin F3=Exit F4=Invite F5=Réafficher F12=Annuler F13=Mode d'emploi invite F24=Autres touches |
L'utilisation la plus rationnelle des travaux de groupe est de programmer les transferts via un pgm CL et d'associer ce pgm à la touche ATTN (SETATNPGM). Il faudra passer la commande SETATNPGM pour chaque travail de groupe ==> création de deux pgms: 1/ programme associé à la touche ATTN gérant les transferts. 2/ prgramme initial de chaque travail de groupe - associant le pgm 1/ à la touche ATTN - et exécutant l'option correspondant à ce job (en général traitement suivant le nom du job) La pgm 1/ utilisera alors la commande RTVGRPA permettant d'avoir des informations sur l'enchainement des travaux. |
Extraire attributs de groupe (RTVGRPA) Indiquez vos choix, puis appuyez sur Entrée. Variable pour GRPJOB (10) GRPJOB Variable pour GRPJOBL (1056) GRPJOBL Variable pour GRPJOBCNT (3 0) GRPJOBCNT Variable pour MSGQ (10) MSGQ Variable pour MSGQLIB (10) MSGQLIB Variable pour PRVGRPJOB (16) PRVGRPJOB Variable pour CTLCDE (3 0) CTLCDE Fin F3=Exit F4=Invite F5=Réafficher F12=Annuler F13=Mode d'emploi invite F24=Autres touches |
Variable pour GRPJOB (10) (GRPJOB) Désigne la variable CL qui reçoit le nom du travail de groupe. Cette variable doit être de type alphabétique et d'une longueur minimale de 10 caractères. Si le nom du travail comporte moins de caractères, la valeur est complétée à droite par des blancs. Variable pour GRPJOBL (1056) (GRPJOBL) Désigne la variable CL qui reçoit la liste des travaux du groupe. Chaque poste contient le nom, le numéro et la description du travail. !nomjob(10c)!N°(6c)!<--texte (50c)-->!nomjob...etc...! Le premier poste de la liste concerne le dernier travail actif et ainsi de suite (16 postes au maximum). La variable doit être de type alphabétique et d'une longueur minimale de 1056 caractères. Si la liste comporte moins de caractères, la valeur est complétée à droite par des blancs. |
Variable pour GRPJOBCNT (3 0) (GRPJOBCNT) Désigne la variable CL qui reçoit le nombre de travaux actifs. Cette variable décimale doit comporter 3 positions, sans virgule. Ce chiffre correspond au nombre de postes de la liste de travaux. Les travaux qui ont été annulés ne sont pas pris en compte. Variable pour MSGQ (10) (MSGQ) Désigne la variable CL qui reçoit le nom de la file d'attente de messages. Variable pour MSGQLIB (10) (MSGQLIB) Désigne la variable CL qui reçoit le nom de la bibliothèque contenant la file d'attente de messages. # |
Variable pour PRVGRPJOB (16) (PRVGRPJOB) Désigne la variable CL qui reçoit le nom et le numéro du précédent travail actif dans le groupe. Si le groupe ne contient aucun travail actif la valeur sera *NONE, Le format de la variable est le suivant !Nom-travail-groupe (10c)!n°du travail(6c)! Variable pour CTLCDE (3 0) (CTLCDE) Désigne la variable CL qui reçoit l'explication de la prise de contrôle par le travail actif du groupe. Cette variable décimale doit comprendre 3 positions, sans virgule. la reprise de contrôle par défaut est faite par le job le plus recent dans la liste des travaux de groupe. Les valeurs possibles sont les suivantes : 0 Pas de travail de groupe précédent |
10 Le travail précédent a transferé le contrôle à ce travail par TFRGRPJOB. 20 Le travail précédent s'est terminé normalement (fin du pgm initial) 30 Le travail précédent s'est terminé par ENDGRPJOB et a indiqué ce job comme job de reprise (RSMGRPJOB) 40 Le travail précédent s'est terminé par ENDGRPJOB et a indiqué un autre job comme job de reprise mais ce job (de reprise) s'est terminé, et le job en cours était le plus recent. 50 Le travail précédent s'est terminé par ENDGRPJOB ,n'a pas indiqué de job comme job de reprise (RSMGRPJOB=*PRV) et le job en cours était le plus recent. 60 Le travail précédent s'est terminé anormalement 70 Le travail précédent a été arreté par ENDJOB |
EXEMPLES: 1er exemple: faire alterner deux travaux de groupe sans menu. PGM /**************************************************************/ /* */ /* PGM ASSOCIé A LA TOUCHE ATTN */ /* => ALTERNAT job principal/menu interro */ /* */ /**************************************************************/ DCL VAR(&GRP) TYPE(*CHAR) LEN(10) DCL VAR(&TFR) TYPE(*CHAR) LEN(10) DCL VAR(&PRV) TYPE(*CHAR) LEN(16) DCL VAR(&COUNT) TYPE(*DEC) LEN(3 0) DCL VAR(&TXT) TYPE(*CHAR) LEN(50) /**************************************************************/ /* EXTRACTION NOM DE GROUPE DU TRAVAIL EN COURS */ /* SI TRAVAIL NONGRP--> INITIALISE TRAVAIL DE GROUPE*/ /**************************************************************/ RTV: RTVGRPA GRPJOB(&GRP) GRPJOBCNT(&COUNT) PRVGRPJOB(&PRV) MONMSG CPF1311 /* le travail n'est pas travail de groupe */ |
IF COND(&COUNT = 0 ) THEN(DO) CHGGRPA GRPJOB(MAIN) TEXT('Travail principal') GOTO RTV /* Pour renseigner les variables */ ENDDO /**************************************************************/ /* SI PLUS DE 2 TRAVAUX DANS LE GROUPE , */ /* CHOIX DU TRAVAIL VERS LEQUEL FAIRE LE TRANSFERT */ /* (RISQUE D'INTERFERANCE AVEC AUTRE APPLICATION UTILISANT */ /* LES TRAVAUX DE GROUPE / ASSISTANT PAR EXEMPLE ) */ /**************************************************************/ IF (&COUNT *GT 2) DO TFRGRPJOB GRPJOB(*SELECT) ENDDO ELSE DO /* nbr de jobs < ou = 2 */ /**************************************************************/ /* PASSE D'UN TRAVAIL DE GROUPE A L'AUTRE */ /* SI 2EME TRAVAIL INEXISTANT SERA INITIALSE(INLGRPPGM)*/ /**************************************************************/ IF COND(&GRP *EQ 'INTERRO') THEN(DO) |
/**************************************************************/ /* LE JOB INTERRO PEUT SE RETROUVER SEUL TRAVAIL DE GROUPE */ /* (SI L'UTLISATEUR FAIT F3 SUR SON TRAVAIL PRINCIPAL) */ /* IL DOIT être ALORS RE-ACTIVé */ /**************************************************************/ IF COND(&PRV = '*NONE') THEN(DO) CHGVAR VAR(&TFR) VALUE('MAIN') CHGVAR VAR(&TXT) VALUE('Travail principal') ENDDO ELSE CMD(CHGVAR VAR(&TFR) VALUE(&PRV)) ENDDO ELSE CMD(DO) /* JOB = MAIN */ CHGVAR VAR(&TFR) VALUE('INTERRO') CHGVAR VAR(&TXT) VALUE('Menu interrogation') ENDDO /****************************************************************/ /* TRANSFERT, SI CE TRAVAIL DE GROUPE EST DEJA INITIALISE, */ /* LE PARAMETRE INLGRPPGM EST IGNORé, SINON CE PGM EST APPELLé */ /****************************************************************/ TFRGRPJOB GRPJOB(&TFR) INLGRPPGM(INIT) TEXT(&TXT) ENDDO ENDPGM |
PGM /* pgm initial de chaque travail de groupe */ DCL VAR(&GRP) TYPE(*CHAR) LEN(10) DCL VAR(&PGM) TYPE(*CHAR) LEN(10) /**************************************************************/ /* RETROUVE LE NOM DE GROUPE DU TRAVAIL EN COURS */ /**************************************************************/ RTVGRPA GRPJOB(&GRP) /**************************************************************/ /* ACTIVATION DE LA TOUCHE ATTN */ /**************************************************************/ SETATNPGM PGM(ATTN) /**************************************************************/ /* APPEL DE PGM SUIVENT LE NOM DE GROUPE */ /**************************************************************/ IF (&GRP *EQ 'INTERRO') THEN(DO) CALL XXXXXXX ENDDO ELSE DO RTVUSRPRF INLPGM(&PGM) CALL &PGM ENDDO ENDPGM |
Autre exemple: faire alterner jusqu'à 4 travaux par un menu. Sur le menu + l'option en cours est en haute intensité (indicateur pour DSPATR(HI) ayant le même n° que l'option) + les options actives sont precedées de ">" une zone devant chaque option JOBxx ou xx est le n° de l'option. + touches de commande: F3 = fin du travail de groupe si dernier ==> CHGGRPA *NONE sinon ==> ENDGRPJOB F12 = reprise du travail en cours (fin du pgm) F21 = fenetre de commande (API QUSCMDLN) F22 = TFRGRPJOB *SELECT |
** gestion des travaux de groupe ** Le: 20/03/92 > = Actif, l'option en cours est en haute intensité > 01. Travail principal > 02. Menu support 03. Assistant > 04. P D M Choisissez une option Option : F3 = Fin du travail en cours,F12 = reprise du travail en cours F21 = ligne de commande,F22 = Liste des travaux de groupe |
PGM /* pgm associé à la touche ATTN */ DCLF GRPJOBD DCL &GRPJOB *CHAR 10 DCL &GRPJOBCNT *DEC (3 0) DCL &GRPJOBL *CHAR 1056 DCL &CTLCDE *DEC (3 0) DCL &OPTCHAR *CHAR 2 DCL &CNT *DEC (3 0) DCL &PT *DEC (4 0) /****************************************************************/ /* EXTRACTION DES ATTRIBUTS DE GROUPE */ /****************************************************************/ RTV: RTVGRPA GRPJOB(&GRPJOB) GRPJOBL(&GRPJOBL) + GRPJOBCNT(&GRPJOBCNT) /****************************************************************/ /* SI JOB N'EST GRPJOB => INITIALISATION EN TRAVAIL DE GROUPE */ /****************************************************************/ IF (&GRPJOBCNT = 0) DO CHGGRPA GRPJOB(JOB01) TEXT('Travail principal') GOTO RTV ENDDO |
/* MISE EN EVIDENCE DU JOB EN COURS */ /* INDICATEUR DSPATR(RI) EN FACE N° OPTION */ CHGVAR &IN01 '0' CHGVAR &IN02 '0' CHGVAR &IN03 '0' CHGVAR &IN04 '0' IF (&GRPJOB = 'JOB04') CHGVAR &IN04 '1' ELSE IF (&GRPJOB = 'JOB03') CHGVAR &IN03 '1' ELSE IF (&GRPJOB = 'JOB02') CHGVAR &IN02 '1' ELSE CHGVAR &IN01 '1' /* MISE EN EVIDENCE DES JOBS ACTIFS */ /* INDICATION ">" EN FACE N° OPTION */ CHGVAR &JOB01 ' ' CHGVAR &JOB02 ' ' CHGVAR &JOB03 ' ' CHGVAR &JOB04 ' ' CHGVAR &CNT 0 |
BOUCLE: CHGVAR &CNT (&CNT + 1) IF (&CNT *GT &GRPJOBCNT) GOTO IMAGE CHGVAR &PT ((&CNT * 66) - 65) IF (%SST(&GRPJOBL &PT 5) = 'JOB01') CHGVAR &JOB01 '>' IF (%SST(&GRPJOBL &PT 5) = 'JOB02') CHGVAR &JOB02 '>' IF (%SST(&GRPJOBL &PT 5) = 'JOB03') CHGVAR &JOB03 '>' IF (%SST(&GRPJOBL &PT 5) = 'JOB04') CHGVAR &JOB04 '>' GOTO BOUCLE IMAGE: SNDRCVF /****************************************************************/ /* TRAITEMENT DES TOUCHES DE COMMANDE */ /****************************************************************/ IF &IN22 RETURN /* F12 = RETOUR */ IF &IN23 DO /* F3 = FIN DU TRAVAIL DE GROUPE */ IF (&GRPJOBCNT *GT 1) ENDGRPJOB ELSE DO CHGGRPA *NONE RETURN ENDDO ENDDO |
IF &IN21 DO /* F21 = LIGNE DE CDE */ CALL QUSCMDLN GOTO IMAGE ENDDO IF &IN32 DO /* F22 = SELECTION */ TFRGRPJOB *SELECT GOTO RETOUR /* TEST DES RAISONS DU RETOUR */ ENDDO /* */ /* SI OPTION CHOISIE EST LE TRAVAIL EN COURS ==> RETURN */ /* */ CHGVAR &OPTCHAR &OPT IF (&OPTCHAR = %SST(&GRPJOB 4 2)) RETURN /* */ /* TRAITEMENT DE L'OPTION CHOISIE */ /* */ |
/* SI OPTION 1 TRANSFERT VERS JOB01 */ /* */ /* SI DEJA ACTIF INLGRPPGM IGNORé */ /* */ /* SI INACTIF APPEL DE QCMD QUI RETROUVERA LE */ /* PGM OU MENU INITIAL */ /* */ IF COND(&OPT = 1) THEN(TFRGRPJOB GRPJOB(JOB01) + INLGRPPGM(QCMD) TEXT('Travail principal')) /* */ /* POUR LES AUTRES OPTIONS C'EST TOUJOURS LE MEME PGM */ /* QUI EST APPELLE (GRPJOBCL2) */ /* */ /* ASSOCIERA AU JOB CE PGM VIA ATTN */ /* */ /* PUIS exécutERA LA COMMANDE FONCTION DU */ /* NOM DU JOB */ ELSE + IF COND(&OPT = 2) THEN(TFRGRPJOB GRPJOB(JOB02) + INLGRPPGM(GRPJOBCL2) TEXT('Menu support')) ELSE + IF COND(&OPT = 3) THEN(TFRGRPJOB GRPJOB(JOB03) + |
INLGRPPGM(GRPJOBCL2) TEXT('Assistant')) ELSE + IF COND(&OPT = 4) THEN(TFRGRPJOB GRPJOB(JOB04) + INLGRPPGM(GRPJOBCL2) TEXT('P D M')) /* OPTION INVALIDE */ ELSE GOTO IMAGE /* */ /* ANALYSE DES RAISONS DU RETOUR A CE JOB */ /* */ /* 0 = PAS DE TRAVAIL PRECEDENT */ /* 10 = RETOUR PAR TFRGRPJOB */ /* ==> FIN DE CE PGM */ /* 20 ET > = FIN DU TRAVAIL DE GROUPE PRECEDENT */ /* (FIN NORMALE OU ANORMALE OU ENDGRPJOB) */ /* ==> REAFFICHAGE IMAGE POUR CHOIX DU JOB */ /* */ RETOUR: RTVGRPA GRPJOB(&GRPJOB) CTLCDE(&CTLCDE) IF (&CTLCDE > 10) GOTO RTV ENDPGM |
PGM /* pgm intial de chaque job */ DCL &GRPJOB *CHAR 10 SETATNPGM PGM(GRPJOBCL) RTVGRPA GRPJOB(&GRPJOB) IF (&GRPJOB = 'JOB02') GO SUPPORT ELSE IF (&GRPJOB = 'JOB03') GO ASSIST ELSE IF (&GRPJOB = 'JOB04') STRPDM ELSE GO MAIN /* ou autre action */ ENDPGM |