Sie sind auf Seite 1von 12

* * CrtUsrSpc: Create User Space for OS/400 API's * d QUSCRTUS d d d d d d d d * * --- Prototype for API Retrive User Space

* d QUSRTVUS d d d d d d d d d d QRtvError... 256 * --- Prototype for API Retrive List Job * d QUSLJOB d pr extpgm( 'QUSLJOB' ) QRtvReceiverVariable... 32048 QRtvLengthOfData... 10i 0 QRtvStartingPosition... 10i 0 pr extpgm( 'QUSRTVUS' ) UsrSpc ExtAttr InitialSize InitialVal PublicAuth Text Replace ErrorCode pr 20A 10A extpgm('QUSCRTUS') const const

10I 0 const 1A 10A 50A 10A 32766A const const const const options(*nopass: *varsize)

QRtvUserSpace... 20

QJobUserSpace...

d d d d d d d d d d d d d d d * d qcmdexc d d * * Defined variables * d emailaddress d size d UsrSpcName * s s s os400_cmd cmdlength pr QKeyFldRtn... QNbrFldRtn... QJobType... QFldError... QFldStatus... QJobJobName... QJobFormatName...

20

26

10

256

10i 0

10i 0 dim( 100 )

extpgm( 'QCMDEXC' ) 2000A 15P 5 options( *varsize ) const const

24 10I 0 20

inz('alert@abcdomain.com')

inz( 'DSPJOB

QTEMP

' )

****************************************************************** dQUSA0100 d QUsrSpcOffset... d 1 4B 0 DS

d QUsrSpcEntries... d d QUsrSpcEntrieSize... d 13 16B 0 9 12B 0

dLJOBINPUT d JobName... d d UserName... d d JobNumber... d d Status... d d UserSpace... d

ds

qualified

10

11

20

21

26

27

36

37

46

d UserSpaceLibrary... d d Format... d d JobType... d d Reserved01... d d Reserved02... d * dLJOB100 d JobName... d 1 10 ds qualified 69 72B 0 66 68 65 65 57 64 47 56

d UserName... d d JobNumber... d d InternalJobId... d d Status... d d JobType... d d JobSubType... d d Reserved01... d * dLJOB200 d JobName... d d UserName... d d JobNumber... d d InternalJobId... d d Status... d d JobType... d d JobSubType... d 54 54 53 53 43 52 27 42 21 26 11 20 1 10 ds qualified 55 56 54 54 53 53 43 52 27 42 21 26 11 20

d Reserved01... d d JobInfoStatus... d d Reserved02... d 58 60 57 57 55 56

d NumberOfFieldsReturned... d d ReturnedData... d * dLJOB200KEY d KeyNumber01... d***** d d NumberOfKeys... d***** d * dLJOBKEYINFO ds qualified 5 8B 0 10i 0 1 4B 0 10i 0 ds qualified 65 1064 61 64B 0

d LengthOfInformation... d d KeyField... d d TypeOfData... d d Reserved01... d d LengthOfData... d 10i 0 3 1 10i 0 10i 0

d KeyData... d * * APIErrDef * dQUSEC DS Standard API error handling structure. * 1000

d ErrorBytesProvided... d d ErrorBytesAvailble... d d ErrorExceptionId... d d ErrorReserved... d * dAPIError DS 16 16 9 15 5 8b 0 1 4B 0

d APIErrorProvied... d d d APIErrorAvailble... d d APIErrorMessageID... d d APIErrorReserved... d d APIErrorInformation... d 240A *----------------------------------------------------------------* program status dataarea *----------------------------------------------------------------LIKE( ErrorReserved ) LIKE( ErrorExceptionId ) LIKE( ErrorBytesAvailble ) LIKE( ErrorBytesProvided ) INZ( %LEN( APIError ) )

d PgmSts d d P1User W1Program

SDS 254 *PROC 263

*--------------------------------------------------------------* * work fields *

*--------------------------------------------------------------* d Variables d d d d d d d d d d d d d d d d d d d d d d d ReceiverVariable... KeyLengthOfData... 8B 0 inz KeyStartingPosition... 8B 0 inz LengthOfData... 10i 0 inz JobStatus JobType NbrOfFldRtn KeyFldRtn StartingPosition... 10i 0 inz Q Count KeyCount EndPos JobbStatus Subsystem ReturnCode FormatName QualifedJobName... 26 10 1 inz inz inz ds 1 inz('''')

15 0 inz 15 0 inz 15 0 inz 4 20 1 8 inz inz inz inz

10i 0 inz 10i 0 inz dim(100)

d d d d d * /free OS400_Cmd CmdLength True False

32048 2000 inz( ' ' )

15P 5 inz( %size( OS400_Cmd ) ) 1 1 inz( *on ) inz( *off )

size = 10000; QUSCRTUS(UsrSpcName: 'USRSPC': size: x'00': '*ALL': 'Temp User Space for QUSLJOB API': '*YES': APIError); exsr CheckStatusOfJob;

*inlr = *on;

// ************************************************************* // check status of an job // -------------------------------------------------------------

begsr CheckStatusOfJob;

// run API to fill user space with information about all iSeries job FormatName = 'JOBL0200'; QualifedJobName = '*ALL JobStatus = '*ACTIVE'; JobType = '*'; NbrOfFldRtn = 2; KeyFldRtn( 1 ) = 0101; KeyFldRtn( 2 ) = 1906; QUSLJOB( UsrSpcName : FormatName : QualifedJobName : ' + '*ALL ' + '*ALL ';

JobStatus : APIError JobType

: );

: NbrOfFldRtn : KeyFldRtn

// if error message from the retrieve job API then dump program if APIErrorMessageID <> ' '; dump; ReturnCode = True; leavesr; endif; // run API to get user space attribute StartingPosition = 125; LengthOfData = 16; callp QUSRTVUS( UsrSpcName : StartingPosition :

LengthOfData : ReceiverVariable : APIError QUSA0100 = ReceiverVariable; // error message from the retrieve user space API then dump program if APIErrorMessageID <> ' '; dump; ReturnCode = True; leavesr; endif; );

// preperation to read from user space StartingPosition = QUsrSpcOffset + 1; LengthOfData = QUsrSpcEntrieSize; // read from user space for count = 1 to QUsrSpcEntries; QUSRTVUS( UsrSpcName : StartingPosition :

LengthOfData : ReceiverVariable : APIError );

LJOB200 = ReceiverVariable; if APIErrorMessageID <> ' '; dump; ReturnCode = True; leavesr; endif;

// check status of job JobbStatus = ' '; Subsystem = ' '; LJobKeyInfo = LJob200.ReturnedData; KeyStartingPosition = 1; KeyLengthOfData = LJobKeyInfo.LengthOfInformation;

for keycount = 1 to LJob200.NumberOfFieldsReturned; LJobKeyInfo = %subst( LJob200.ReturnedData : KeyStartingPosition : KeyLengthOfData );

KeyLengthOfData = LJobKeyInfo.LengthOfInformation;

LJobKeyInfo = %subst( LJob200.ReturnedData : KeyStartingPosition : KeyLengthOfData ); Endpos = LJobKeyInfo.LengthOfData;

if LJobKeyInfo.KeyField = 0101; JobbStatus = %subst( LJobKeyInfo.KeyData : 1 : Endpos ); elseif LJobKeyInfo.KeyField = 1906;

Subsystem = %subst( LJobKeyInfo.KeyData : 1 : Endpos ); endif;

KeyStartingPosition = KeyStartingPosition + KeyLengthOfData; endfor; // job in message wait then email message to address in // variable email address if Jobbstatus = 'MSGW'; Subsystem = %trim( %subst( Subsystem : 11 : 10 ) ) + '/' + %trim( %subst( Subsystem : 1 : 10 ) ); os400_cmd = 'snddst type(*lmsg) ' + 'tointnet((' + Q + %trim(EmailAddress) + Q + ')) dstd(' + Q 'Job is in *MSGW' + +

Q + ') longmsg(' + Q + 'Job (' + %trim( LJob200.JobName ) + '/' + %trim( LJob200.UserName ) + '/' + %trim( LJob200.JobNumber ) + ') subsystem ' + %trim( Subsystem ) + ' in status *MSGW' + Q + ')'; monitor; // qcmdexc ( os400_cmd : %size ( os400_cmd ) ); on-error; dump; endmon; endif;

StartingPosition = StartingPosition + LengthOfData;

endfor;

endsr; /end-free

Das könnte Ihnen auch gefallen