|
Since I'm not sure whether this is an RPG problem or a lack of understanding
about receiving journal entries with RCVJRNE, I'm not sure where to post
this, so i'm posting to both Midrange-L and RPG400-L.
My system is on V5R1.
I'm experimenting with using RCVJRNE to process the 'CO' journal entries
from the system audit journal (QAUDJRN). The goal: I want to detect when a
file gets created in the IFS.
For this test, the stream file I created was '/home/SJL/source16.txt'
As usual, the IBM documentation is about as clear as mud and stored in
several different places (B&R guide, Security Guide, etc.). I'm about to
pull my hair out (if you know me, that's funny because you know how much
hair I have left...).
I used some sample code that I received from another member (thanks,
Carsten) to construct this program. However, it was for file journal
entries, *not* 'CO' entries. I *thought* (there I go, thinking again) that
I could just use the system-supplied outfile for *TYPE4 entries in my
program as the receiver (parameter 1) for these entries, since it matches
the layout of the buffer described in the above-mentioned guides.
However, it appears that things aren't mapped properly into this buffer
area. Everything beyond the system name (COSYNM) seems to be improperly
mapped.
Are the variable-length fields hosing me up?
In the field named CORESA (see below),
I see this value: '00000811N*N *N *STMF '.
The 00000811 probably should have been mapped to the field COESDL
(Entry-specific data length). The First 'N' should have been mapped to
COETYP (Type of Entry). The first '*N' should have been mapped to COONAM
(Object Name), the second '*N' should have been mapped to COOLIB (Library
Name), and the value '*STMF' should have been mapped to COOTYP (Object
Type)....and so on.
When I run the RPG program in debug, here is what the DSType4 data structure
looks like for the 'CO' journal corresponding to the creation of this file:
COENTL OF DSTYPE4 = 00990.
COSEQN OF DSTYPE4 = 0001918049.
COCODE OF DSTYPE4 = 'T'
COENTT OF DSTYPE4 = 'CO'
COTSTP OF DSTYPE4 = '2003-12-09-00.54.31.101728'
COJOB OF DSTYPE4 = 'QPADEV9999'
COUSER OF DSTYPE4 = 'SJL '
CONBR OF DSTYPE4 = 013891.
COPGM OF DSTYPE4 = 'QCMD '
CORES1 OF DSTYPE4 = ' 000000000000000000000'
COUSPF OF DSTYPE4 = 'SJL '
COSYNM OF DSTYPE4 = 'BUBBA '
CORES2 OF DSTYPE4 = ' 00000 '
CORESA OF DSTYPE4 = '00000811N*N *N *STMF '
COESDL OF DSTYPE4 = 6448.
COETYP OF DSTYPE4 = ' '
COONAM OF DSTYPE4 = ' '
COOLIB OF DSTYPE4 = ' '
COOTYP OF DSTYPE4 = ' '
CORES3 OF DSTYPE4 = ' '
COOUSR OF DSTYPE4 = ' '
COODLO OF DSTYPE4 = ' '
CORES4 OF DSTYPE4 = ' '
COOFLR OF DSTYPE4 =
....5...10...15...20...25...30...35...40...45...50...55...60
1 ' ^USENU '
61 ' '
COOBUS OF DSTYPE4 = ' e9î°'
CORES5 OF DSTYPE4 = ' Ò e9îx '
COOLEN OF DSTYPE4 = 4600.
COCCID OF DSTYPE4 = 36751.
COCNTY OF DSTYPE4 = ' Í'
COLANG OF DSTYPE4 = ' Ê '
CORES6 OF DSTYPE4 = 'Ä Á'
COPFID OF DSTYPE4 = ' È Ì È '
COOFID OF DSTYPE4 = ' '
COOBJN OF DSTYPE4 =
....5...10...15...20...25...30...35...40...45...50...55...60
1 ' '
61 ' '
121 ' '
181 ' '
241 ' '
301 ' '
361 ' '
421 ' e9îx'
481 ' - QASP01 00001 USENU Y '
COOID OF DSTYPE4 = ' '
COASP OF DSTYPE4 = ' /home/SJL'
COASPN OF DSTYPE4 = '/sour'
COPCCI OF DSTYPE4 = -73770.
COPCNT OF DSTYPE4 = '.t'
COPLAN OF DSTYPE4 = 'xt0'
COPNLN OF DSTYPE4 = -3856.
COAPIN OF DSTYPE4 = '0'
CORPFI OF DSTYPE4 = '0 '
COPNM OF DSTYPE4 =
....5...10...15...20...25...30...35...40...45...50...55...60
1 ' '
(this field is blank)
Here is the source for the CL and RPG programs:
******* CL program source ***********
Pgm
/*-- Global variables: ---------------------------------------------*/
Dcl &JrnSeqNbr *Dec 10
Dcl &JrnExit *Char 10 'RCVAUDJE'
Dcl &JrnSeqDta *Char 10 'RCVJRNE '
Dcl &JrnNam *Char 10 'QAUDJRN '
Dcl &JrnLib *Char 10 '*LIBL '
MonMsg CPF0000 *N GoTo Error
/*-- Journal entry date format *TYPE2 = *JOB --*/
ChgJob DatFmt( *YMD )
RtvDtaAra &JrnSeqDta RtnVar( &JrnSeqNbr )
ChgVar &JrnSeqNbr ( &JrnSeqNbr + 1 )
RcvJrnE:
RCVJRNE JRN(&JRNLIB/&JRNNAM) EXITPGM(&JRNEXIT) +
RCVRNG(*CURCHAIN) FROMENT(&JRNSEQNBR) +
JRNCDE(*ALL) ENTTYP(CO) ENTFMT(*TYPE4) +
DELAY(*NEXTENT 25)
MonMsg CPF7054 *N Do
RcvMsg MsgType( *EXCP ) Rmv( *YES )
/*-- From entry not found - get first entry in current receiver --*/
RtvJrnE Jrn( &JrnLib/&JrnNam ) +
File( *ALLFILE ) +
RcvRng( *CURRENT ) +
FromEnt( *FIRST ) +
RtnSeqNbr( &JrnSeqNbr )
GoTo RcvJrnE
EndDo
Return:
Return
/*-- Error handling: -----------------------------------------------*/
Error:
Call QMHMOVPM ( ' ' +
'*DIAG' +
x'00000001' +
'*PGMBDY' +
x'00000001' +
x'0000000800000000' +
)
Call QMHRSNEM ( ' ' +
x'0000000800000000' +
)
EndPgm:
EndPgm
**************** RPG program source **********************
** Program . . : RCVAUDJE
** Description : Receive 'CO' *TYPE4
** journal entry exit program
**
**-- Parm 1:
D DSType4 E Ds ExtName( QASYCOJ4 )
*
**-- Parm 2:
D JOCOM Ds
D JOCTL 1a
D JOENTAVL 1a
D JOENTPAS 1a
*
*-- JOCTL - journal control:
D NoEnt c '0'
D SngEnt c '1'
D BlkEnt c '2'
D RcvChgEnd c '3'
D BegBlkMod c '8'
D EndRcvJrnE c '9'
*
**-- JOCODE - journal code:
D RcdTyp c 'R'
D AudTyp c 'T'
*
**-- Current journal entry sequence number: ----**
D CurSeqNbr s 10s 0 DtaAra( RCVJRNE )
*
**-----------------------------------------------------**
**-- Parameters:
C *Entry Plist
C Parm DSType4
C Parm JOCOM
**-- Mainline:
C If JOCTL = SngEnt And
C COCODE = AuDTyp
**
C Select
C When (COENTT = 'CO') and (COOTYP = '*STMF')
C 'Entry Type' DSPLY COENTT
C 'Entry Lngth' DSPLY COENTL
C EndSl
**
C ExSr UpdSeqNbr
C EndIf
**
C ExSr ChkEndRqs
C Clear DSType4
**
C Return
*
**-- Update journal sequence number: -----------------**
C UpdSeqNbr BegSr
C *Lock In CurSeqNbr
C Eval CurSeqNbr = COSEQN
C Out CurSeqNbr
C EndSr
*
**-- Check pending endjob request: -------------------**
C ChkEndRqs BegSr
C If %Shtdn
C Eval JOCTL = EndRcvJrnE
C Eval *InLr = *On
C EndIf
C EndSr
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.