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
> [email protected]
> To unsubscribe please visit http://listserver.u2ug.org/
-------
u2-users mailing list
[email protected]
To unsubscribe please visit http://listserver.u2ug.org/