星期三, 11月 01, 2023

2002-03-11 如何在未知 AS/400 Product number 狀況下,查 AS/400 上有無安裝某個 PTF ?


如何在未知 AS/400 Product number 狀況下,查 AS/400 上有無安裝某個 PTF ?

指令 DSPPTF 需要 AS/400 Produce LICPGM 代碼才能查詢 PTF 狀態,
若要針對某已知編號的 PTF 快速查詢,但不知道 AS/400 Produce 
LICPGM 代碼則很難利用 DSPPTF 查詢。例如 IBM 工程師常會詢問
系統有無安裝某個 PTF 時,利用此命令 XDSPPTF 可以讓你快速找
到所指定的 PTF 是否已安裝,若已安裝,則可顯示該 PTF 的相關資訊。
            


FILE  : QCLSRC
MEMBER: XDSPPTFC
TYPE  : CLP
Usage : CRTCLPGM PGM(XDSPPTFC) SRCFILE(QCLSRC) 

            

             PGM        PARM(&PTFID) /* Display  PTF */                
             DCL        VAR(&PTFID) TYPE(*CHAR) LEN(7)                 
             DCL        VAR(&OUTVAR) TYPE(*CHAR) LEN(19)               
             DCL        VAR(&PTFINFO) TYPE(*CHAR) LEN(50) +            
                          VALUE('???????*ONLY  ')                      
             DCL        VAR(&ERRCDE) TYPE(*CHAR) LEN(56) +             
                          VALUE(X'00000038')                           
             DCL        VAR(&LICPGM) TYPE(*CHAR) LEN(7)                
             DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7) /* Std err */   
             DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(100) /* Std err */
             DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10) /* Std err */   
             DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) /* Std err */
                                                                       
             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(STDERR1))      
             CHGVAR     VAR(%SST(&PTFINFO 1 7)) VALUE(&PTFID)          
             CALL       PGM(QPZRTVFX) PARM(&OUTVAR X'00000013' +       
                          &PTFINFO 'PTFR0100' &ERRCDE)                 
             CHGVAR     VAR(&LICPGM) VALUE(%SST(&OUTVAR 13 7))         
             CHGVAR &MSGID %SST(&ERRCDE 9 7)                           
             IF         COND(&MSGID *NE '       ') THEN(DO)            
             CHGVAR &MSGDTA %SST(&ERRCDE 17 39)                       
             SNDPGMMSG  MSGID(&MSGID) MSGF(QCPFMSG) MSGDTA(&MSGDTA) + 
             MSGTYPE(*ESCAPE)                                         
             ENDDO                                                    
             ELSE       CMD(DSPPTF LICPGM(&LICPGM) SELECT(&PTFID))    
             GOTO       CMDLBL(EINDE)                                 
                                                                      
 STDERR1:    RCVMSG     MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) MSGFLIB(&MSGFLIB)               
             IF         (&MSGID *EQ '       ') GOTO STDERR3           
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +          
                          MSGDTA(&MSGDTA) MSGTYPE(*DIAG)              
             GOTO       STDERR1 /* Loop back for addl diagnostics */  
 STDERR3:    RCVMSG     MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                          MSGF(&MSGF) MSGFLIB(&MSGFLIB)               
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +          
                          MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)            
                                                                      
 EINDE:   /**/                                                        
             ENDPGM     
            


FILE  : QCMDSRC
MEMBER: XDSPPTF
TYPE  : CMD
Usage : CRTCMD CMD(XDSPPTF) PGM(XDSPPTFC) SRCFILE(QCMDSRC)

            

CMD        PROMPT('Display PTF')                  
PARM       KWD(PTFID) TYPE(*CHAR) LEN(7) MIN(1) + 
             FULL(*YES) PROMPT('PTF number')     
            




沒有留言: