|
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-2024 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.