The work-around that I use (I wonder if there is an easier way to do this?) for non-SQL'd files is:
1. Create your trigger code (update your audit file, verify authorized user, whatever) as an I-type. Have it return a null. 2. Create a NO.NULLS index on the I-type. This will cause the I-type to be called whenever a record is created/deleted/updated in your file. The code in your I-type will be executed, but because the index is NO.NULLS and you are returning null, no actual index updates take place. Below is an example of a trigger I use to track changes to a file. /Scott Ballinger Pareto Corporation Edmonds WA USA 206 713 6006 SUBROUTINE SAVE.CHANGES.ENVC(ANS,REC,ID) * track changes to the ENVC file * 08-12-04 asb * This subroutine is called from the 'TRIGGER' I-Type in dict ENVC. * A secondary index on ENVC is defined on 'TRIGGER' using the NO.NULLS option. * That forces this subroutine to be called twice when an ENVC record is updated: * the first time with REC = the original record, then again with REC = the new * record (however, if the ENVC record is new, this subroutine is called only once). INCLUDE INC EQU.CHANGES COMMON /SAVE.CHANGES.ENVC/ CHANGES,DICT.CHANGES,OLD.REC,ID2 ANS = "" IF ASSIGNED(CHANGES) ELSE OPEN "ENVC.CHANGES" TO CHANGES ELSE OPEN "MD" TO MD ELSE RETURN READ X FROM MD,"ENVC.CHANGES" THEN RETURN Q = "Q" Q<2> = "xxx" Q<3> = "ENVC.CHANGES" wRITE Q ON MD,"ENVC.CHANGES" OPEN "ENVC.CHANGES" TO CHANGES ELSE RETURN END OPEN "DICT ENVC.CHANGES" TO DICT.CHANGES ELSE RETURN OLD.REC = "" ID2 = "[EMAIL PROTECTED]&*" END * This indexed trigger sub is only called once when filing a new record, so we need * to handle the case of filing a new record, then immediately editing it: IF REC EQ OLD.REC THEN ID2 = ID RETURN END IF ID2 NE ID THEN * first time @record = old rec OLD.REC = REC ID2 = ID RETURN END ELSE * 2nd time @record = new rec NEW.REC = REC ID2 = "[EMAIL PROTECTED]&*" END IF OLD.REC EQ NEW.REC THEN RETURN ***** * Run MAKE.FIELDS.ARRAY on ENVC and merge in the * ENVC.FIELDS.ARRAY here, then comment out the fields * you don't want to track changes for. Do not $include the * item, or else your commented out fields may get stepped * on if MAKE.FIELDS.ARRAY is run again. ***** *************************************************************** * MAKE.FIELDS.ARRAY for file ENVC as of 12-27-07 asb * MAXFIELDS = 168 DIM FIELDNAMES(168) ; DIM CONVS(168) MAT FIELDNAMES = "" ; MAT CONVS = "" FIELDNAMES(1) = "LINE.IDS" FIELDNAMES(2) = "PRV.TIN" FIELDNAMES(3) = "PRV.NAME" FIELDNAMES(4) = "PRV.SORTKEY" FIELDNAMES(5) = "PRV.ADDRESS" FIELDNAMES(6) = "PRV.CITY" FIELDNAMES(7) = "PRV.ST" FIELDNAMES(8) = "PRV.ZIP" FIELDNAMES(9) = "FAM.SSN" FIELDNAMES(10) = "FAM.NAME" FIELDNAMES(11) = "FAM.ADDRESS" FIELDNAMES(12) = "FAM.CITY" FIELDNAMES(13) = "FAM.ST" FIELDNAMES(14) = "FAM.ZIP" FIELDNAMES(15) = "FAM.DOB" ; CONVS(15) = "D4-" FIELDNAMES(16) = "PAT.NUM" FIELDNAMES(17) = "PAT.NAME" FIELDNAMES(18) = "PAT.DOB" ; CONVS(18) = "D4-" FIELDNAMES(19) = "PAT.ADDRESS" FIELDNAMES(20) = "PAT.REL" FIELDNAMES(21) = "PAT.NOTES" FIELDNAMES(22) = "PAT.CITY" FIELDNAMES(23) = "FAM.SEX" FIELDNAMES(24) = "PAT.SEX" FIELDNAMES(25) = "FUND" FIELDNAMES(26) = "CLAIM.NO" FIELDNAMES(27) = "ERRMSG" FIELDNAMES(28) = "PAT.SSN" **FIELDNAMES(29) = "DATE" ; CONVS(29) = "D4-" FIELDNAMES(30) = "USER" FIELDNAMES(31) = "DCN" FIELDNAMES(32) = "TYPE" FIELDNAMES(33) = "PRV.REFNUM" FIELDNAMES(34) = "NEWPAT" FIELDNAMES(35) = "HS.ID" FIELDNAMES(36) = "PRV.PHONE" FIELDNAMES(37) = "FAM.PHONE" FIELDNAMES(38) = "PAT.ST" FIELDNAMES(39) = "PAT.ZIP" FIELDNAMES(40) = "PAT.PHONE" FIELDNAMES(41) = "OI.NAME" FIELDNAMES(42) = "OI.ADDRESS" FIELDNAMES(43) = "OI.CITY" FIELDNAMES(44) = "OI.STATE" FIELDNAMES(45) = "OI.ZIP" FIELDNAMES(46) = "OI.PHONE" FIELDNAMES(47) = "OI.DOB" ; CONVS(47) = "D4-" FIELDNAMES(48) = "OI.SEX" FIELDNAMES(49) = "OI.PLAN" FIELDNAMES(50) = "OI.POLICY" FIELDNAMES(51) = "TOT.AMT" ; CONVS(51) = "MR2" FIELDNAMES(52) = "REF.NAME" FIELDNAMES(53) = "REF.PHONE" FIELDNAMES(54) = "REF.PID" FIELDNAMES(55) = "REN.NAME" FIELDNAMES(56) = "REN.ADDRESS" FIELDNAMES(57) = "REN.CITY" FIELDNAMES(58) = "REN.ST" FIELDNAMES(59) = "REN.ZIP" FIELDNAMES(60) = "REN.PID" FIELDNAMES(61) = "FAC.NAME" FIELDNAMES(62) = "FAC.ADDRESS" FIELDNAMES(63) = "FAC.CITY" FIELDNAMES(64) = "FAC.ST" FIELDNAMES(65) = "FAC.ZIP" FIELDNAMES(66) = "LAB.NAME" FIELDNAMES(67) = "ADJ" FIELDNAMES(68) = "PRV.SITE" FIELDNAMES(69) = "PLAN.NAME" FIELDNAMES(70) = "STATUS.CODE" **FIELDNAMES(71) = "STATUS.DATE" ; CONVS(71) = "D4-" **FIELDNAMES(72) = "PAID.AMT" ; CONVS(72) = "MR2," FIELDNAMES(73) = "NEWPRV" **FIELDNAMES(74) = "PAYEE" FIELDNAMES(75) = "PAT.SOF" FIELDNAMES(76) = "PAT.ROI" FIELDNAMES(77) = "PAT.AOB" FIELDNAMES(78) = "PAYER.NAME" FIELDNAMES(79) = "PRV.TS" FIELDNAMES(80) = "PRV.TYPE" FIELDNAMES(81) = "NOTE" **FIELDNAMES(82) = "FILENAME" FIELDNAMES(83) = "FUNDERR" FIELDNAMES(84) = "PPO.CODE" FIELDNAMES(85) = "PPO.PHYS" FIELDNAMES(86) = "REPRICE" FIELDNAMES(87) = "ORIG.FUND" FIELDNAMES(88) = "ORIG.PRV.TIN" FIELDNAMES(89) = "ORIG.FAM.SSN" FIELDNAMES(90) = "RECEIVED" ; CONVS(90) = "D4-" FIELDNAMES(91) = "REJECTED" ; CONVS(91) = "D4-" FIELDNAMES(92) = "ACCIDENT" FIELDNAMES(93) = "ACCIDENT.DATE" ; CONVS(93) = "D4-" FIELDNAMES(94) = "EMP.RELATED" FIELDNAMES(95) = "ORTHO.APP.DATE" ; CONVS(95) = "D4-" FIELDNAMES(96) = "ORTHO.START.DATE" ; CONVS(96) = "D2-" FIELDNAMES(97) = "ORTHO.MONTHS" FIELDNAMES(98) = "MISSING.TEETH" FIELDNAMES(99) = "MDV" FIELDNAMES(100) = "DRG.CODE" FIELDNAMES(101) = "ADM.TYPE" FIELDNAMES(102) = "EST.AMT" ; CONVS(102) = "MR2" FIELDNAMES(103) = "OI.REL" FIELDNAMES(104) = "OI.AOB" FIELDNAMES(105) = "OI.ROI" FIELDNAMES(106) = "OI.EMP" FIELDNAMES(107) = "OI.PAYER" FIELDNAMES(108) = "OI.PAYER.REF" FIELDNAMES(109) = "OI.GROUP" FIELDNAMES(110) = "OI.EST.AMT" ; CONVS(110) = "MR2" FIELDNAMES(111) = "OI.PRIOR.AMT" ; CONVS(111) = "MR2" FIELDNAMES(112) = "BILL.TYPE" FIELDNAMES(113) = "ADM.DATE" ; CONVS(113) = "D2-" FIELDNAMES(114) = "ADM.HR" FIELDNAMES(115) = "" FIELDNAMES(116) = "ADM.SRC" FIELDNAMES(117) = "DIS.HR" FIELDNAMES(118) = "PAT.STATUS" FIELDNAMES(119) = "STMT.FROM" ; CONVS(119) = "D2-" FIELDNAMES(120) = "STMT.THRU" ; CONVS(120) = "D2-" FIELDNAMES(121) = "OCC.DATE" ; CONVS(121) = "D2-" FIELDNAMES(122) = "OCC.CODE" FIELDNAMES(123) = "VAL.CODE" FIELDNAMES(124) = "VAL.AMT" ; CONVS(124) = "MR2Z" FIELDNAMES(125) = "CLONE" FIELDNAMES(126) = "PPO.SCHD" FIELDNAMES(127) = "PRI.DX" FIELDNAMES(128) = "ADM.DX" FIELDNAMES(129) = "INJ.DX" FIELDNAMES(130) = "OTH.DX" FIELDNAMES(131) = "PROC.CODES" FIELDNAMES(132) = "PROC.DATE" ; CONVS(132) = "D2-" FIELDNAMES(133) = "PRV.DEN.LICENSE" FIELDNAMES(134) = "PRINTED" ; CONVS(134) = "D2-" FIELDNAMES(135) = "PREDET" FIELDNAMES(136) = "PAT.PAID.AMT" ; CONVS(136) = "MR2" FIELDNAMES(137) = "SRC" FIELDNAMES(138) = "PWK" FIELDNAMES(139) = "REJLTR" FIELDNAMES(140) = "HND" FIELDNAMES(141) = "REQ.ORIG" ; CONVS(141) = "D2-" FIELDNAMES(142) = "REP" FIELDNAMES(143) = "REP.REFNO" FIELDNAMES(144) = "REP.SENT" ; CONVS(144) = "D2-" FIELDNAMES(145) = "REP.RECV" ; CONVS(145) = "D2-" FIELDNAMES(146) = "REP.TYPE" FIELDNAMES(147) = "REP.AMT" ; CONVS(147) = "MR2," FIELDNAMES(148) = "REP.SAV" ; CONVS(148) = "MR2," FIELDNAMES(149) = "REP.SRC" FIELDNAMES(150) = "OI.SSN" FIELDNAMES(152) = "EHP.DATE" ; CONVS(152) = "D2-" FIELDNAMES(153) = "MEMBER" **FIELDNAMES(154) = "EHP.DCN" FIELDNAMES(154) = "EHP.DCN" FIELDNAMES(155) = "RPT.TYPE" FIELDNAMES(156) = "RPT.DATE" ; CONVS(156) = "D2-" FIELDNAMES(157) = "FAC.NPI" FIELDNAMES(158) = "PRV.NPI" FIELDNAMES(159) = "ATT.NAME" FIELDNAMES(160) = "ATT.NPI" FIELDNAMES(161) = "OPR.NAME" FIELDNAMES(162) = "OPR.NPI" FIELDNAMES(163) = "MEDVALUE.DATE" FIELDNAMES(164) = "COB" FIELDNAMES(165) = "ADJ.ECLAIM" FIELDNAMES(166) = "COB.PAID" ; CONVS(166) = "MR2" FIELDNAMES(167) = "COB.ALLOW" ; CONVS(167) = "MR2" FIELDNAMES(168) = "MED.AOB" * * end of MAKE.FIELDS.ARRAY ************************************************************** FIRST.TIME = 1 POS = 0 FOR N = 1 TO MAXFIELDS IF FIELDNAMES(N) NE "" THEN OLD.VALUE = OLD.REC<N> NEW.VALUE = NEW.REC<N> IF OLD.VALUE NE NEW.VALUE THEN IF FIRST.TIME THEN GOSUB 1000 GOSUB 2000 END END NEXT N IF POS THEN CREC<CHANGES$FIELD.NAME> = FIELD.NAMES CREC<CHANGES$OLD.VALUE> = OLD.VALUES CREC<CHANGES$NEW.VALUE> = NEW.VALUES GOSUB 3000 END RETURN 1000 * INIT REC CREC = "" CREC<CHANGES$MASTER.KEY> = ID CREC<CHANGES$DATE> = DATE() CREC<CHANGES$TIME> = TIME() CREC<CHANGES$LOGON> = @LOGNAME FIELD.NAMES = "" OLD.VALUES = "" NEW.VALUES = "" FIRST.TIME = 0 RETURN 2000 * compare fields FIELD.NAME = FIELDNAMES(N) CONV = CONVS(N) OLD.MAX = DCOUNT(OLD.VALUE,@VM) NEW.MAX = DCOUNT(NEW.VALUE,@VM) IF OLD.MAX LE 1 AND NEW.MAX LE 1 THEN IF CONV NE "" THEN IF OLD.VALUE NE "" THEN OLD.VALUE = OCONV(OLD.VALUE,CONV) IF NEW.VALUE NE "" THEN NEW.VALUE = OCONV(NEW.VALUE,CONV) END POS +=1 FIELD.NAMES<1,POS> = FIELD.NAME OLD.VALUES<1,POS> = OLD.VALUE NEW.VALUES<1,POS> = NEW.VALUE END ELSE * multi-valued fields have line number (value) added to fieldname IF OLD.MAX GT NEW.MAX THEN MAX = OLD.MAX END ELSE MAX = NEW.MAX END FOR L = 1 TO MAX IF OLD.VALUE<1,L> NE NEW.VALUE<1,L> THEN OLD.VALUE.L = OLD.VALUE<1,L> NEW.VALUE.L = NEW.VALUE<1,L> IF CONV NE "" THEN IF OLD.VALUE.L NE "" THEN OLD.VALUE.L = OCONV(OLD.VALUE.L,CONV) IF NEW.VALUE.L NE "" THEN NEW.VALUE.L = OCONV(NEW.VALUE.L,CONV) END POS +=1 FIELD.NAMES<1,POS> = FIELD.NAME:" ":L OLD.VALUES<1,POS> = OLD.VALUE.L NEW.VALUES<1,POS> = NEW.VALUE.L END NEXT L END RETURN 3000 * get nask, write record READVU NASK FROM DICT.CHANGES,"&NEXT.AVAILABLE&",2 ELSE WRITEVU "X" ON DICT.CHANGES,"&NEXT.AVAILABLE&",1 NASK = 1 END READU X FROM CHANGES,NASK LOCKED GO 3000 THEN RELEASE CHANGES,NASK GO 3000 END WRITEV NASK+1 ON DICT.CHANGES,"&NEXT.AVAILABLE&",2 WRITE CREC ON CHANGES,NASK RETURN On Wed, Aug 27, 2008 at 6:53 AM, Alspach, Vance < [EMAIL PROTECTED]> wrote: > What manual contains information on creating Universe triggers for > non-SQLized > files? I cannot seem to find it in any manual > > UV 10.2.4 Pick format > IBM RS6000 > > Vance Alspach > > > ________________________________ > CONFIDENTIALITY. This electronic mail and any files transmitted with it may > contain information proprietary to Deere & Company, or one of its > subsidiaries > or affiliates, and are intended solely for the use of the individual or > entity > to whom they are addressed, shall be maintained in confidence and not > disclosed to third parties without the written consent of the sender. If > you > are not the intended recipient or the person responsible for delivering the > electronic mail to the intended recipient, be advised that you have > received > this electronic mail in error and that any use, dissemination, forwarding, > printing, or copying of this electronic mail is strictly prohibited. If you > have received this electronic mail in error, please immediately notify the > sender by return mail. > ------- > u2-users mailing list > u2-users@listserver.u2ug.org > To unsubscribe please visit http://listserver.u2ug.org/ ------- u2-users mailing list u2-users@listserver.u2ug.org To unsubscribe please visit http://listserver.u2ug.org/