TechTalk: Getting PTF Cover Lettes

Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

PTF management has come a long way since the days of OS/400 V1R1M0, but it still has some distance to go before it becomes an intuitive process.

Of all the features of the Send PTF Order (SNDPTFORD) command, the one I like best is the PTFPART parameter, which can be given the value *CVRLTR if all you want to receive is the cover letter. Of course, you can also let it default to *ALL if you want to receive everything.

IBM didn't make it easy to get to the cover letter, however. The cover letter is received into a member (named after the PTF) in database file QGPL/QAPZCOVER, something entirely unintuitive. You must then use the DSPPFM command to read it, or figure out a way to print it.

That prompted me to create the Display Cover Letter (DSPCVRLTR) command, which is listed in detail in Figures 3a and 3b (page 64). The DSPCVRLTR command can display or print the cover letter, only asking for the PTF number. Optionally you can request that the member in QAPZCOVER be removed after displaying or printing the cover letter. If you request to print the cover letter, DSPCVRLTR prompts you for the name of the output queue where the spool file is to be placed.


TechTalk: Getting PTF Cover Lettes

Figure 3A Command DSPCVRLTR

 DSPCVRLTR: CMD PROMPT('Display PTF Cover Letter') PARM KWD(PTF) TYPE(*NAME) LEN(7) SPCVAL((*CUM) + (*HIPER) (*SUMM)) MIN(1) PROMPT('PTF number') PARM KWD(SNDPTFORD) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*NO) VALUES(*YES *NO) PROMPT('Send + PTF order') PARM KWD(REMOVE) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*NO) VALUES(*YES *NO) PROMPT('Remove + after') PARM KWD(OUTPUT) TYPE(*CHAR) LEN(6) RSTD(*YES) + DFT(*) VALUES(* *PRINT) PROMPT('Output') PARM KWD(OUTQ) TYPE(Q1) PMTCTL(PC1) + PROMPT('Output queue') PARM KWD(VERSION) TYPE(*CHAR) LEN(1) DFT(2) + RANGE(1 9) PMTCTL(PC2) PROMPT('OS/400 + version') PARM KWD(RELEASE) TYPE(*CHAR) LEN(1) DFT(1) + RANGE(1 9) PMTCTL(PC2) PROMPT('OS/400 + release') PARM KWD(MODIF) TYPE(*CHAR) LEN(1) DFT(0) RANGE(0 + 9) PMTCTL(PC2) PROMPT('OS/400 modification') PC1: PMTCTL CTL(OUTPUT) COND((*EQ *PRINT)) PC2: PMTCTL CTL(PTF) COND((*EQ *CUM)) PMTCTL CTL(PTF) COND((*EQ *HIPER)) LGLREL(*OR) PMTCTL CTL(PTF) COND((*EQ *SUMM)) LGLREL(*OR) Q1: QUAL TYPE(*NAME) LEN(10) DFT(*JOB) SPCVAL((*JOB)) QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) + SPCVAL((*LIBL)) PROMPT('Library') 
TechTalk: Getting PTF Cover Lettes

Figure 3B CL program CVR001CL

 CVR001CL: + PGM PARM(&PTF &SNDPTFORD &REMOVE &OUTPUT &QUALOUTQ &VERSION + &RELEASE &MODIF) DCL VAR(&MODIF) TYPE(*CHAR) LEN(1) DCL VAR(&MSG) TYPE(*CHAR) LEN(80) DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(80) DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) DCL VAR(&OUTPUT) TYPE(*CHAR) LEN(6) DCL VAR(&OUTQ) TYPE(*CHAR) LEN(10) DCL VAR(&OUTQLIB) TYPE(*CHAR) LEN(10) DCL VAR(&PTF) TYPE(*CHAR) LEN(7) DCL VAR(&QUALOUTQ) TYPE(*CHAR) LEN(20) DCL VAR(&RELEASE) TYPE(*CHAR) LEN(1) DCL VAR(&REMOVE) TYPE(*CHAR) LEN(4) DCL VAR(&SNDPTFORD) TYPE(*CHAR) LEN(4) DCL VAR(&VERSION) TYPE(*CHAR) LEN(1) /* Translate PTF special values */ IF COND(&PTF *EQ '*CUM') THEN(CHGVAR VAR(&PTF) VALUE('SF99' *CAT + &VERSION *CAT &RELEASE *CAT &MODIF)) ELSE CMD(IF COND(&PTF *EQ '*HIPER') THEN(CHGVAR VAR(&PTF) + VALUE('SF98' *CAT &VERSION *CAT &RELEASE *CAT &MODIF))) ELSE CMD(IF COND(&PTF *EQ '*SUMM') THEN(CHGVAR VAR(&PTF) + VALUE('SF97' *CAT &VERSION *CAT &RELEASE *CAT &MODIF))) /* Break qualified name */ CHGVAR VAR(&OUTQ) VALUE(%SST(&QUALOUTQ 1 10)) CHGVAR VAR(&OUTQLIB) VALUE(%SST(&QUALOUTQ 11 10)) IF COND(&OUTQ *EQ '*JOB') THEN(DO) RTVJOBA OUTQ(&OUTQ) OUTQLIB(&OUTQLIB) ENDDO /* Validate input */ CHKOBJ OBJ(QGPL/QAPZCOVER) OBJTYPE(*FILE) MBR(&PTF) MONMSG MSGID(CPF9801) EXEC(DO) CHGVAR VAR(&MSG) VALUE('Terminal error: File QGPL/QAPZCOVER + not found.') GOTO CMDLBL(SNDERRMSG) ENDDO MONMSG MSGID(CPF9810) EXEC(DO) CHGVAR VAR(&MSG) VALUE('Terminal error: Library QGPL not + found.') GOTO CMDLBL(SNDERRMSG) ENDDO MONMSG MSGID(CPF9815) EXEC(DO) IF COND(&SNDPTFORD *EQ '*NO') THEN(DO) CHGVAR VAR(&MSG) VALUE('Cover letter not found for PTF' + *BCAT &PTF *TCAT '.') GOTO CMDLBL(SNDERRMSG) ENDDO ENDDO IF COND(&OUTPUT *EQ '*PRINT') THEN(DO) CHKOBJ OBJ(&OUTQLIB/&OUTQ) OBJTYPE(*OUTQ) MONMSG MSGID(CPF9801) EXEC(DO) CHGVAR VAR(&MSG) VALUE('Output queue' *BCAT &OUTQ *BCAT + 'not found in' *BCAT &OUTQLIB *TCAT '.') GOTO CMDLBL(SNDERRMSG) ENDDO MONMSG MSGID(CPF9810) EXEC(DO) CHGVAR VAR(&MSG) VALUE('Output queue library' *BCAT + &OUTQLIB *BCAT 'not found.') GOTO CMDLBL(SNDERRMSG) ENDDO ENDDO /* Send PTF order as requested */ CHKOBJ OBJ(QGPL/QAPZCOVER) OBJTYPE(*FILE) MBR(&PTF) MONMSG MSGID(CPF9815) EXEC(DO) IF COND(&SNDPTFORD *EQ '*YES') THEN(DO) DLTF FILE(QGPL/('P' *CAT &PTF)) MONMSG MSGID(CPF0000) SNDPTFORD PTFID(&PTF) PTFPART(*CVRLTR) RMTCPNAME(*IBMSRV) + RMTNETID(*NETATR) ORDER(*PTFID) REORDER(*YES) MONMSG MSGID(CPF0000) EXEC(DO) RCVMSG MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) + MSGF(&MSGF) MSGFLIB(&MSGFLIB) SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE) GOTO CMDLBL(ENDPGM) ENDDO ENDDO ENDDO /* Display or print cover letter */ IF COND(&OUTPUT *EQ '*') THEN(DO) DSPPFM FILE(QGPL/QAPZCOVER) MBR(&PTF) MONMSG MSGID(CPF9845) EXEC(GOTO CMDLBL(ENDPGM)) ENDDO ELSE CMD(DO) OVRPRTF FILE(QSYSPRT) OUTQ(&OUTQLIB/&OUTQ) CPYF FROMFILE(QGPL/QAPZCOVER) TOFILE(QSYSPRT) FROMMBR(&PTF) MONMSG MSGID(CPF2817) EXEC(GOTO CMDLBL(ENDPGM)) DLTOVR FILE(QSYSPRT) ENDDO IF COND(&REMOVE *EQ '*YES') THEN(RMVM FILE(QGPL/QAPZCOVER) + MBR(&PTF)) GOTO CMDLBL(ENDPGM) /* Send error message */ SNDERRMSG: + SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG) SNDPGMMSG MSGID(CPF0002) MSGF(QCPFMSG) MSGTYPE(*ESCAPE) /* End program */ ENDPGM: + ENDPGM 
BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  •  

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: