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/

Reply via email to