|
You get indicators in the Trigger DS that twll you whether commitment control
is active....
Here's an old trigger skeleton I have... Buffer (position 33) provides
TrgCmtLvl, to tell you whether to set RUNCOMMIT. I see that this is set in
this shell, but never checked.... Hmm.
/TITLE TRIGGER ** Trigger program shell **
* Replace <PFile> with physical file name
* Replace <AFile> with ancillary file name
* --------------------------------------------- * Ancillary files
* ---------------------------------------------
F<AFile> UF A E K DISK Commit(RunCommit) UsrOpn
* --------------------------------------------- * Entry Parameters
* ---------------------------------------------
DBuffer DS 32767
D PFName 10
D PFLibrary 10
D PFMember 10
D TrgEvent 1
D TrgTime 1
D TrgCmtLvl 1
D 3
D TrgCCSID 7B 0
D 8
D OrOffset 7B 0
D OrRcdLen 7B 0
D OrNBMapOfs 7B 0
D OrNBMapLen 7B 0
D NwOffset 7B 0
D NwRcdLen 7B 0
D NwNBMapOfs 7B 0
D NwNBMapLen 7B 0
D DataSpace 1 32767
D Bytes 1 Overlay(DataSpace) Dim(32767)
DBufferLen S 7B 0
* --------------------------------------------- * Original Record
* ---------------------------------------------
D@OrRecord S * Inz(*Null)
DOrRecord E DS ExtName(<PFile>) Prefix(OR_)
D Based(@OrRecord)
* --------------------------------------------- * New Record
* ---------------------------------------------
D@NwRecord S * Inz(*Null)
DNwRecord E DS ExtName(<PFile>) Prefix(NW_)
D Based(@NwRecord)
* --------------------------------------------- * Constant Definitions
* --------------------------------------------- * Commit Levels
DCL_NONE C '0'
DCL_CHG C '1'
DCL_CS C '2'
DCL_ALL C '3'
* Null byte status
DNB_NOTNULL C '0'
DNB_NULL C '1'
* Trigger events
DTE_INSERT C '1'
DTE_DELETE C '2'
DTE_UPDATE C '3'
* Trigger times
DTT_AFTER C '1'
DTT_BEFORE C '2'
C *ENTRY plist
C parm Buffer
C parm BufferLen
* --------------------------------------------- * Main-line Procedure
* ---------------------------------------------
* Assign the record templates to their data space
C eval @OrRecord = %Addr(Bytes(OrOffset+1))
C eval @NwRecord = %Addr(Bytes(NwOffset+1))
* Execute the correct procedure based on trigger event
C TrgEvent caseq TE_INSERT DoInsert
C TrgEvent caseq TE_DELETE DoDelete
C TrgEvent caseq TE_UPDATE DoUpdate
C endcs
C return
* --------------------------------------------- * Process a delete event
* ---------------------------------------------
CSR DoDelete BEGSR
CSR ENDSR
* --------------------------------------------- * Process an insert event
* ---------------------------------------------
CSR DoInsert BEGSR
CSR ENDSR
* --------------------------------------------- * Process an update event
* ---------------------------------------------
CSR DoUpdate BEGSR
CSR ENDSR
* --------------------------------------------- * Program Initialization
* ---------------------------------------------
CSR *INZSR BEGSR
C if TrgCmtLvl > CL_NONE
C move *ON RunCommit
C endif
* > if TrgCmtLvl > CL_NONE
C open <AFile>
CSR ENDSR
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx]On Behalf Of Wilt, Charles
Sent: Tuesday, November 14, 2006 1:53 PM
To: RPG programming on the AS400 / iSeries
Subject: RE: Commitment control and triggers
Your trigger program would need to use commitment control also.
Which could be a problem unless every program that writes to the file
uses commitment control.
IIRC, I remember seeing some article about having a writing a trigger
program so that sometimes it could use commitment control and sometimes
it wouldn't.
Good Luck,
Charles Wilt
--
iSeries Systems Administrator / Developer
Mitsubishi Electric Automotive America
ph: 513-573-4343
fax: 513-398-1121
-----Original Message----- From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Bob P. Roche Sent: Tuesday, November 14, 2006 2:33 PM To: RPG programming on the AS400 / iSeries Subject: Commitment control and triggers I am adding commitment control to a program that updates a file. There is a trigger on the file to write tracking records to a different file whenever a change is made. Is there a way to get the trigger to rollback it's changes when I use the ROLBCK opcode in my program? -- This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/rpg400-l or email: RPG400-L-request@xxxxxxxxxxxx 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.