|
>> Does anyone have good examples (source code) of trigger programs? << David, Here's the shell program that I use. In actual practice it seems that the update procedure usually does some stuff and then executes doDelete followed by doInsert. PFile is the file that the trigger is attached to. AFile is another file that the trigger updates. Fields in both the before and the after images can be compared directly by comparing OR_field with NW_field. The program will not handle commitment control being started or ended while it is running. It should execute in the same activation group as the calling process - ACTGRP(*CALLER), particularly if commitment control is used. However, if it uses bound calls, particularly to a service program, and is executed from an OPM job, it must run in its own (OLE) activation group. In this case, commitment control cannot be used. hth Pete /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 -- - Pete Hall peteh@earth.inwave.com http://www.inwave.com/~peteh/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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 MAJORDOMO@midrange.com and specify * * 'unsubscribe MIDRANGE-L' in the body of your message. 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.