|
Boy, I don't normally do this... but
the following code works for me... view with fixed font...
----- Begin RPG IV -----
* ---------------------------------------------------------------
* Standard ILE RPG IV specs for DB2/400 trigger program.
*
* Author: R. Bruce Hoffman, Jr.
*
* Built for V3R2.
*
* Reviewed for V3R7.
* Revised for V4R1.
* Revised for V4R2.
*
* ---------------------------------------------------------------
H extbinint
* Externally described table name.
D fileName c const('FILENAME')
* Pointer based data structures for the input buffer.
D newPoint s *
D oldPoint s *
* Map data structure for before and after images of the record
* in the buffer from the external description for the file.
D newFile e ds based(newPoint)
D extname(fileName)
D prefix(n_)
D oldFile e ds based(oldPoint)
D extname(fileName)
D prefix(o_)
* First parameter of trigger call. Trigger buffer header information.
D trigParm ds
D file 10a
D library 10a
D member 10a
D trigEvent 1a
D trigTime 1a
D commitLock 1a
D skip3 3a
D ccsid 10i 0
D currrn 10i 0
D skip4 4a
D oldrecoff 10i 0
D oldreclen 10i 0
D oldnuloff 10i 0
D oldnullen 10i 0
D newrecoff 10i 0
D newreclen 10i 0
D newnuloff 10i 0
D newnullen 10i 0
D skip16 16a
* Second parameter of trigger call. Ignored by program.
D bufferLen s 10i 0
* Constants used for trigger verification: triggering event,
* trigger time and commitment lock levels.
D triggerEventInsert...
D c const('1')
D triggerEventDelete...
D c const('2')
D triggerEventUpdate...
D c const('3')
D triggerTimeAfter...
D c const('1')
D triggerTimeBefore...
D c const('2')
D commit_none...
D c const('0')
D commit_changes...
D c const('1')
D commit_cursorStability...
D c const('2')
D commit_all...
D c const('3')
* Trigger entry parameter list.
C *entry plist
C parm trigParm
C parm bufferLen
* Verify file, library and/or member names.
C if file <> fileName
C eval *inH9 = *on
C return
C endif
* Verify Trigger event and time.
C if trigEvent <> triggerEventInsert
C eval *inH8 = *on
C return
C endif
C if trigTime <> triggerTimeAfter
C eval *inH7 = *on
C return
C endif
* Address the data structures to the appropriate locations in the
* trigger buffer.
C eval oldPoint = %addr(trigParm) + oldrecoff
C eval newPoint = %addr(trigParm) + newrecoff
* When done, leave program.
C return
----- End RPG IV Code -----
===========================================================
R. Bruce Hoffman, Jr.
-- IBM Certified AS/400 Professional System Administrator
-- IBM Certified AS/400 Professional Network Administrator
"The sum of all human knowledge is a fixed constant.
It's the population that keeps growing!"
-----Original Message-----
From: Jim Langston <jlangston@conexfreight.com>
To: RPG400-L@midrange.com <RPG400-L@midrange.com>
Date: Friday, January 07, 2000 6:42 PM
Subject: Re: Trigger program input buffer layout
>I found out why I was getting a blank record, but the
>question still stands, how do I use Parm1 without
>knowing the sizes of the Null Byte Record Map before
>hand?
>
>Regards,
>
>Jim Langston
>
>Jim Langston wrote:
>
>> I'm writing my first trigger program and am basing it on
>> the sample from the Infoseeker Bookshelf for V3R7M0.
>>
>> When this program runs, I am expecting the file I am opening,
>> APUNIONBNK, to contain a new record that is an exact
>> copy of the record added to my file. But it is blank. Here is the
>> code it it's entirety.
>>
>> Also, the example shows the data structure being set up with the
>> OldRecordBuffer, OldRecordMap, NewRecordBuffer and
>> NewRecordMaps laid out. This is somewhat difficult to do.
>> Mostly, because I don't know the size of the Null Byte Map
>> before hand. What I wound up doing in this case was setting
>> their size to the same as in the example (something like 4 bytes)
>> and running it, and getting an error on my SubSt because the
>> pointer was running off into la-la land. So I ran it in Debug,
>> and displayed the value of the Null Byte Map Size, then went
>> into the program and changed the DDS to reflect this.
>>
>> This seems an awfully cumbersome way to do it though, is there
>> a better way?
>>
>> FAPUNIONBNKUF A F 150 DISK
>>
>> D Parm1 DS
>> D FileName 1 10
>> D LibName 11 20
>> D MemName 21 30
>> D TrigEvent 31 31
>> D TrigTime 32 32
>> D CommLockLvl 33 33
>> D Reserved01 34 36
>> D CCSID 37 40B 0
>> D Reserved02 41 48
>> D OldOffset 49 52B 0
>> D OldLength 53 56B 0
>> D OldByteMapOff 57 60B 0
>> D OldByteMapLen 61 64B 0
>> D NewOffset 65 68B 0
>> D NewLength 69 72B 0
>> D NewByteMapOff 73 76B 0
>> D NewByteMapLen 77 80B 0
>> D Reserved03 81 96
>> D*********
>> D OldRecord 97 246
>> D OldByteMap 247 276
>> D NewRecord 277 426
>> D NewByteMap 427 556
>> D*********
>> D
>> D Parm2 DS
>> D Length 1 4B 0
>> D
>> D NewBuffer DS 150
>> D
>> D Offset S 5 0
>>
>> IAPUNIONBNKNS
>> I 1 150 NewRecord
>>
>> C *Entry PList
>> C Parm1 Parm Parm1
>> C Parm2 Parm Parm2
>> C
>> C Eval Offset = NewOffset + 1
>> C
>> C Eval NewRecord =
>> %SubSt(Parm1:Offset:150)
>> C Write APUnionBnk NewBuffer
>> C Eval *INLR = *ON
>>
>> Thanks in advance,
>>
>> Regards,
>>
>> Jim Langston
>
>+---
>| This is the RPG/400 Mailing List!
>| To submit a new message, send your mail to RPG400-L@midrange.com.
>| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
>| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
>| Questions should be directed to the list owner/operator:
david@midrange.com
>+---
>
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-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.