|
Hi !
What about OS/400 commands ???
DSPRCDLCK FILE(LIB/OBJ) OUTPUT(*PRINT)
and small analyzing program to print file QPDSPRLK:
CPYSPLF to PF
cut fields to analyze
I make so many think on AS/400 (for commands they havn't *OUTFILE as parameter
OUTPUT).
It is fast and for other think must i only copy my standard program.
Best Regards
Dariusz Blazkow
Am Donnerstag, 10. Oktober 2002 21:29 schrieb Scott Klement:
> On Thu, 10 Oct 2002 rob@dekko.com wrote:
> > Now how to retrieve the offender from within the rpg would be cool. With
> > that information I could roll my own technique for dealing with the
> > situation.
>
> The original poster didn't specify RPG, otherwise I would've simply
> posted an example. :) But now that you've requested it, I'll show you
> my solution. I'll CC: RPG400-L since it probably belongs there, anyway.
>
> This is a procedure I have in my "UTIL" service program. When I get the
> status code that indicates a record lock, I call it to get the offending
> job's name:
>
>
> *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> * util_LockInfo():
> * This scans the program message queue for a record lock
> * message and retrieves the user-id & job info of the user
> * who is locking a record.
> *
> * peStackCnt = (input) Specifies which program's msgq to scan by
> * how many entries back in the call stack it is.
> * peJobNbr = (output) Job number of the job locking the rec
> * peUser = (output) User name of the job locking the record
> * peJobName = (output) Job name of the job locking the record
> *
> * Returns *ON if successful, or *OFF if failed
> *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> P util_LockInfo B export
> D util_LockInfo PI 1N
> D peStackCnt 10I 0 value
> D peJobNbr 6A
> D peUser 10A
> D peJobName 10A
>
> D RcvPgmMsg PR ExtPgm('QMHRCVPM')
> D MsgInfo 32766A options(*varsize)
> D MsgInfoLen 10I 0 const
> D Format 8A const
> D StackEntry 10A const
> D StackCount 10I 0 const
> D MsgType 10A const
> D MsgKey 4A const
> D WaitTime 10I 0 const
> D MsgAction 10A const
> D ErrorCode 32766A options(*varsize)
>
> D dsM1 DS
> D dsM1_BytRtn 10I 0
> D dsM1_BytAvl 10I 0
> D dsM1_MsgSev 10I 0
> D dsM1_MsgID 7A
> D dsM1_MsgType 2A
> D dsM1_MsgKey 4A
> D dsM1_Reserv1 7A
> D dsM1_CCSID_st 10I 0
> D dsM1_CCSID 10I 0
> D dsM1_DtaLen 10I 0
> D dsM1_DtaAvl 10I 0
> D dsM1_Dta 256A
>
> D dsEC DS
> D dsECBytesP 10I 0 INZ(%size(dsEC))
> D dsECBytesA 10I 0 INZ(0)
> D dsECMsgID 7A
> D dsECReserv 1A
> D dsECMsgDta 240A
>
> D wwMsgKey S 4A
> D wwJob S 28A
> D wwPos1 S 10I 0
> D wwPos2 S 10I 0
> D wwLen S 10I 0
>
> C*********************************************************
> C* Search through the program's message queue until we
> C* find a msg CPF5027.
> C*********************************************************
> c eval wwMsgKey = *ALLx'00'
> c dou dsECBytesA>0 or dsM1_MsgID='CPF5027'
> c callp RcvPgmMsg(dsM1: %size(dsM1): 'RCVM0100':
> c '*': peStackCnt: '*PRV': wwMsgKey:
> c 0: '*SAME': dsEC)
> c eval wwMsgKey = dsM1_MsgKey
> c enddo
>
> C*********************************************************
> c* Hmm... we got an error...
> C*********************************************************
> c if dsECBytesA>0
> c return *Off
> c endif
>
> C*********************************************************
> c* Strange... it didn't provide all the info we need...
> C*********************************************************
> c if dsM1_DtaLen < 108
> c return *Off
> c endif
>
> C*********************************************************
> C* Job number will be in the format 000001/USER/JOBNAME
> C*********************************************************
> c eval wwJob = %subst(dsM1_Dta:81:28)
> c eval wwPos1 = %scan('/': wwJob)
> c if wwPos1 < 2
> c return *off
> c endif
> c eval wwPos2 = %scan('/': wwJob: wwPos1+1)
> c if wwPos2 < 2
> c return *off
> c endif
>
> c eval peJobNbr = %subst(wwJob:1:wwPos1-1)
> c eval wwLen = (wwPos2 - wwPos1) - 1
> c eval wwPos1 = wwPos1 + 1
> c eval peUser = %subst(wwJob:wwPos1:wwLen)
> c eval wwPos2 = wwPos2 + 1
> c eval peJobName = %subst(wwJob:wwPos2)
> c return *on
>
> P E
>
> _______________________________________________
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
> To post a message email: RPG400-L@midrange.com
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/cgi-bin/listinfo/rpg400-l
> or email: RPG400-L-request@midrange.com
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.