PAL の監視(WATCH) V6R1編

V6R1 から PAL (Product Activity Log) も監視対象にすることができるようになりました。
(→ V5R4 ではできない、ということです)

"PAL" って何? という方もけっこういるとは思いますが…
↓の「プロダクト活動ログ」に記録されるもの(英語にすると Product Activity Log = PAL ですね)をいいます。

またさらに言うと、実は要するに System Reference Code のことになります。


監視の開始

STRWCH コマンドで WCHPAL パラメータに監視対象とする PAL を指定します。

STRWCH SSNID(WCH_PAL) WCHPGM(APITEST/WCH_PAL) WCHPAL((*ALL))

監視状況の確認

WRKWCH コマンドで監視状況の確認ができます。

↑の画面で、オプション 5 の「表示」を実行すると↓のような画面になります。
「SRC」のところに監視対象とした PAL が表示されます。

プログラム例

単純に通知された PAL の情報をテーブルに書き込むようにしたプログラム例です。

      *
      *    CREATE TABLE APITEST/PAL
      *           (src           CHAR(8) NOT NULL WITH DEFAULT,
      *            devname       CHAR(10) NOT NULL WITH DEFAULT,
      *            devtype       CHAR(4) NOT NULL WITH DEFAULT,
      *            model         CHAR(4) NOT NULL WITH DEFAULT,
      *            srlnbr        CHAR(15) NOT NULL WITH DEFAULT,
      *            rscname       CHAR(10) NOT NULL WITH DEFAULT,
      *            logid         CHAR(8) NOT NULL WITH DEFAULT,
      *            paltime       CHAR( 8) NOT NULL WITH DEFAULT,
      *            refcode       CHAR(4) NOT NULL WITH DEFAULT,
      *            secondcode    CHAR(8) NOT NULL WITH DEFAULT,
      *            tableid       CHAR( 8) NOT NULL WITH DEFAULT,
      *            sequence      DEC(10, 0),
      *            ofscmpdata    DEC(10, 0),
      *            lencmpdata    DEC(10, 0),
      *            cmpageinst    CHAR(10) NOT NULL WITH DEFAULT,
      *            palcmpdata    CHAR(128) NOT NULL WITH DEFAULT,
      *            KEY_TIMESTAMP TIMESTAMP NOT NULL WITH DEFAULT)
      *
      *     CRTSQLRPGI OBJ(APITEST/WCH_PAL) SRCFILE(APITEST/QRPGLESRC)
      *                COMMIT(*NONE) DBGVIEW(*SOURCE)
      *
      *     STRWCH SSNID(WCH_PAL) WCHPGM(APITEST/WCH_PAL) WCHPAL((*ALL))
      *
      *     You can see this WCH working under QUSRWRK by WRKWCH *ALL
      *
     H DFTACTGRP(*NO)
      *
     D wch_pal         PR
     D  type                         10
     D  session                      10
     D  error                        10
     D  data                               LIKEDS(DATA)
     D wch_pal         PI
     D  pType                        10
     D  pSession                     10
     D  pError                       10
     D  pData                              LIKEDS(DATA)
      *
     D data            DS          1000    qualified
     D  src                           8    OVERLAY(data:5)
     D  device                       10    OVERLAY(data:13)
     D  devicetype                    4    OVERLAY(data:23)
     D  model                         4    OVERLAY(data:27)
     D  serial                       15    OVERLAY(data:31)
     D  rscname                      10    OVERLAY(data:46)
     D  logid                         8    OVERLAY(data:56)
     D  paltime                       8    OVERLAY(data:64)
     D  refcode                       4    OVERLAY(data:72)
     D  secondcode                    8    OVERLAY(data:76)
     D  tableid                       8    OVERLAY(data:84)
     D  rsvd1                         1    OVERLAY(data:92)
     D  sequence                     10i 0 OVERLAY(data:93)
     D  ofscmpdata                   10i 0 OVERLAY(data:97)
     D  lencmpdata                   10i 0 OVERLAY(data:101)
     D  cmpagainst                   10    OVERLAY(data:105)
      *
     D pCmpData        S               *
     D cmpdata         S             75    based(pCmpData)
      *
     D APIErr          DS                  qualified
     D  ErrSize                      10i 0 inz(%size(APIErr))
     D  Errlen                       10i 0 inz(0)
     D  ErrID                         7a
     D  rsvd                          1a
     D  ErrData                   32767a
      *
      /free

          if (%trimR(pType) = '*PAL') ;

              pCmpData = %addr(pData) + pData.ofscmpdata ;

              exec SQL
                   INSERT INTO APITEST/PAL
                     VALUES(
                           :pData.src,
                           :pData.device,
                           :pData.devicetype,
                           :pData.model,
                           :pData.serial,
                           :pData.rscname,
                           :pData.logid,
                           :pData.paltime,
                           :pData.refcode,
                           :pData.secondcode,
                           :pData.tableid,
                           :pData.sequence,
                           :pData.ofscmpdata,
                           :pData.lencmpdata,
                           :pData.cmpagainst,
                           :cmpdata,
                           CURRENT_TIMESTAMP
                          ) ;

              pError = *blanks;

          endif;

          *inLR = *on;
          return;

      /end-free

↑のプログラムに、PAL が発生したことで通知を受け取った際に特定のメッセージ待ち行列へメッセージを送信する機能を追加したものが↓になります。

      *                                                                                             
      *    CREATE TABLE APITEST/PAL                                                                 
      *           (src           CHAR(8) NOT NULL WITH DEFAULT,                                     
      *            devname       CHAR(10) NOT NULL WITH DEFAULT,                                    
      *            devtype       CHAR(4) NOT NULL WITH DEFAULT,                                     
      *            model         CHAR(4) NOT NULL WITH DEFAULT,                                     
      *            srlnbr        CHAR(15) NOT NULL WITH DEFAULT,                                    
      *            rscname       CHAR(10) NOT NULL WITH DEFAULT,                                    
      *            logid         CHAR(8) NOT NULL WITH DEFAULT,                                     
      *            paltime       CHAR( 8) NOT NULL WITH DEFAULT,                                    
      *            refcode       CHAR(4) NOT NULL WITH DEFAULT,                                     
      *            secondcode    CHAR(8) NOT NULL WITH DEFAULT,                                     
      *            tableid       CHAR( 8) NOT NULL WITH DEFAULT,                                    
      *            sequence      DEC(10, 0),                                                        
      *            ofscmpdata    DEC(10, 0),                                                        
      *            lencmpdata    DEC(10, 0),                                                        
      *            cmpageinst    CHAR(10) NOT NULL WITH DEFAULT,                                    
      *            palcmpdata    CHAR(128) NOT NULL WITH DEFAULT,                                   
      *            KEY_TIMESTAMP TIMESTAMP NOT NULL WITH DEFAULT)                                   
      *                                                                                             
      *     CRTSQLRPGI OBJ(APITEST/WCH_PAL) SRCFILE(APITEST/QRPGLESRC)                              
      *                COMMIT(*NONE) DBGVIEW(*SOURCE)                                               
      *                                                                                             
      *     STRWCH SSNID(WCH_PAL) WCHPGM(APITEST/WCH_PAL2) WCHPAL((*ALL))                            
      *                                                                                             
      *     You can see this WCH working under QUSRWRK by WRKWCH *ALL                               
      *                                                                                             
     H DFTACTGRP(*NO)                                                                               
      *                                                                                             
     D wch_pal2        PR                                                                           
     D  type                         10                                                             
     D  session                      10                                                             
     D  error                        10                                                             
     D  data                               LIKEDS(DATA)                                             
     D wch_pal2        PI                                                                           
     D  pType                        10                                                             
     D  pSession                     10                                                             
     D  pError                       10                                                             
     D  pData                              LIKEDS(DATA)                                             
      *                                                                                             
     D data            DS          1000    qualified                                                
     D  src                           8    OVERLAY(data:5)                                          
     D  device                       10    OVERLAY(data:13)                                         
     D  devicetype                    4    OVERLAY(data:23)                                         
     D  model                         4    OVERLAY(data:27)                                         
     D  serial                       15    OVERLAY(data:31)                                         
     D  rscname                      10    OVERLAY(data:46)                                         
     D  logid                         8    OVERLAY(data:56)                                         
     D  paltime                       8    OVERLAY(data:64)                                         
     D  refcode                       4    OVERLAY(data:72)                                         
     D  secondcode                    8    OVERLAY(data:76)                                         
     D  tableid                       8    OVERLAY(data:84)                                         
     D  rsvd1                         1    OVERLAY(data:92)                                         
     D  sequence                     10i 0 OVERLAY(data:93)                                         
     D  ofscmpdata                   10i 0 OVERLAY(data:97)                                         
     D  lencmpdata                   10i 0 OVERLAY(data:101)                                        
     D  cmpagainst                   10    OVERLAY(data:105)                                        
      *                                                                                             
     D pCmpData        S               *                                                            
     D cmpdata         S             75    based(pCmpData)                                          
      *                                                                                             
     D APIErr          DS                  qualified                                                
     D  ErrSize                      10i 0 inz(%size(APIErr))                                       
     D  Errlen                       10i 0 inz(0)                                                   
     D  ErrID                         7a                                                            
     D  rsvd                          1a                                                            
     D  ErrData                   32767a                                                            
      *                                                                                             
     D SndUsrMsg       PR                  ExtPgm('QMHSNDM')                                        
     D   MsgID                        7A   const                                                    
     D   QualMsgF                    20A   const                                                    
     D   MsgTxt                   32767A   const options(*varsize)                                  
     D   MsgTxtLen                   10I 0 const                                                    
     D   MsgType                     10A   const                                                    
     D   MsgQueues                   20A   const dim(50) options(*varsize)                          
     D   NumQueues                   10I 0 const                                                    
     D   RpyQueue                    20A   const                                                    
     D   MsgKey                       4A                                                            
     D   ErrorCode                         like(APIErr)                                             
     D   CCSID                       10I 0 const options(*nopass)                                   
      *                                                                                             
     D Message         s            100A   varying                                                  
     D MsgKey          s              4A                                                            
     D UsrMsgQ         s             20A   dim(1) inz('*SYSOPR')                                    
      *                                                                                             
      /free                                                                                         
                                                                                                    
          if (%trimR(pType) = '*PAL') ;                                                             
                                                                                                    
              pCmpData = %addr(pData) + pData.ofscmpdata ;                                          
                                                                                                    
              exec SQL                                                                              
                   INSERT INTO APITEST/PAL                                                          
                     VALUES(                                                                        
                           :pData.src,                                                              
                           :pData.device,                                                           
                           :pData.devicetype,                                                       
                           :pData.model,                                                            
                           :pData.serial,                                                           
                           :pData.rscname,                                                          
                           :pData.logid,                                                            
                           :pData.paltime,                                                          
                           :pData.refcode,                                                          
                           :pData.secondcode,                                                       
                           :pData.tableid,                                                          
                           :pData.sequence,                                                         
                           :pData.ofscmpdata,                                                       
                           :pData.lencmpdata,                                                       
                           :pData.cmpagainst,                                                       
                           :cmpdata,                                                                
                           CURRENT_TIMESTAMP                                                        
                          ) ;                                                                       
                                                                                                    
             Message = 'ERRLOG is created.';                                                        
             UsrMsgQ = 'PALMSGQ   APITEST   ';                                                      
                                                                                                    
             SndUsrMsg( *blanks                                                                     
                      : *blanks                                                                     
                      : Message                                                                     
                      : %len(Message)                                                               
                      : '*INFO'                                                                     
                      : UsrMsgQ                                                                     
                      : %elem(UsrMsgQ)                                                              
                      : *blanks                                                                     
                      : MsgKey                                                                      
                   : APIErr );                                                                      
                                                                                                    
              pError = *blanks;                                                                     
                                                                                                    
          endif;                                                                                    
                                                                                                    
          *inLR = *on;                                                                              
          return;                                                                                   
                                                                                                    
      /end-free                                                                                     

実行例

メッセージを送信する機能をつけたプログラムを指定して再度 STRWCH コマンドを実行し直してみましょう。

「監視プログラム」の名前が変わっていることが確認できますね。

↓のように、監視している SRC が発生すると同時に受け取った PAL の情報を書き込むことができます。

[Top Pageに戻る]

Ads by TOK2