如何取得某一 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
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期四, 11月 02, 2023
2002-11-13 如何取得某一 Job lock 哪些物件 ?(Retrieve Job Lock API QWCRJBLK)
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言