Utilisation d’un DSPF dans un CL

Comment déclarer et utiliser un DSPF dans un programme CL.

Le mieux est de voir ça
tout de suite avec un exemple concret : un programme dans lequel on demande à 
l’utilisateur de saisir l’année à  extraire et de presser la touche F6 pour lancer le
traitement.

Maquette de l’écran :

15:56:23 * * EXTRACTION EXERCICE ( N - 1 ) * * XXXXXXXXXX
2/09/98 OOOOOOOOOO
SAISIE DE L'ANNEE A EXTRAIRE

 Année à  Extraire....: 1998

F3=Annulation F6=Validation

Source du DSPF I400FM :

A DSPSIZ(24 80 *DS3)
A MSGLOC(24)
A R F1
A CA03(03 'fin de travail')
A HELP(01 'aide')
A CA06(06 'Validation')
A BLINK
A 1 2TIME
A 1 19' * * EXTRACTION EXERCICE ( N - 1 -
A ) * * '
A DSPATR(RI)
A DSPATR(UL)
A 2 2DATE
A EDTCDE(Y)
A USER 10A O 1 71
A DEVNM 10A O 2 71
A 3 24' SAISIE DE L''ANNEE A EXTRAIRE '
A DSPATR(HI)
A DSPATR(UL)
A 12 19' - Année ... Extraire....: '
A DSPATR(UL)
A DSPATR(HI)
A EXER 4Y 0B 12 46EDTCDE(Z)
A 20
AO 21 DSPATR(RI)
A 20 ERRMSG('Saisie obligatoire')
A 21 ERRMSG('Valeur incorrecte')
A 23 2'F3=Annulation'
A DSPATR(HI)
A 23 19'F6=Validation'
A DSPATR(HI)

Source du CL C400 utilisant le DSPF I400FM :

/**************************************************/
/* EXTRACTION EXERCICE ( N -1 )
                  
*/
/*
                                               
*/
/**************************************************/
PGM
DCL        VAR(&AA ) TYPE(*CHAR) LEN(2)
DCL        VAR(&CDST) TYPE(*CHAR) LEN(3)
DCL        VAR(&ANNE) TYPE(*CHAR) LEN(4)
DCL        VAR(&AN ) TYPE(*DEC) LEN(2 0)
DCL        VAR(&WEXER) TYPE(*DEC) LEN(4 0)
DCL        VAR(&DIF) TYPE(*DEC) LEN(4 0)
DCL        VAR(&MBRAID) TYPE(*CHAR) LEN(10)
VALUE(‘C40001    ‘)

/* DECLARATION DU DSPF I400FM ET CALCULS DIVERS  */
DCLF       FILE(I400FM) RCDFMT(F1)
RTVJOBA    JOB(&DEVNM) USER(&USER)
RTVSYSVAL  SYSVAL(QYEAR) RTNVAR(&AA)
CHGVAR     VAR(&AN) VALUE(&AA)
CHGVAR     VAR(&WEXER) VALUE(&AN + 1900 – 1)
CHGVAR     VAR(&EXER) VALUE(&WEXER)

/* AFFICHAGE DE L’ECRAN ET CONTROLES  */

AFFICH:      SNDRCVF    RCDFMT(F1)
             CHGVAR
     VAR(&IN20) VALUE(‘0’)
             CHGVAR
     VAR(&IN21) VALUE(‘0’)

IF COND(&IN01 *EQ ‘1’) THEN(DO)

/*  AFFICHAGE DE L’AIDE   */
CALL       PGM(CAIDE) PARM(&MBRAID)
GOTO       CMDLBL(AFFICH)
ENDDO

IF         COND(&IN03 *EQ ‘1’) THEN(GOTO
CMDLBL(FIN))

IF         COND(&EXER *EQ 0) THEN(DO)
CHGVAR     VAR(&IN20) VALUE(‘1’)
GOTO       CMDLBL(AFFICH)
ENDDO

CHGVAR     VAR(&DIF) VALUE(&WEXER – &EXER)

IF         COND(&DIF *NE 0) THEN(DO)
CHGVAR     VAR(&IN21) VALUE(‘1’)
GOTO       CMDLBL(AFFICH)
ENDDO
/* On boucle jusqu’à  ce que l’utilisateur presse la touche F6  */
IF         COND(&IN06 *NE ‘1’) THEN(GOTO
CMDLBL(AFFICH))
CHGVAR     VAR(&ANNE) VALUE(&EXER)
SBMJOB     CMD(CALL PGM(C410A) PARM(&ANNE)) JOB(EXTRAC)
JOBD(GIELIBN) +
           HOLD(*YES)
SNDMSG     MSG(‘L »extraction de l »exercice est +
           soumise à  la file d »attente
de travaux.’) TOMSGQ(&DEVNM)
FIN:       ENDPGM

Print Friendly, PDF & Email