星期四, 11月 02, 2023

2002-11-13 如何取得某一 Job lock 哪些物件 ?(Retrieve Job Lock API QWCRJBLK)


如何取得某一 Job lock 哪些物件 ?(Retrieve Job Lock API QWCRJBLK)

在執行 WRKACTJOB 時, 某些 Job 的狀態為 LCKW, 你可用 選項5 進入 WRKJOB 畫面,
執行選項 12. Work with locks, if active 即可取得該 Job 所鎖住的物件, 但這些均需
要人工介入才能得到被鎖住物件的資訊,無法自動化, 但利用 Retrieve Job Lock API QWCRJBLK
便可以, 下述範例是取得執行程式本身 Job 所鎖住物件的資訊, 你可依自己的需求更改
Job Id 的 
**-- Job id:  ------------------------------------
D JlJobId         Ds                              
D  JiJobNam                     10a   Inz( '*' )  
D  JiUsrNam                     10a               
D  JiJobNbr                      6a               


File  : QPGLESRC
Member: RTVJOBLCKR
Type  : RPGLE
Usage : CRTBNDRPG RTVJOBLCKR
        CALL RTVJOBLCKR

      *  Many thanks to Carsten Flensburg for the skeleton API
     **-- Header specifications:  --------------------------------------------**
     H Option( *SrcStmt )
     **-- Api error data structure:  -----------------------------------------**
     D ApiError        Ds
     D  AeBytPro                     10i 0 Inz( %Size( ApiError ))
     D  AeBytAvl                     10i 0 Inz
     D  AeMsgId                       7a
     D                                1a
     D  AeMsgDta                    128a
     **-- Global variables:  -------------------------------------------------**
     D Idx             S              5i 0
     D TmpStr          S             50
     **-- Job lock information:  ---------------------------------------------**
     D JBLK0100        Ds         65535
     D  JlBytAvl                     10i 0
     D  JlBytRtn                     10i 0
     D  JlNbrObjLck                  10i 0
     D  JlOfsObjLck                  10i 0
     D  JlNbrLckObjRt                10i 0
     D  JlLckObjEntLn                10i 0
     **
     D LckInf          Ds                  Based( pLckInf )
     D  LiObjNam                     10a
     D  LiObjLib                     10a
     D  LiObjTyp                     10a
     D  LiObjExtAtr                  10a
     D  LiLckStt                     10a
     D                                2a
     D  LiLckSts                     10i 0
     D  LiMbrLcks                    10i 0
     D  LiLckCnt                     10i 0
     D  LiLckScp                      1a
     D                                2a
     D  LiThrId                       8a
     **-- Job id:  -----------------------------------------------------------**
     D JlJobId         Ds
     D  JiJobNam                     10a   Inz( '*' )
     D  JiUsrNam                     10a
     D  JiJobNbr                      6a
     D  JiIntJobId                   16a   Inz( *Blanks )
     D                                2a   Inz( *Allx'00' )
     D* JlThrInd                     10i 0 Inz( 2 )
     D  JlThrInd                     10i 0 Inz( 3 )
     D  JlThrId                       8a
     **-- Retrieve job record locks:  ----------------------------------------**
     D RtvJobLck       Pr                  ExtPgm( 'QWCRJBLK' )
     D  JlRcvVar                  65535a         Options( *VarSize )
     D  JlRcvVarLen                  10i 0 Const
     D  JlFmtNam                      8a   Const
     D  JlJobId                      56a   Const
     D  JlFmtJobId                    8a   Const
     D  JlError                   32767a         Options( *VarSize )
     **
     **-- Mainline:  ---------------------------------------------------------**
     **
     C                   CallP     RtvJobLck( JBLK0100
     C                                      : %Size( JBLK0100 )
     C                                      : 'JBLK0100'
     C                                      : JlJobId
     C                                      : 'JIDF0100'
     C                                      : ApiError
     C                                      )
     **
     C                   If        AeBytAvl    = *Zero
     C                   ExSr      PrcJobLck
     C                   EndIf
     **
     C                   Return
     **
     **-- Process job locks:  ------------------------------------------------**
     C     PrcJobLck     BegSr
     **
     C                   Eval      pLckInf     = %Addr( JBLK0100 ) +
     C                                           JlOfsObjLck
     **
     C                   For       Idx         = 1  to JlNbrLckObjRt
     **
     **-- Do whatever...
     **
     C                   Eval      TmpStr = %Trim(LiObjLib) + '/' +
     C                                      %Trim(LiObjNam)+' Type<'+
     C                                      %Trim(LiObjTyp)+'> ' +
     C                                                      'Lock Status<'+
     C                                      %Trim(LiLckStt)+ '>'
     C     TmpStr        Dsply
     C                   If        Idx         < JlNbrLckObjRt
     C                   Eval      pLckInf     = pLckInf + JlLckObjEntLn
     C                   EndIf
     C                   EndFor
     **
     C                   EndSr
            



沒有留言: