DIKD ;SFISC/MKO-DELETE A CROSS REFERENCE ;9:14 AM 19 Dec 2001 [ 12/09/2003 4:44 PM ]
;;22.0;VA FileMan;**12,68,95,1002**;Mar 30, 1999
;Per VHA Directive 10-93-142, this routine should not be modified.
;
DELIX(DIFIL,DIFLD,DIXR,DIFLG,DIKDOUT,DIKDMSG) ;Delete traditional xref
DELIXX ;Come here from DELIX^DDMOD
N %,DIC,X,Y,DIF,DIFINFO,DIQUIT
;
;Init
I '$D(DIFM) N DIFM S DIFM=1 D INIZE^DIEFU
S DIFLG=$G(DIFLG)
S DIF=$E("D",DIFLG'["d")
I DIFLG'["c" D CHK G:$G(DIQUIT) END
D FINFO^DIKCU1(DIFIL,.DIFINFO)
;
;Delete data in index
D:DIFLG["K" KILL^DIKD1(DIFIL,DIFLD,DIXR,$E("W",DIFLG["W")_DIF_"c")
;
;Audit, delete xref, recompile
D:$G(^DD(+DIFINFO(0),0,"DDA"))["Y" AUDIT
D DELDEF(DIFIL,DIFLD,DIXR,DIFLG)
D DIEZ(DIFIL,DIFLD,DIFLG,$G(DIKDOUT))
D DIKZ(+DIFINFO(0),DIFLG,$G(DIKDOUT))
;
END ;Move error message if necessary and quit
D:$G(DIKDMSG)]"" CALLOUT^DIEFU(DIKDMSG)
Q
;
DELDEF(DIFIL,DIFLD,DIXR,DIFLG) ;Delete index definition
N DIK,DA,DITYP
S DITYP=$P($G(^DD(DIFIL,DIFLD,1,DIXR,0)),U,3)
K:DITYP="SOUNDEX" ^DD(DIFIL,0,"LOOK"),^("QUES")
;
W:$G(DIFLG)["W" !,"Deleting cross-reference definition ..."
S ^DD(DIFIL,DIFLD,1,0)="^.1"
S DIK="^DD("_DIFIL_","_DIFLD_",1,"
S DA(2)=DIFIL,DA(1)=DIFLD,DA=DIXR
D ^DIK
Q
;
DIEZ(DIFIL,DIFLD,DIFLG,DIKDOUT,DIKTEML) ;Recompile input templates containing field
N DIERR,DITEM,DIMAX,DIRNM
S DIMAX=$$ROUSIZE^DILF
S DITEM=0 F S DITEM=$O(^DIE("AF",DIFIL,DIFLD,DITEM)) Q:'DITEM D
. N DIERR,DIEZMSG
. Q:$D(DIKTEML(DITEM))#2 S DIKTEML(DITEM)=""
. K ^DIE("AF",DIFIL,DIFLD,DITEM),^DIE(DITEM,"ROU")
. S DIRNM=$G(^DIE(DITEM,"ROUOLD")) Q:DIRNM=""
. D EN2^DIEZ(DITEM,$E("T",$G(DIFLG)["W"),DIRNM,"","DIEZMSG")
. I '$G(DIERR),$G(DIKDOUT)]"" D
.. S @DIKDOUT@("DIEZ",DITEM)=$P(^DIE(DITEM,0),U)_U_$P(^(0),U,4)_U_DIRNM
Q
;
DIKZ(Y,DIFLG,DIKDOUT) ;Recompile xrefs
Q:'$G(Y)
N DIERR,DIKZMSG,DMAX,DIRNM
S DIRNM=$G(^DD(Y,0,"DIK")) Q:DIRNM=""
S DMAX=$$ROUSIZE^DILF
D EN2^DIKZ(Y,$E("T",$G(DIFLG)["W"),DIRNM,"","DIKZMSG")
I '$G(DIERR),$G(DIKDOUT)]"" S @DIKDOUT@("DIKZ")=DIRNM
Q
;
AUDIT ;Audit DD change
N %,%D,%T,A0,A1,A2,B0,B1,B2,B3,DA,DDA,DL,DQ,J,N
S DDA="D",N=DIFINFO,J(0)=+DIFINFO(0),J(N)=DIFIL,DL=DIFLD,DQ=DIXR
D XA^DICATTA
S:$G(DIKDOUT)]"" @DIKDOUT@("DDAUD")=1
Q
;
CHK ;Check input parameters
I '$G(DIFIL) D:DIF["D" ERR^DIKCU2(202,"","","","FILE") D QUIT
I '$G(DIFLD) D:DIF["D" ERR^DIKCU2(202,"","","","FIELD") D QUIT
I '$G(DIQUIT),'$$VFNUM^DIKCU1(DIFIL,DIF) D QUIT
I '$G(DIQUIT),'$$VFLD^DIKCU1($G(DIFIL),$G(DIFLD),DIF) D QUIT
;
I $G(DIXR)="" D
. D:DIF["D" ERR^DIKCU2(202,"","","","CROSS-REFERENCE") D QUIT
E I '$G(DIQUIT) D
. I DIXR=+DIXR D
.. I $D(^DD(DIFIL,DIFLD,1,DIXR,0))[0 D:DIF["D" ERR^DIKCU2(202,"","","","CROSS-REFERENCE") D QUIT
. E D
.. N I,XR
.. S I=0 F S I=$O(^DD(DIFIL,DIFLD,1,I)) Q:'I S:$P($G(^(I,0)),U,2)=DIXR XR=$G(XR)+1,XR(XR)=I
.. I $G(XR)=1 S DIXR=XR(XR)
.. E D:DIF["D" ERR^DIKCU2(202,"","","","CROSS-REFERENCE") D QUIT
;
D:'$$VFLAG^DIKCU1(DIFLG,"KWcd",DIF) QUIT
Q
;
QUIT ;Set flag to quit
S DIQUIT=1
Q
DIKD ;SFISC/MKO-DELETE A CROSS REFERENCE ;9:14 AM 19 Dec 2001 [ 12/09/2003 4:44 PM ]
+1 ;;22.0;VA FileMan;**12,68,95,1002**;Mar 30, 1999
+2 ;Per VHA Directive 10-93-142, this routine should not be modified.
+3 ;
DELIX(DIFIL,DIFLD,DIXR,DIFLG,DIKDOUT,DIKDMSG) ;Delete traditional xref
DELIXX ;Come here from DELIX^DDMOD
+1 NEW %,DIC,X,Y,DIF,DIFINFO,DIQUIT
+2 ;
+3 ;Init
+4 IF '$DATA(DIFM)
NEW DIFM
SET DIFM=1
DO INIZE^DIEFU
+5 SET DIFLG=$GET(DIFLG)
+6 SET DIF=$EXTRACT("D",DIFLG'["d")
+7 IF DIFLG'["c"
DO CHK
IF $GET(DIQUIT)
GOTO END
+8 DO FINFO^DIKCU1(DIFIL,.DIFINFO)
+9 ;
+10 ;Delete data in index
+11 IF DIFLG["K"
DO KILL^DIKD1(DIFIL,DIFLD,DIXR,$EXTRACT("W",DIFLG["W")_DIF_"c")
+12 ;
+13 ;Audit, delete xref, recompile
+14 IF $GET(^DD(+DIFINFO(0),0,"DDA"))["Y"
DO AUDIT
+15 DO DELDEF(DIFIL,DIFLD,DIXR,DIFLG)
+16 DO DIEZ(DIFIL,DIFLD,DIFLG,$GET(DIKDOUT))
+17 DO DIKZ(+DIFINFO(0),DIFLG,$GET(DIKDOUT))
+18 ;
END ;Move error message if necessary and quit
+1 IF $GET(DIKDMSG)]""
DO CALLOUT^DIEFU(DIKDMSG)
+2 QUIT
+3 ;
DELDEF(DIFIL,DIFLD,DIXR,DIFLG) ;Delete index definition
+1 NEW DIK,DA,DITYP
+2 SET DITYP=$PIECE($GET(^DD(DIFIL,DIFLD,1,DIXR,0)),U,3)
+3 IF DITYP="SOUNDEX"
KILL ^DD(DIFIL,0,"LOOK"),^("QUES")
+4 ;
+5 IF $GET(DIFLG)["W"
WRITE !,"Deleting cross-reference definition ..."
+6 SET ^DD(DIFIL,DIFLD,1,0)="^.1"
+7 SET DIK="^DD("_DIFIL_","_DIFLD_",1,"
+8 SET DA(2)=DIFIL
SET DA(1)=DIFLD
SET DA=DIXR
+9 DO ^DIK
+10 QUIT
+11 ;
DIEZ(DIFIL,DIFLD,DIFLG,DIKDOUT,DIKTEML) ;Recompile input templates containing field
+1 NEW DIERR,DITEM,DIMAX,DIRNM
+2 SET DIMAX=$$ROUSIZE^DILF
+3 SET DITEM=0
FOR
SET DITEM=$ORDER(^DIE("AF",DIFIL,DIFLD,DITEM))
IF 'DITEM
QUIT
Begin DoDot:1
+4 NEW DIERR,DIEZMSG
+5 IF $DATA(DIKTEML(DITEM))#2
QUIT
SET DIKTEML(DITEM)=""
+6 KILL ^DIE("AF",DIFIL,DIFLD,DITEM),^DIE(DITEM,"ROU")
+7 SET DIRNM=$GET(^DIE(DITEM,"ROUOLD"))
IF DIRNM=""
QUIT
+8 DO EN2^DIEZ(DITEM,$EXTRACT("T",$GET(DIFLG)["W"),DIRNM,"","DIEZMSG")
+9 IF '$GET(DIERR)
IF $GET(DIKDOUT)]""
Begin DoDot:2
+10 SET @DIKDOUT@("DIEZ",DITEM)=$PIECE(^DIE(DITEM,0),U)_U_$PIECE(^(0),U,4)_U_DIRNM
End DoDot:2
End DoDot:1
+11 QUIT
+12 ;
DIKZ(Y,DIFLG,DIKDOUT) ;Recompile xrefs
+1 IF '$GET(Y)
QUIT
+2 NEW DIERR,DIKZMSG,DMAX,DIRNM
+3 SET DIRNM=$GET(^DD(Y,0,"DIK"))
IF DIRNM=""
QUIT
+4 SET DMAX=$$ROUSIZE^DILF
+5 DO EN2^DIKZ(Y,$EXTRACT("T",$GET(DIFLG)["W"),DIRNM,"","DIKZMSG")
+6 IF '$GET(DIERR)
IF $GET(DIKDOUT)]""
SET @DIKDOUT@("DIKZ")=DIRNM
+7 QUIT
+8 ;
AUDIT ;Audit DD change
+1 NEW %,%D,%T,A0,A1,A2,B0,B1,B2,B3,DA,DDA,DL,DQ,J,N
+2 SET DDA="D"
SET N=DIFINFO
SET J(0)=+DIFINFO(0)
SET J(N)=DIFIL
SET DL=DIFLD
SET DQ=DIXR
+3 DO XA^DICATTA
+4 IF $GET(DIKDOUT)]""
SET @DIKDOUT@("DDAUD")=1
+5 QUIT
+6 ;
CHK ;Check input parameters
+1 IF '$GET(DIFIL)
IF DIF["D"
DO ERR^DIKCU2(202,"","","","FILE")
DO QUIT
+2 IF '$GET(DIFLD)
IF DIF["D"
DO ERR^DIKCU2(202,"","","","FIELD")
DO QUIT
+3 IF '$GET(DIQUIT)
IF '$$VFNUM^DIKCU1(DIFIL,DIF)
DO QUIT
+4 IF '$GET(DIQUIT)
IF '$$VFLD^DIKCU1($GET(DIFIL),$GET(DIFLD),DIF)
DO QUIT
+5 ;
+6 IF $GET(DIXR)=""
Begin DoDot:1
+7 IF DIF["D"
DO ERR^DIKCU2(202,"","","","CROSS-REFERENCE")
DO QUIT
End DoDot:1
+8 IF '$TEST
IF '$GET(DIQUIT)
Begin DoDot:1
+9 IF DIXR=+DIXR
Begin DoDot:2
+10 IF $DATA(^DD(DIFIL,DIFLD,1,DIXR,0))[0
IF DIF["D"
DO ERR^DIKCU2(202,"","","","CROSS-REFERENCE")
DO QUIT
End DoDot:2
+11 IF '$TEST
Begin DoDot:2
+12 NEW I,XR
+13 SET I=0
FOR
SET I=$ORDER(^DD(DIFIL,DIFLD,1,I))
IF 'I
QUIT
IF $PIECE($GET(^(I,0)),U,2)=DIXR
SET XR=$GET(XR)+1
SET XR(XR)=I
+14 IF $GET(XR)=1
SET DIXR=XR(XR)
+15 IF '$TEST
IF DIF["D"
DO ERR^DIKCU2(202,"","","","CROSS-REFERENCE")
DO QUIT
End DoDot:2
End DoDot:1
+16 ;
+17 IF '$$VFLAG^DIKCU1(DIFLG,"KWcd",DIF)
DO QUIT
+18 QUIT
+19 ;
QUIT ;Set flag to quit
+1 SET DIQUIT=1
+2 QUIT