|
RE: Re: re:RPG Trigger Pgm
While on this subject I thought you'd might like to "Soft Code" the 96 byte
fixed portion of the first parm passed by the OS. Here it is.
In this example the record length is 627 with 44 fields.
This is the D/S externally defined by the DDS below.
-----------------------------------
D PARM1 E DS EXTNAME(ETPFZ1)
D*
D OLDREC 627
D OLDNMAP 44
D NEWREC 627
D NEWNMAP 44
D*
------
OLDREC = Before image
OLDNMAP = Null mapping for the 44 fields (before image)
NEWREC = After Image
NEWNMAP = Null mapping for the 44 fields (after image)
Here's the DDS
-----------------------
Field Name Len Type
Z1FILE 10 A File Name
Z1LIB 10 A Library Name
Z1MBR 10 A Member Name
Z1EVENT 1 A Event - 1=Insert, 2=Delete 3=Update
Z1TIME 1 A Timing - 1=After, 2=Before
Z1COMMIT 1 A Commitment Level
Z1RESERVE1 3 A Reserved 3 Bytes
Z1CCSID 8 B CCSID ID
Z1RESERVE2 8 A Reserved 8 Bytes
Z1OROFF 8 B Old Record Offset
Z1ORLEN 8 B Old Record Length
Z1ORNBO 8 B Old Record Null Byte Map Offset
Z1ORNBL 8 B Old Record Null Byte Map Length
Z1NROFF 8 B New Record Offset
Z1NRLEN 8 B New Record Length
Z1NRNBO 8 B New Record Null Byte Map Offset
Z1NRNBL 8 B New Record Null Byte Map Length
Z1RESERVE3 16 A Reserved 16 Bytes
-------------------------------------------------------------------------
This is a very simple 'Plain Jane' example.
You could parse out the before/after images by defining a field
that goes from byte 1 to xxxxxx (whatever length you'd like as a
max. maybe like 10,000 or whatever) and then use a based pointer
to parse them out like David or Pete has shown using the Z1OROFF(etc)
fields(binary offset value) etc.
This way ALL your programs would use the same name & definition for
all the Z1xxxx fields.
John Carr
EdgeTech
-------------------------------------------------------------------------
Eric,
John is right about redefining using an externally defined data structure.
Instead
of the movel I would use a basing pointer. You don't have to go way out of
your
way to do this and if your record is real long it can improve performance. It
may
be a little more complicated but you can use the same code in every trigger you
create. In order to use the movel you would have to hard code the record
length
in your trigger buffer. This is likely to introduce errors if the record size
changes
and you forget to change the hard coded record length. Using a basing pointer
you
can simplify program changes when you add, change or remove a field. The code
would look something like:
...
DRcdBuf E DS EXTNAME(FILENAME) BASED(pRcdBuf)
...
C EVAL pRcdBuf = %ADDR(TrgBuf + RcdOff)
David Morris
>>> John Carr <74711.77@compuserve.com> 02/11 4:42 PM >>>
RE: RPG Trigger Pgm
Eric
Don't bother with the offsets or SUBST business. Movel the After image
into an externally defined data structure(Defined by the same file as
being triggered). Then you can manipulate the field names directly
with EVAL's MOVE's Z-adds whatever you like(with compares, IFEQ etc)
then MOVEL the externally defined data structure back into the Image
field. or whatever. why be complicated.
John Carr
I'm trying to work up a sample DB trigger pgm (RPG) to validate
records at *insert and *update. Documentation (DB2 for OS/400
Database Programming V3R7) indicates that I can modify the new record
image in the trigger buffer, but I can't see any way to apply changes
to the trigger buffer at offset value. For example, I want to update a
field RCDSTS to "SC04" to indicate the record contains errors before
writing a record to a Status History file. I can't see how to move
SC04 into the trigger buffer @ offset value corresponding to this
field. (<-- Huh? I think I just confused myself....)
I guess I'm looking for the opposite of SUBST.. something that will
let me move a value into a field at location X.
Am I going to have to learn basing pointers or what? Any hints,
suggestions, or samples would be appreciated. Thanks.
Eric A DeLong
ericadelong@pmsc.com
!
!
!
!
!
!
!
!
!
!
+---
| This is the Midrange System Mailing List!
| To submit a new message, send your mail to "MIDRANGE-L@midrange.com".
| To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---
uucp
+---
| This is the Midrange System Mailing List!
| To submit a new message, send your mail to "MIDRANGE-L@midrange.com".
| To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---
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.