| 1 | DIEF ;SFISC/DPC-FILER DRIVER ;11:15 AM  25 Feb 2002
 | 
|---|
| 2 |  ;;22.0;VA FileMan;**1,11,101**;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 | FILE(DIEFFLAG,DIEFAR,DIEFOUT,DIEFADAR) ;
 | 
|---|
| 5 | FILEX ;
 | 
|---|
| 6 |  N DIEFF,DIEFCNOD,DIEFNODE,DIEFSPOT,DIEFDAS,DIEFIEN,DIEFRFLD,DIEFFLD,DIEFFVAL,DIEFOVAL,DIEFNVAL,DIEFTSRC,DIEFLOCK,DIEFECNT
 | 
|---|
| 7 |  N DIDATA,DIEFFLST,DIEFFREF,DIEFFXR,DIEFLEV,DIEFRLST,DIEFTMP,DIEFTREF
 | 
|---|
| 8 |  S DIEFFLAG=$G(DIEFFLAG)
 | 
|---|
| 9 |  I '$D(DIQUIET) N DIQUIET S DIQUIET=1
 | 
|---|
| 10 |  I '$D(DIFM) N DIFM S DIFM=1 D INIZE^DIEFU
 | 
|---|
| 11 |  I '$$VERFLG^DIEFU(DIEFFLAG,"ISKEOTU") G OUT
 | 
|---|
| 12 |  I DIEFFLAG["T",DIEFFLAG'["E" D BLD^DIALOG(301,DIEFFLAG,DIEFFLAG) G OUT
 | 
|---|
| 13 |  I '$$VROOT^DIEFU(DIEFAR) G OUT
 | 
|---|
| 14 |  I '($D(@DIEFAR)\10) D BLD^DIALOG(305,DIEFAR,DIEFAR) G OUT
 | 
|---|
| 15 |  I DIEFFLAG["K" N DIEFNOLK,DIEFLCKS D LOCK^DIEF1 I DIEFNOLK G OUT
 | 
|---|
| 16 |  ;batch conversion to internal and key validation if requested.
 | 
|---|
| 17 |  I DIEFFLAG["T" S DIEFECNT=$G(DIERR) D  G:DIEFECNT'=$G(DIERR) OUT
 | 
|---|
| 18 |  . S DIEFAR("INT")="^TMP($J,""DIEF"")"
 | 
|---|
| 19 |  . D VALS^DIEVS("R"_$E("U",DIEFFLAG["U"),DIEFAR,DIEFAR("INT"))
 | 
|---|
| 20 |  . S DIEFAR("EXT")=DIEFAR,DIEFAR=DIEFAR("INT")
 | 
|---|
| 21 |  S DIEFTMP=$$GETTMP^DIKC1("DIEF")
 | 
|---|
| 22 |  D DRIVER
 | 
|---|
| 23 | OUT I $D(DIEFLOCK) D UNLOCK^DIEF1
 | 
|---|
| 24 |  I DIEFFLAG'["S",'$G(DIERR) K @$G(DIEFAR("EXT"),DIEFAR)
 | 
|---|
| 25 |  I $D(DIEFAR("INT")) K @DIEFAR("INT")
 | 
|---|
| 26 |  I $G(DIEFOUT)]"" D CALLOUT^DIEFU(DIEFOUT)
 | 
|---|
| 27 |  I $D(DIEFTMP) K @DIEFTMP
 | 
|---|
| 28 |  Q
 | 
|---|
| 29 | DRIVER ;
 | 
|---|
| 30 |  S DIEFF=""
 | 
|---|
| 31 |  F  S DIEFF=$O(@DIEFAR@(DIEFF)) Q:DIEFF=""  D
 | 
|---|
| 32 |  . I DIEFFLAG'["K",'$$VFILE^DIEFU(DIEFF,"D") Q
 | 
|---|
| 33 |  . S DIEFFREF=$$FROOTDA^DIKCU(DIEFF,"D",.DIEFLEV,.DIEFTREF) Q:DIEFFREF=""
 | 
|---|
| 34 |  . S DIEFDAS=""
 | 
|---|
| 35 |  . F  S DIEFDAS=$O(@DIEFAR@(DIEFF,DIEFDAS)) Q:DIEFDAS=""  D
 | 
|---|
| 36 |  . . N D,I,DA,S,DIOPER
 | 
|---|
| 37 |  . . S DIEFIEN=DIEFDAS
 | 
|---|
| 38 |  . . I ($E(DIEFIEN)="?"!($E(DIEFIEN)="+")),$G(DIEFADAR)]"" D
 | 
|---|
| 39 |  . . . I $E(DIEFIEN)="+" S DIOPER="A"
 | 
|---|
| 40 |  . . . E  I $E(DIEFIEN,1,2)="?+",@DIEFADAR@($TR($P(DIEFIEN,","),"?+"),0)="+" S DIOPER="A"
 | 
|---|
| 41 |  . . . S DIEFIEN=$$ADDCONV^DIEF1(DIEFIEN,DIEFADAR)
 | 
|---|
| 42 |  . . S S=" " F  S S=$O(@DIEFTMP@("DEL",DIEFF,S)) Q:S=""  I ","_DIEFIEN?@(".E1"","_S_"""") S DIEFDAS=$C(127) Q
 | 
|---|
| 43 |  . . Q:DIEFDAS=$C(127)
 | 
|---|
| 44 |  . . I DIEFFLAG'["K" Q:'$$GOODIEN(DIEFF,DIEFIEN,DIEFLEV,"","D")
 | 
|---|
| 45 |  . . F I=0:1:DIEFLEV S D="D"_(DIEFLEV-I) N @D S (DA(I),@D)=$P(DIEFIEN,",",I+1)
 | 
|---|
| 46 |  . . S DA=DA(0) K DA(0)
 | 
|---|
| 47 |  . . S DIDATA=$NA(@DIEFFREF@(DA))
 | 
|---|
| 48 |  . . Q:'$$VENTRY(DIEFF,DIEFIEN,"D"_$E(9,DIEFFLAG["E"),DIDATA,DIEFTREF)
 | 
|---|
| 49 |  . . N DOREPL S DIEFRFLD="",DOREPL=0
 | 
|---|
| 50 |  . . F  S DIEFRFLD=$O(@DIEFAR@(DIEFF,DIEFDAS,DIEFRFLD)) Q:DIEFRFLD=""  D
 | 
|---|
| 51 |  . . . N DIEFNG
 | 
|---|
| 52 |  . . . S DIEFFLD=$$CHKFLD^DIEFU(DIEFF,DIEFRFLD) I 'DIEFFLD Q
 | 
|---|
| 53 |  . . . I DIEFFLD=.001 D BLD^DIALOG(520,".001",".001") Q
 | 
|---|
| 54 |  . . . S DIEFNVAL=@DIEFAR@(DIEFF,DIEFDAS,DIEFRFLD)
 | 
|---|
| 55 |  . . . I DIEFFLAG["E",DIEFFLAG'["T" D VAL Q:$D(DIEFNG)
 | 
|---|
| 56 |  . . . I DIEFFLD=.01,"@"[DIEFNVAL D PT01DEL Q
 | 
|---|
| 57 |  . . . S DIEFSPOT=$P(^DD(DIEFF,DIEFFLD,0),U,4)
 | 
|---|
| 58 |  . . . S DIEFNODE=$NA(@DIDATA@($P(DIEFSPOT,";")))
 | 
|---|
| 59 |  . . . S DIEFSPOT=$P(DIEFSPOT,";",2)
 | 
|---|
| 60 |  . . . I DIEFNODE'=$G(DIEFCNOD) D:DOREPL REPLACE S DIEFCNOD=DIEFNODE D RETRIEVE
 | 
|---|
| 61 |  . . . I DIEFNVAL="@" S DIEFNVAL=""
 | 
|---|
| 62 |  . . . D LOADFLD^DIKC1(DIEFF,DIEFFLD,"KS","",$NA(@DIEFTMP@("V")),"DIEFFXR",$NA(@DIEFTMP@("R")),.DIEFFLST,.DIEFRLST)
 | 
|---|
| 63 |  . . . I DIEFFLAG'["T",DIEFFLAG'["U",'$$SKEYCHK^DIEF1(DIEFF,DIEFFLD,DIEFNVAL,.DA,DIEFIEN,.DIEFFXR) K DIEFFXR Q
 | 
|---|
| 64 |  . . . D PUTDATA^DIEF1 Q:$D(DIEFNG)
 | 
|---|
| 65 |  . . . I DIEFNVAL'=$G(DIEFOVAL) D XRFAUD,FIREFLD
 | 
|---|
| 66 |  . . D REPLACE:DOREPL K DIEFCNOD
 | 
|---|
| 67 |  . . D FIREREC
 | 
|---|
| 68 |  Q
 | 
|---|
| 69 | PT01DEL ;
 | 
|---|
| 70 |  ;I '$D(^DD(DIEFF,0,"UP")) D  Q
 | 
|---|
| 71 |  ;. N INT,EXT
 | 
|---|
| 72 |  ;. S INT(1)=$$FLDNM^DIEFU(DIEFF,DIEFFLD),INT(2)=$$FILENM^DIEFU(DIEFF),EXT("FILE")=DIEFF,EXT("FIELD")=DIEFFLD
 | 
|---|
| 73 |  ;. D BLD^DIALOG(712,.INT,.EXT)
 | 
|---|
| 74 |  S DIEFECNT=$G(DIERR)
 | 
|---|
| 75 |  N %,DIC,DIK S DIK=$$OREF^DILF($NA(@DIEFFREF)) D ^DIK
 | 
|---|
| 76 |  I DIEFECNT'=$G(DIERR) D HKERR^DILIBF(DIEFF,DIEFIEN,DIEFFLD,"cross reference")
 | 
|---|
| 77 |  N SB D SUBFILES^DIKCU(DIEFF,.SB) S SB(DIEFF)=""
 | 
|---|
| 78 |  S SB=0 F  S SB=$O(SB(SB)) Q:'SB  S @DIEFTMP@("DEL",SB,DIEFIEN)=""
 | 
|---|
| 79 |  S DIEFRFLD=$C(127),DOREPL=0
 | 
|---|
| 80 |  K @DIEFTMP@("R"),@DIEFTMP@("V")
 | 
|---|
| 81 |  Q
 | 
|---|
| 82 | VAL ;
 | 
|---|
| 83 |  N DIEFTYPE,DIEFINT
 | 
|---|
| 84 |  D DTYP^DIOU(DIEFF,DIEFFLD,.DIEFTYPE) Q:DIEFTYPE=5
 | 
|---|
| 85 |  D VAL^DIEV(DIEFF,DIEFIEN,DIEFFLD,"U",DIEFNVAL,.DIEFINT)
 | 
|---|
| 86 |  I DIEFINT'=U S DIEFNVAL=DIEFINT Q
 | 
|---|
| 87 |  S DIEFNG=1
 | 
|---|
| 88 |  Q
 | 
|---|
| 89 | REPLACE ;
 | 
|---|
| 90 |  S @DIEFCNOD=DIEFFVAL,DOREPL=0
 | 
|---|
| 91 |  Q
 | 
|---|
| 92 | RETRIEVE ;
 | 
|---|
| 93 |  S DIEFFVAL=$G(@DIEFCNOD)
 | 
|---|
| 94 |  Q
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 | XRFAUD ;
 | 
|---|
| 97 |  I $D(^DD(DIEFF,"IX",DIEFFLD)) D REPLACE:$G(DOREPL),IX,RETRIEVE:$D(DOREPL)
 | 
|---|
| 98 |  I $D(^DD(DIEFF,"AUDIT",DIEFFLD)) D AUDIT
 | 
|---|
| 99 |  Q
 | 
|---|
| 100 | IX ;
 | 
|---|
| 101 |  N X,DIEFSORK
 | 
|---|
| 102 |  I DIEFOVAL'="" S DIEFSORK=2 D FIRE
 | 
|---|
| 103 |  I "@"'[DIEFNVAL S DIEFSORK=1 D FIRE
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 | FIRE ;
 | 
|---|
| 106 |  N DIEFI,DICRREC
 | 
|---|
| 107 |  S:$D(DIEFTMP) DICRREC="TRIG^DIEF"
 | 
|---|
| 108 |  S DIEFI=0
 | 
|---|
| 109 |  F  S DIEFI=$O(^DD(DIEFF,DIEFFLD,1,DIEFI)) Q:DIEFI=""  D
 | 
|---|
| 110 |  . N I,Y,DIG,DIH,DIU,DIV,XMB,XMY
 | 
|---|
| 111 |  . S X=$S(DIEFSORK=1:DIEFNVAL,1:DIEFOVAL)
 | 
|---|
| 112 |  . N DIEFECNT S DIEFECNT=$G(DIERR)
 | 
|---|
| 113 |  . X ^(DIEFI,DIEFSORK) ;Naked indicator set in For loop, FIRE+2
 | 
|---|
| 114 |  . I DIEFECNT'=$G(DIERR) D HKERR^DILIBF(DIEFF,DIEFIEN,DIEFFLD,"cross reference")
 | 
|---|
| 115 |  Q
 | 
|---|
| 116 | AUDIT ;
 | 
|---|
| 117 |  N X,DP,DG,DIIX N DIANUM,C,Y
 | 
|---|
| 118 |  S DP=DIEFF,DG=1
 | 
|---|
| 119 |  I DIEFOVAL]"" S X=DIEFOVAL,DIIX="2^"_DIEFFLD D AUDIT^DIET
 | 
|---|
| 120 |  I "@"'[DIEFNVAL,(DIEFOVAL]""!(^DD(DIEFF,DIEFFLD,"AUDIT")'="e")) S X=DIEFNVAL,DIIX="3^"_DIEFFLD_$S(DIEFFLD=.01&(DIEFOVAL=""):"^A",1:"") D AUDIT^DIET
 | 
|---|
| 121 |  Q
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 | FIREFLD ;Fire field-level xrefs
 | 
|---|
| 124 |  Q:'$D(DIEFTMP)
 | 
|---|
| 125 |  I $G(DIEFFLST)]""!($G(DIEFRLST)]"") D
 | 
|---|
| 126 |  . S:'$D(@DIEFTMP@("V",DIEFF,DIEFIEN,DIEFFLD,"O")) ^("O")=DIEFOVAL
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 |  I $G(DIEFFLST)]"" D
 | 
|---|
| 129 |  . D:$G(DOREPL) REPLACE
 | 
|---|
| 130 |  . D FIRE^DIKC(DIEFF,.DA,"KS","DIEFFXR","O","",$E("C",$G(DIOPER)="A"))
 | 
|---|
| 131 |  . D:$D(DOREPL) RETRIEVE
 | 
|---|
| 132 |  K DIEFFXR,DIEFFLST
 | 
|---|
| 133 |  Q
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 | FIREREC ;Fire record-level xrefs
 | 
|---|
| 136 |  N DIKEY
 | 
|---|
| 137 |  D FIRE^DIKC(DIEFF,.DA,"KS",$NA(@DIEFTMP@("R")),"O^"_$S(DIEFFLAG'["T"&(DIEFFLAG'["U"):"^K^N",1:""),.DIKEY,$E("C",$G(DIOPER)="A"))
 | 
|---|
| 138 |  D:$D(DIKEY)>9 RESTORE^DIEF1(.DIKEY,DIEFTMP)
 | 
|---|
| 139 |  K @DIEFTMP@("R"),@DIEFTMP@("V")
 | 
|---|
| 140 |  Q
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 | GOODIEN(DIEFF,DIEFIEN,DIEFLEV,DA,DIEFFLG) ;
 | 
|---|
| 143 |  N ERR,P K DA
 | 
|---|
| 144 |  I DIEFIEN[",,"!($E(DIEFIEN)=",") D  Q 0
 | 
|---|
| 145 |  . D:$G(DIEFFLG)["D" ERR^DIKCU2(307,"",DIEFIEN)
 | 
|---|
| 146 |  I $E(DIEFIEN,$L(DIEFIEN))'="," D  Q 0
 | 
|---|
| 147 |  . D:$G(DIEFFLG)["D" ERR^DIKCU2(304,"",DIEFIEN)
 | 
|---|
| 148 |  I $L(DIEFIEN,",")-2'=DIEFLEV D  Q 0
 | 
|---|
| 149 |  . D:$G(DIEFFLG)["D" ERR^DIKCU2(205,"",DIEFIEN,"",DIEFF)
 | 
|---|
| 150 |  S ERR=0 F P=1:1:$L(DIEFIEN,",")-1 D  Q:ERR
 | 
|---|
| 151 |  . S DA(P-1)=$P(DIEFIEN,",",P)
 | 
|---|
| 152 |  . I DA(P-1)'=+$P(DA(P-1),"E")!(DA(P-1)'>0) D
 | 
|---|
| 153 |  .. K DA S ERR=1 D:$G(DIEFFLG)["D" ERR^DIKCU2(308,"",DIEFIEN)
 | 
|---|
| 154 |  Q:ERR 0
 | 
|---|
| 155 |  S DA=DA(0) K DA(0)
 | 
|---|
| 156 |  Q 1
 | 
|---|
| 157 |  ;
 | 
|---|
| 158 | VENTRY(DIEFF,DIEFIEN,DIEFFLG,DIDATA,DIEFTREF) ;
 | 
|---|
| 159 |  S DIEFFLG=$G(DIEFFLG)
 | 
|---|
| 160 |  ;
 | 
|---|
| 161 |  ;Get root of (sub)record and top level file
 | 
|---|
| 162 |  I $G(DIDATA)=""!(DIEFFLG[9&($G(DIEFTREF)="")) D  Q:$G(DIDATA)="" 0
 | 
|---|
| 163 |  . N DA,DIEFD,DIEFLEV
 | 
|---|
| 164 |  . S DIEFD=$E("D",DIEFFLG["D")
 | 
|---|
| 165 |  . S DIDATA=$$FROOTDA^DIKCU(DIEFF,DIEFD,.DIEFLEV,.DIEFTREF) Q:DIDATA=""
 | 
|---|
| 166 |  . I '$$GOODIEN(DIEFF,DIEFIEN,DIEFLEV,.DA,DIEFD) S DIDATA="" Q
 | 
|---|
| 167 |  . S DIDATA=$NA(@DIDATA@(DA))
 | 
|---|
| 168 |  ;
 | 
|---|
| 169 |  ;Check null .01
 | 
|---|
| 170 |  I $P($G(@DIDATA@(0)),U)="" D  Q 0
 | 
|---|
| 171 |  . D:DIEFFLG["D" ERR^DIKCU2(601,DIEFF,DIEFIEN)
 | 
|---|
| 172 |  ;
 | 
|---|
| 173 |  ;Check -9 node
 | 
|---|
| 174 |  I DIEFFLG[9,$D(@DIEFTREF@($P(DIEFIEN,",",$L(DIEFIEN,",")-1),-9)) D  Q 0
 | 
|---|
| 175 |  . D:DIEFFLG["D" ERR^DIKCU2(602,DIEFF,DIEFIEN)
 | 
|---|
| 176 |  ;
 | 
|---|
| 177 |  Q 1
 | 
|---|
| 178 |  ;
 | 
|---|
| 179 | TRIG ;Called from trigger logic (from DICR via @DICRREC)
 | 
|---|
| 180 |  Q:'$D(DIEFTMP)
 | 
|---|
| 181 |  N DIEFRLST
 | 
|---|
| 182 |  D LOADFLD^DIKC1(DIH,DIG,"KS","",$NA(@DIEFTMP@("V")),"",$NA(@DIEFTMP@("R")),"",.DIEFRLST)
 | 
|---|
| 183 |  I $G(DIEFRLST)]"",'$D(@DIEFTMP@("V",DIH,DICRIENS,DIG,"O")) S ^("O")=DIU
 | 
|---|
| 184 |  Q
 | 
|---|