CL & Data Areas
CLPs can easily manipulate data areas.
RTVDTAARA Command
The Retrieve Data Area (RTVDTAARA) command is used in a CL program or REXX procedure to retrieve all or part of a specified data area and copy it into a variable. RTVDTAARA does not retrieve any other attributes of the data area. Existence of the data area is not required at the time the CL program is compiled.
PGM PARM(&QUERY &LIBRARY)
DCL VAR(&LNGTEXT) TYPE(*CHAR) LEN(255) VALUE('An error occurred attempting +
to process your request. Please contact IT to help determine the +
cause of the error and repair the query program.')
DCL VAR(&TEXTLEN) TYPE(*INT)
DCL VAR(&TXTTITLE) TYPE(*CHAR) LEN(7)
DCL VAR(&TXTMSGF) TYPE(*CHAR) LEN(20)
DCL VAR(&ERRCODE) TYPE(*CHAR) LEN(16)
DCL VAR(&QUERY) TYPE(*CHAR) LEN(10)
DCL VAR(&LIBRARY) TYPE(*CHAR) LEN(10)
DCL VAR(&DFTLIB) TYPE(*CHAR) LEN(10)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
RTVDTAARA DTAARA(SC0000DA) RTNVAR(&DFTLIB)
/*-------------------------------------------------------------------*/
/* default library is &DFTLIB */
/*-------------------------------------------------------------------*/
IF COND(&LIBRARY *EQ ' ') THEN(CHGVAR +
VAR(&LIBRARY) VALUE(&DFTLIB))
DSPOBJD OBJ(&LIBRARY/*ALL) OBJTYPE(*QRYDFN) OUTPUT(*OUTFILE) +
OUTFILE(QTEMP/SC0560WF)
OVRDBF FILE(SC0560WF) TOFILE(QTEMP/SC0560WF) OVRSCOPE(*JOB)
CALL PGM(SC0560RP) PARM(&QUERY &LIBRARY)
DLTOVR FILE(SC0560WF) LVL(*JOB)
GOTO CMDLBL(EXITPGM)
ERROR: CALLSUBR SUBR(@MESSAGES)
EXITPGM: RETURN
/*===================================================================*/
MESSAGES: SUBR SUBR(@MESSAGES)
CALL PGM(QUILNGTX) PARM(&LNGTEXT &TEXTLEN +
&TXTTITLE &TXTMSGF &ERRCODE)
CALLPRC PRC(SETJOBKEY)
ENDSUBR
ENDPGM
CHGDTAARA
In the sample above the &LIBRARY parameter may be blank. The RTVDTAARA command retrieves a library name from the data area. This is the name of a default library to use in the CL process when a library name has not been passed to the program. A data area is changed by using the Change Data Area (CHGDTAARA) command. In the sample below, a data area has been created to represent the status of a process. The data area is retrieved and if the data area indicates the process is in the intial state, (*INIT), the program submits a job, and changes the data area to indicate the process has been initiated.
/*********************************************************************/
/* PROGRAM NAME - EXP501CL */
/* */
/* FUNCTION - This program launches the file expansion phase of */
/* the PNE implementation process. */
/* */
/* PROGRAMMER - STEVE CROY 02/05/2010 iSoftwerks, Inc */
/*********************************************************************/
/*********************************************************************/
/* MODIFICATION LOG */
/* */
/* DATE PROGRAMMER DESCRIPTION */
/*********************************************************************/
PGM
DCL VAR(&STATUS) TYPE(*CHAR) LEN(10)
DCL VAR(&FUNCTION) TYPE(*CHAR) LEN(10)
/*-------------------------------------------------------------------*/
/* Retrieve the status data area, if the status is not *INIT, then */
/* notifiy the user and exit the program. */
/*-------------------------------------------------------------------*/
RTVDTAARA DTAARA(EXP301DA) RTNVAR(&STATUS)
CALL PGM(EXP301RP) PARM(&STATUS &FUNCTION)
IF COND(&FUNCTION = 'EXIT') THEN(GOTO +
CMDLBL(EXITPGM))
/*-------------------------------------------------------------------*/
/* If the status retrieved was *INIT, then begin the file expansion */
/* EXP320RP to read the object list and begin expanding files. */
/*-------------------------------------------------------------------*/
IF COND(&STATUS *EQ '*INIT') THEN(DO)
CHGDTAARA DTAARA(EXP5301A) VALUE('*PROCESS ')
SBMJOB CMD(CALL PGM(EXP320RP)) JOB(EXP_FILES)
SNDPGMMSG MSGID(CPD0006) MSGF(*LIBL/QCPFMSG) +
MSGDTA(' PNE file expansion job +
EXP_FILES has been submitted. Status is +
now ' *CAT &STATUS) TOPGMQ(*EXT) +
MSGTYPE(*INFO)
ENDDO
EXITPGM:
ENDPGM