Page 1 sur 1

Affichage données par défaut dans une Commande AS400

Posté : lun. 15 avr. 2013, 17:30:59
par ppailley
Bonjour,

Je cherche à afficher une valeur stockée dans une dataara (lib et nom d'une jobd) dans une commande.

Dtaara : exemple
Valeur
Position *...+....1....+....2....+....3....+....4....+....5
0 'NOMJOBD LIBJOBD '
50 ' '

et à l'appel de la commande, la zone jobd et librairie se remplissent automatiquement :
Job Description . . . . . . . . NOMJOBD Nom
Librairie Jobd . . . . . . . . LIBJOBD Nom, *LIBL

Auriez vous une solution ou une piste de recherche que je n'aurai pas vu ?
(et surtout, après pas mal de recherches sur le Net) ....

Merci.

Prompt Override Program

Posté : mar. 16 avr. 2013, 07:18:26
par cmasse
Je pense qu'il faut utiliser la notion de Prompt Overide Program (paramètre PMTOVRPGM sur la cde CRTCMD)

Ce pgm est appelé lors de l'invite et est chargé de fournir les val. par dft.

les paramètres KEYPARM(*yes) sont affichés dans un premier temps (s'il y en a), les autres après l'appel au Prompt Overide Program.

Exemple :

Code : Tout sélectionner

/*------------------------------------------------------------------*/
/*                                                                  */
/*  Essai de pgm avec programme d'Overide                           */
/*     Les paramètres affichés avant l'overide = KEYPARM(*yes)      */
/*     (à compiler avec le paramètre PMTOVRPGM(bib/pgmovr).)        */
/*------------------------------------------------------------------*/
/*                                                                  */
             CMD        PROMPT('Modification du prop. d''un obj')
/* Bibliothèque/OBJET                                               */
             PARM       KWD(OBJ) TYPE(QUAL1) KEYPARM(*YES) MIN(1) +
                          PROMPT('OBJET')
 QUAL1:      QUAL       TYPE(*NAME) LEN(10)
             QUAL       TYPE(*NAME) LEN(10) DFT(*LIBL) +
                          SPCVAL((*LIBL) (*CURLIB)) +
                          PROMPT('Bibliothèque')
/* TYPE                                                             */
             PARM       KWD(TYPE) TYPE(*CHAR) LEN(10) MIN(1) +
                          KEYPARM(*YES) PROMPT('TYPE')
/* PROPRIETAIRE                                                     */
             PARM       KWD(NEWOWN) TYPE(*NAME) LEN(10) MIN(1) +
                          PROMPT('NOUVEAU PROP.')
source du Prompt Overide Program

Code : Tout sélectionner

PGM PARM(&CMD &FULLOBJ &OBJTYPE &RESTE)


 /* DECLARATION DES PARAMETRES RECUS */
  DCL &CMD     *CHAR 10  /*  NOM DE LA COMMANDE                      */
  DCL &FULLOBJ *CHAR 20  /*  NOM QUALIFIE OBJET                      */
  DCL &OBJTYPE *CHAR 10  /*  TYPE DE L'OBJET                         */
  DCL &RESTE   *CHAR 20  /*  VARIABLE DE RETOURS                     */
 /* DECLARATION DES ZONES DE TRAVAIL                                 */
  DCL &BIN     *CHAR 02  X'0014' /* ZONE BIN 12    LONGUEUR A PASSEE */
  DCL &OBJ *CHAR 10      /*  OBJET                                   */
  DCL &LIB *CHAR 10      /*  BIBLIOTHEQUE                            */
  DCL &OWN *CHAR 10      /*  PROPRIETAIRE ACTUEL                     */


             CHGVAR     VAR(&LIB) VALUE(%SST(&FULLOBJ 11 10))
             CHGVAR     VAR(&OBJ) VALUE(%SST(&FULLOBJ 01 10))
             RTVOBJD    OBJ(&LIB/&OBJ) OBJTYPE(&OBJTYPE) OWNER(&OWN)
MONMSG     MSGID(CPF0000) EXEC(DO)
CHGVAR &OWN 'ERREUR'
ENDDO
 /* FORMATAGE DU RESTE                                           */
 /*        1   A   02   LONGUEUR A TRANSMETTRE EN BINAIRE        */
 /*     02+1   A   N    VARIABLE A TRANSMETTRE                   */
 /*                     NOMPARM(&VAR)                            */
 /*  NOM DU PARAMETRE -----^      ^-- VALEUR DU PARAMETRE        */
             CHGVAR     VAR(%SST(&RESTE  01 02))  VALUE(&BIN)
             CHGVAR     VAR(%SST(&RESTE  03 07))  VALUE('NEWOWN(')
             CHGVAR     VAR(%SST(&RESTE  11 10))  VALUE(&OWN)
             CHGVAR     VAR(%SST(&RESTE  20 01))  VALUE(')')
ENDPGM

(sans texte)

Posté : mar. 16 avr. 2013, 08:51:58
par ppailley
Merci bcp. Je teste et vous renverrai le résultat.

(sans texte)

Posté : mar. 16 avr. 2013, 10:31:29
par ppailley
J'ai un problème de retour de paramètre car on ne peut renvoyer une valeur que sur 1 seul Qualificatif.

Rappel : Parm JOBD avec 2 qualificatifs

Code : Tout sélectionner

             PARM       KWD(JOBD) TYPE(Q1) MIN(1) PROMPT('Job +   
                          Description')                           
 Q1:         QUAL       TYPE(*NAME) LEN(10)                       
             QUAL       TYPE(*NAME) LEN(10) DFT(*LIBL) +          
                          SPCVAL((*LIBL)) PROMPT('Bibliothèque')  

En debug,
Ma valeur de &RESTE : je concatène JOBD+LIB

Code : Tout sélectionner

 *...+....1....+....2....+....3..
'JOBD(JOBDTSTMVXLIBJOBD       ' 
j'ai le msg suivant :
CPD0074 La valeur 'JOBDTSTMVX' de JOBD comporte plus de 10 caractères.
Voyez vous une astuce pour un POP sur un Paramètre à 2 qualificatifs ?

Ou biensur :
La solution basique consiste à transformer le parm JOBD avec 2 qualificatif en 2 Parm distincts : JOBD et LIBJOBD.
Mais c'est moins joli :(

(sans texte)

Posté : mar. 16 avr. 2013, 14:37:45
par ppailley
Pb solutionné en concaténant les deux paramétres remplis dans la variable RESTE.

Voir exemple sous doc IBM.
http://publib.boulder.ibm.com/infocente ... mst250.htm