iseriesuniversity

Monday, June 25, 2007

Deleting objects based on its creation date

The situation often demands the maintenance of the system by deleting the required. The following example, is used to identify the object of a particular type (in this example it is *JRNRCV) to be deleted based on its creation date. The cut off date considered for this example is 365 days old.

So solution has been modularized for program reusability.

The following program accepts the journal receiver library as a input parameter. It then pass on the object name and the creation date as input to the program JRNDATE.

OBJDLT
PGM PARM(&JRNRCVLIB)
DCL VAR(&JRNRCVLIB) TYPE(*CHAR) LEN(10)
DCLF FILE(QADSPOBJ)
DSPOBJD OBJ(&JRNRCVLIB/*ALL) OBJTYPE(*JRNRCV) +
OUTPUT(*OUTFILE) OUTFILE(QTEMP/QADSPOBJ)
NEXT: RCVF
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(ENDPGM))
CALL PGM(SUBBU/JRNDATE) PARM(&ODCDAT *ODOBNM)
GOTO CMDLBL(NEXT)
ENDPGM: SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('The Old +
journals have been backed up and deleted!')
ENDPGM


The program JRNDATE, get the journal receiver name and its creation date as input and deletes the old journal receivers. The current system date is also retrieved for comparison. The obsoleteness of the object is determined by calling the program CALDATE, which calculates the cut off date.

JRNDATE

PGM PARM(&DATE &JRNRCVNAM)
DCL VAR(&JRNRCVNAM) TYPE(*CHAR) LEN(10)
DCL VAR(&DATE) TYPE(*CHAR) LEN(6)
DCL VAR(&SYSDATE) TYPE(*CHAR) LEN(6)
RTVSYSVAL SYSVAL(QDATE) RTNVAR(&SYSDATE)
CALL PGM(QGPL/CALDATE) PARM(&SYSDATE &DATE)
IF COND(&DATE *LT &SYSDATE) THEN(CALL +
PGM(QGPL/JRNRCVDLT) PARM(&JRNRCVNAM))
ENDPGM

The program CALDATE is the heart of this utility. This program calculates the date, 365 days ago. The underlined statement can be modified for numeric, 365 and can be used to identify the obsolete objects.


CALDATE
PGM PARM(&IN_DATE &OUTDATE)
DCL VAR(&IN_DATE) TYPE(*CHAR) LEN(6)
DCL VAR(&OUTDATE) TYPE(*CHAR) LEN(6)
DCL VAR(&JULDATE) TYPE(*CHAR) LEN(5)
DCL VAR(&YEAR) TYPE(*CHAR) LEN(2)
DCL VAR(&DAYS) TYPE(*CHAR) LEN(3)
DCL VAR(&DECDAYS) TYPE(*DEC) LEN(5)
DCL VAR(&DECDAY2) TYPE(*DEC)
DCL VAR(&DECTEMP) TYPE(*DEC)
DCL VAR(&DECYEAR) TYPE(*DEC)
DCL VAR(&OUTDAYS) TYPE(*CHAR)
DCL VAR(&OUTYEAR) TYPE(*CHAR)
CVTDAT DATE(&IN_DATE) TOVAR(&JULDATE) FROMFMT(*DMY) +
TOFMT(*JUL) TOSEP(*NONE)
CHGVAR VAR(&YEAR) VALUE(%SST(&JULDATE 1 2))
CHGVAR VAR(&DAYS) VALUE(%SST(&JULDATE 3 3))
CHGVAR VAR(&DECDAYS) VALUE(&DAYS)
CHGVAR VAR(&DECYEAR) VALUE(&YEAR)
CHGVAR VAR(&DECTEMP) VALUE(&DECDAYS)
CHGVAR VAR(&DECDAYS) VALUE(365 - &DECDAYS)
IF COND(&DECDAYS <= 0) THEN(DO)
CHGVAR VAR(&DECDAYS) VALUE(&DECTEMP)
CHGVAR VAR(&DECYEAR) VALUE(&DECYEAR - 1)
IF COND(&DECYEAR < 0) THEN(DO)
CHGVAR VAR(&DECYEAR) VALUE(99)
ENDDO
ENDDO
ELSE CMD(DO)
CHGVAR VAR(&DECYEAR) VALUE(&DECYEAR - 1)
ENDDO
CHGVAR VAR(&OUTYEAR) VALUE(&DECYEAR)
CHGVAR VAR(&OUTDAYS) VALUE(&DECDAYS)
CHGVAR VAR(&YEAR) VALUE(%SST(&OUTYEAR 25 2))
CHGVAR VAR(&DAYS) VALUE(%SST(&OUTDAYS 30 3))
CHGVAR VAR(%SST(&JULDATE 1 2)) VALUE(&YEAR)
CHGVAR VAR(%SST(&JULDATE 3 3)) VALUE(&DAYS)
CVTDAT DATE(&JULDATE) TOVAR(&OUTDATE) FROMFMT(*JUL) +
TOFMT(*DMY) TOSEP(*NONE)
ENDPGM: ENDPGM


This utility can be used in conjunction with the "Delete detached audit journal receivers" to delete the journal receivers based on date.

You can use this source code as reference and make your own automations.

Thanks for this spending time to read this article. Please mail me at dean@iseriesuniversity.com for any further clarifications or queries.

Thank you,
Subramaniam.S

0 Comments:

Post a Comment

<< Home