- DIFROMS2 ;SFISC/DCL/TKW-INSTALL DD FROM SOURCE ARRAY ;9:06 AM 14 Jul 2000 [ 04/02/2003 8:25 AM ]
- ;;22.0;VA FileMan;**1001**;APR 1, 2003
- ;;22.0;VA FileMan;**11,53**;Mar 30, 1999
- ;Per VHA Directive 10-93-142, this routine should not be modified.
- ;
- Q
- EN ;
- I '$D(@DIFRSA) D ERR(5) Q
- I '$D(@DIFRFIA) D ERR(4) Q
- G:$G(DIFRFILE) FCHK
- S DIFRFILE=0 F S DIFRFILE=$O(@DIFRFIA@(DIFRFILE)) Q:DIFRFILE'>0 D FILE
- Q
- FCHK I '$D(@DIFRFIA@(DIFRFILE)) D ERR(6) Q
- FILE ;
- N DIFR01,DIFR02,DIFRVR,DIFRFDD
- S DIFR01=$G(@DIFRFIA@(DIFRFILE,0,1)),DIFR02=$G(^(2))
- I $TR($E(DIFR01),"NY","ny")="n" D ERR(1) Q
- S DIFRFDD=$TR($P(DIFR01,"^",3),"FP","fp")'="p"
- I 'DIFRFDD,'$D(^DIC(DIFRFILE)) D ERR(7) Q
- I $D(^DIC(DIFRFILE,0)),$G(@DIFRFIA@(DIFRFILE,0,10))]"" X ^(10) I '$T D ERR(3) Q
- ;I $TR($E(@DIFRFIA@(DIFRFILE,0,5)),"NY","ny")="y",$D(^DIC(DIFRFILE)) D ERR(2) Q ;INSTALL ONLY IF NEW * * PHASING OUT * *
- N %1,DSEC,D,DA,DIC,DIK,DIFRD,DIFRDATA,DIFRFLD,DIFRDIC,DIFRGL,DIFRX,I,X,Y,Z
- S DSEC=$P(DIFR02,"^") ; **>> add file security if new file only <<**
- I 'DSEC,'$D(^DIC(DIFRFILE,0))#2 S DSEC=1 ; Check to see if the file was Deleted during Pre-Install
- ;delete DD wp text for file, field and x-ref description and field tech description
- ;also delete "NM" nodes when installing full DD at specified level
- I 'DIFRFDD D
- .K @DIFRSA@("DIFRNI",DIFRFILE)
- .N DIFRD
- .S DIFRD=DIFRFILE
- .F S DIFRD=$O(@DIFRFIA@(DIFRFILE,DIFRD)) Q:DIFRD'>0 D
- ..Q:$$UP(DIFRSA,DIFRFILE,DIFRD)
- ..S @DIFRSA@("DIFRNI",DIFRFILE,DIFRD)=""
- ..N DIFRNGF,DIFRNGFD
- ..S DIFRNGF=+$G(@DIFRSA@("UP",DIFRFILE,DIFRD,-1))
- ..S DIFRNGFD=.01 F S DIFRNGFD=$O(@DIFRSA@("^DD",DIFRFILE,DIFRNGF,DIFRNGFD)) Q:DIFRNGFD="" Q:+$P($G(^(DIFRNGFD,0)),U,2)=DIFRD
- ..I DIFRNGFD'="" K @DIFRSA@("^DD",DIFRFILE,DIFRNGF,DIFRNGFD)
- ..Q
- .Q
- K:DIFRFDD ^DIC(DIFRFILE,"%D")
- S DIFRD=0
- F S DIFRD=$O(@DIFRSA@("^DD",DIFRFILE,DIFRD)) Q:DIFRD'>0 D
- .I 'DIFRFDD,$D(@DIFRSA@("DIFRNI",DIFRFILE,DIFRD)) Q
- .K:$D(@DIFRSA@("^DD",DIFRFILE,DIFRD,0,"NM"))\10 ^DD(DIFRD,0,"NM")
- .S DIFRFLD=0
- .F S DIFRFLD=$O(@DIFRSA@("^DD",DIFRFILE,DIFRD,DIFRFLD)) Q:DIFRFLD'>0 D
- ..K ^DD(DIFRD,DIFRFLD,21),^(23)
- ..S DIFRX=0
- ..F S DIFRX=$O(@DIFRSA@("^DD",DIFRFILE,DIFRD,DIFRFLD,1,DIFRX)) Q:DIFRX'>0 D
- ...K ^DD(DIFRD,DIFRFLD,1,DIFRX,"%D")
- ...Q
- ..Q
- .Q
- I DIFRFDD F DIFRX="^DIC","^DD" D
- .;I DIFRX="^DIC",'DIFRFDD Q
- .N X
- .I DIFRX="^DIC",$G(^DIC(DIFRFILE,0))]"" S X=$P(^(0),"^",3,9)
- .M @DIFRX=@DIFRSA@(DIFRX,DIFRFILE)
- .I DIFRX="^DIC",$G(X)]"" S $P(^DIC(DIFRFILE,0),"^",3,9)=X
- .I DSEC,$D(@DIFRSA@("SEC",DIFRX,DIFRFILE)) M @DIFRX=@DIFRSA@("SEC",DIFRX,DIFRFILE)
- .Q
- I 'DIFRFDD D
- .N DIFRD
- .S DIFRD=0
- .F S DIFRD=$O(@DIFRSA@("^DD",DIFRFILE,DIFRD)) Q:DIFRD'>0 D
- ..I $D(@DIFRSA@("DIFRNI",DIFRFILE,DIFRD)) Q
- ..M ^DD(DIFRD)=@DIFRSA@("^DD",DIFRFILE,DIFRD)
- ..I DSEC,$D(@DIFRSA@("SEC","^DD",DIFRFILE,DIFRD)) M ^DD(DIFRD)=@DIFRSA@("SEC","^DD",DIFRFILE,DIFRD)
- ..Q
- .Q
- S DIFRD=0 F S DIFRD=$O(@DIFRFIA@(DIFRFILE,DIFRD)) Q:DIFRD'>0 D
- .I 'DIFRFDD,$D(@DIFRSA@("DIFRNI",DIFRFILE,DIFRD)) Q
- .S D=DIFRD,DIK="A" F S DIK=$O(^DD(D,DIK)) Q:DIK="" K ^(DIK)
- .S DA(1)=D,DIK="^DD("_D_"," D IXALL^DIK
- .I $D(^DIC(D,"%",0)) S DIK="^DIC(D,""%""," D IXALL^DIK
- .Q
- I 'DIFRFDD D G IXKEY
- .Q:'$D(@DIFRSA@("^DD",DIFRFILE,DIFRFILE,.01))
- .S $P(@(^DIC(DIFRFILE,0,"GL")_"0)"),"^",2)=$$HDR2P^DIFROMSS(DIFRFILE)
- .Q
- S DIFRGL=^DIC(DIFRFILE,0,"GL"),DIFRDIC=$P(^DIC(DIFRFILE,0),U,1,2)
- S $P(DIFRDIC,"^",2)=@DIFRFIA@(DIFRFILE,0,0)
- I DIFRFDD,+$G(@DIFRFIA@(DIFRFILE,0,"VR")) S DIFRVR=^("VR") D
- .S ^DD(DIFRFILE,0,"VR")=$P(DIFRVR,"^")
- .S ^DD(DIFRFILE,0,"VRPK")=$P(DIFRVR,"^",2)
- .Q
- S DIFRDATA=$D(@(DIFRGL_"0)")),^(0)=DIFRDIC_"^"_$S(DIFRDATA#2:$P(^(0),"^",3,9),1:"^")
- ;
- IXKEY ; Bring INDEX and KEY entries
- K ^TMP("DIFROMS2",$J,"TRIG")
- S DIFRD=0
- F S DIFRD=$O(@DIFRSA@("IX",DIFRFILE,DIFRD)) Q:'DIFRD D DDIXIN^DIFROMSX(DIFRFILE,DIFRD,DIFRSA)
- K ^TMP("DIFROMS2",$J,"TRIG")
- S DIFRD=0
- F S DIFRD=$O(@DIFRSA@("KEY",DIFRFILE,DIFRD)) Q:'DIFRD D DDKEYIN^DIFROMSY(DIFRFILE,DIFRD,DIFRSA)
- ;
- DIKZ I $D(^DD(DIFRFILE,0,"DIK")) D
- .N %X,DIKJ,DIR,DMAX,X,Y,DIFRDIKA
- .D EN2^DIKZ(DIFRFILE,"",^DD(DIFRFILE,0,"DIK"),^DD("ROU"),"DIFRDIKA")
- .I $D(DIFRDIKA) M @DIFRSA@("DIKZ",DIFRFILE)=DIFRDIKA
- .S @DIFRSA@("DIKZ",DIFRFILE)=^DD(DIFRFILE,0,"DIK")
- .Q
- I 'DIFRFDD,$D(@DIFRSA@("DIFRNI",DIFRFILE)) D
- .N DIFRD
- .S DIFRD=0
- .F S DIFRD=$O(@DIFRSA@("DIFRNI",DIFRFILE,DIFRD)) Q:DIFRD'>0 D
- ..N DIFRERR S DIFRERR(1)=DIFRD
- ..D BLD^DIALOG(9512,.DIFRERR)
- ..Q
- .Q
- Q
- ;
- UP(ROOT,FILE,DDN) ;Return 1 or 0 to install
- Q:FILE=DDN 1
- Q:$D(^DD(DDN)) 1
- Q:'$D(@ROOT@("UP",FILE,DDN)) 1
- N MP,PARENT,T,X
- S MP=0,X="",T=0
- F S X=$O(@ROOT@("UP",FILE,DDN,X)) Q:X="" S PARENT=+^(X) D Q:T!(MP)
- .I $D(^DD(PARENT))!($G(@ROOT@("FIA",FILE,PARENT))=0) S:X=0 T=1 Q
- .S MP=1
- .Q
- Q T
- ;
- ERR(X) D BLD^DIALOG($P($T(ERR+X),";",5)) Q
- ;;FIA Node Is Set To "No DD Update";1;9503
- ;;Already Exist On Target System (INSTALL ONLY IF NEW);2;9504
- ;;Did Not Pass DD Screen;3;9505
- ;;FIA Array Does Not Exist;4;9511
- ;;Distribution Array Does Not Exist;5;9506
- ;;FIA File Number Invalid;6;9507
- ;;Partial DD/File Does Not Already Exist On Target System;7;9508
- DIFROMS2 ;SFISC/DCL/TKW-INSTALL DD FROM SOURCE ARRAY ;9:06 AM 14 Jul 2000 [ 04/02/2003 8:25 AM ]
- +1 ;;22.0;VA FileMan;**1001**;APR 1, 2003
- +2 ;;22.0;VA FileMan;**11,53**;Mar 30, 1999
- +3 ;Per VHA Directive 10-93-142, this routine should not be modified.
- +4 ;
- +5 QUIT
- EN ;
- +1 IF '$DATA(@DIFRSA)
- DO ERR(5)
- QUIT
- +2 IF '$DATA(@DIFRFIA)
- DO ERR(4)
- QUIT
- +3 IF $GET(DIFRFILE)
- GOTO FCHK
- +4 SET DIFRFILE=0
- FOR
- SET DIFRFILE=$ORDER(@DIFRFIA@(DIFRFILE))
- IF DIFRFILE'>0
- QUIT
- DO FILE
- +5 QUIT
- FCHK IF '$DATA(@DIFRFIA@(DIFRFILE))
- DO ERR(6)
- QUIT
- FILE ;
- +1 NEW DIFR01,DIFR02,DIFRVR,DIFRFDD
- +2 SET DIFR01=$GET(@DIFRFIA@(DIFRFILE,0,1))
- SET DIFR02=$GET(^(2))
- +3 IF $TRANSLATE($EXTRACT(DIFR01),"NY","ny")="n"
- DO ERR(1)
- QUIT
- +4 SET DIFRFDD=$TRANSLATE($PIECE(DIFR01,"^",3),"FP","fp")'="p"
- +5 IF 'DIFRFDD
- IF '$DATA(^DIC(DIFRFILE))
- DO ERR(7)
- QUIT
- +6 IF $DATA(^DIC(DIFRFILE,0))
- IF $GET(@DIFRFIA@(DIFRFILE,0,10))]""
- XECUTE ^(10)
- IF '$TEST
- DO ERR(3)
- QUIT
- +7 ;I $TR($E(@DIFRFIA@(DIFRFILE,0,5)),"NY","ny")="y",$D(^DIC(DIFRFILE)) D ERR(2) Q ;INSTALL ONLY IF NEW * * PHASING OUT * *
- +8 NEW %1,DSEC,D,DA,DIC,DIK,DIFRD,DIFRDATA,DIFRFLD,DIFRDIC,DIFRGL,DIFRX,I,X,Y,Z
- +9 ; **>> add file security if new file only <<**
- SET DSEC=$PIECE(DIFR02,"^")
- +10 ; Check to see if the file was Deleted during Pre-Install
- IF 'DSEC
- IF '$DATA(^DIC(DIFRFILE,0))#2
- SET DSEC=1
- +11 ;delete DD wp text for file, field and x-ref description and field tech description
- +12 ;also delete "NM" nodes when installing full DD at specified level
- +13 IF 'DIFRFDD
- Begin DoDot:1
- +14 KILL @DIFRSA@("DIFRNI",DIFRFILE)
- +15 NEW DIFRD
- +16 SET DIFRD=DIFRFILE
- +17 FOR
- SET DIFRD=$ORDER(@DIFRFIA@(DIFRFILE,DIFRD))
- IF DIFRD'>0
- QUIT
- Begin DoDot:2
- +18 IF $$UP(DIFRSA,DIFRFILE,DIFRD)
- QUIT
- +19 SET @DIFRSA@("DIFRNI",DIFRFILE,DIFRD)=""
- +20 NEW DIFRNGF,DIFRNGFD
- +21 SET DIFRNGF=+$GET(@DIFRSA@("UP",DIFRFILE,DIFRD,-1))
- +22 SET DIFRNGFD=.01
- FOR
- SET DIFRNGFD=$ORDER(@DIFRSA@("^DD",DIFRFILE,DIFRNGF,DIFRNGFD))
- IF DIFRNGFD=""
- QUIT
- IF +$PIECE($GET(^(DIFRNGFD,0)),U,2)=DIFRD
- QUIT
- +23 IF DIFRNGFD'=""
- KILL @DIFRSA@("^DD",DIFRFILE,DIFRNGF,DIFRNGFD)
- +24 QUIT
- End DoDot:2
- +25 QUIT
- End DoDot:1
- +26 IF DIFRFDD
- KILL ^DIC(DIFRFILE,"%D")
- +27 SET DIFRD=0
- +28 FOR
- SET DIFRD=$ORDER(@DIFRSA@("^DD",DIFRFILE,DIFRD))
- IF DIFRD'>0
- QUIT
- Begin DoDot:1
- +29 IF 'DIFRFDD
- IF $DATA(@DIFRSA@("DIFRNI",DIFRFILE,DIFRD))
- QUIT
- +30 IF $DATA(@DIFRSA@("^DD",DIFRFILE,DIFRD,0,"NM"))\10
- KILL ^DD(DIFRD,0,"NM")
- +31 SET DIFRFLD=0
- +32 FOR
- SET DIFRFLD=$ORDER(@DIFRSA@("^DD",DIFRFILE,DIFRD,DIFRFLD))
- IF DIFRFLD'>0
- QUIT
- Begin DoDot:2
- +33 KILL ^DD(DIFRD,DIFRFLD,21),^(23)
- +34 SET DIFRX=0
- +35 FOR
- SET DIFRX=$ORDER(@DIFRSA@("^DD",DIFRFILE,DIFRD,DIFRFLD,1,DIFRX))
- IF DIFRX'>0
- QUIT
- Begin DoDot:3
- +36 KILL ^DD(DIFRD,DIFRFLD,1,DIFRX,"%D")
- +37 QUIT
- End DoDot:3
- +38 QUIT
- End DoDot:2
- +39 QUIT
- End DoDot:1
- +40 IF DIFRFDD
- FOR DIFRX="^DIC","^DD"
- Begin DoDot:1
- +41 ;I DIFRX="^DIC",'DIFRFDD Q
- +42 NEW X
- +43 IF DIFRX="^DIC"
- IF $GET(^DIC(DIFRFILE,0))]""
- SET X=$PIECE(^(0),"^",3,9)
- +44 MERGE @DIFRX=@DIFRSA@(DIFRX,DIFRFILE)
- +45 IF DIFRX="^DIC"
- IF $GET(X)]""
- SET $PIECE(^DIC(DIFRFILE,0),"^",3,9)=X
- +46 IF DSEC
- IF $DATA(@DIFRSA@("SEC",DIFRX,DIFRFILE))
- MERGE @DIFRX=@DIFRSA@("SEC",DIFRX,DIFRFILE)
- +47 QUIT
- End DoDot:1
- +48 IF 'DIFRFDD
- Begin DoDot:1
- +49 NEW DIFRD
- +50 SET DIFRD=0
- +51 FOR
- SET DIFRD=$ORDER(@DIFRSA@("^DD",DIFRFILE,DIFRD))
- IF DIFRD'>0
- QUIT
- Begin DoDot:2
- +52 IF $DATA(@DIFRSA@("DIFRNI",DIFRFILE,DIFRD))
- QUIT
- +53 MERGE ^DD(DIFRD)=@DIFRSA@("^DD",DIFRFILE,DIFRD)
- +54 IF DSEC
- IF $DATA(@DIFRSA@("SEC","^DD",DIFRFILE,DIFRD))
- MERGE ^DD(DIFRD)=@DIFRSA@("SEC","^DD",DIFRFILE,DIFRD)
- +55 QUIT
- End DoDot:2
- +56 QUIT
- End DoDot:1
- +57 SET DIFRD=0
- FOR
- SET DIFRD=$ORDER(@DIFRFIA@(DIFRFILE,DIFRD))
- IF DIFRD'>0
- QUIT
- Begin DoDot:1
- +58 IF 'DIFRFDD
- IF $DATA(@DIFRSA@("DIFRNI",DIFRFILE,DIFRD))
- QUIT
- +59 SET D=DIFRD
- SET DIK="A"
- FOR
- SET DIK=$ORDER(^DD(D,DIK))
- IF DIK=""
- QUIT
- KILL ^(DIK)
- +60 SET DA(1)=D
- SET DIK="^DD("_D_","
- DO IXALL^DIK
- +61 IF $DATA(^DIC(D,"%",0))
- SET DIK="^DIC(D,""%"","
- DO IXALL^DIK
- +62 QUIT
- End DoDot:1
- +63 IF 'DIFRFDD
- Begin DoDot:1
- +64 IF '$DATA(@DIFRSA@("^DD",DIFRFILE,DIFRFILE,.01))
- QUIT
- +65 SET $PIECE(@(^DIC(DIFRFILE,0,"GL")_"0)"),"^",2)=$$HDR2P^DIFROMSS(DIFRFILE)
- +66 QUIT
- End DoDot:1
- GOTO IXKEY
- +67 SET DIFRGL=^DIC(DIFRFILE,0,"GL")
- SET DIFRDIC=$PIECE(^DIC(DIFRFILE,0),U,1,2)
- +68 SET $PIECE(DIFRDIC,"^",2)=@DIFRFIA@(DIFRFILE,0,0)
- +69 IF DIFRFDD
- IF +$GET(@DIFRFIA@(DIFRFILE,0,"VR"))
- SET DIFRVR=^("VR")
- Begin DoDot:1
- +70 SET ^DD(DIFRFILE,0,"VR")=$PIECE(DIFRVR,"^")
- +71 SET ^DD(DIFRFILE,0,"VRPK")=$PIECE(DIFRVR,"^",2)
- +72 QUIT
- End DoDot:1
- +73 SET DIFRDATA=$DATA(@(DIFRGL_"0)"))
- SET ^(0)=DIFRDIC_"^"_$SELECT(DIFRDATA#2:$PIECE(^(0),"^",3,9),1:"^")
- +74 ;
- IXKEY ; Bring INDEX and KEY entries
- +1 KILL ^TMP("DIFROMS2",$JOB,"TRIG")
- +2 SET DIFRD=0
- +3 FOR
- SET DIFRD=$ORDER(@DIFRSA@("IX",DIFRFILE,DIFRD))
- IF 'DIFRD
- QUIT
- DO DDIXIN^DIFROMSX(DIFRFILE,DIFRD,DIFRSA)
- +4 KILL ^TMP("DIFROMS2",$JOB,"TRIG")
- +5 SET DIFRD=0
- +6 FOR
- SET DIFRD=$ORDER(@DIFRSA@("KEY",DIFRFILE,DIFRD))
- IF 'DIFRD
- QUIT
- DO DDKEYIN^DIFROMSY(DIFRFILE,DIFRD,DIFRSA)
- +7 ;
- DIKZ IF $DATA(^DD(DIFRFILE,0,"DIK"))
- Begin DoDot:1
- +1 NEW %X,DIKJ,DIR,DMAX,X,Y,DIFRDIKA
- +2 DO EN2^DIKZ(DIFRFILE,"",^DD(DIFRFILE,0,"DIK"),^DD("ROU"),"DIFRDIKA")
- +3 IF $DATA(DIFRDIKA)
- MERGE @DIFRSA@("DIKZ",DIFRFILE)=DIFRDIKA
- +4 SET @DIFRSA@("DIKZ",DIFRFILE)=^DD(DIFRFILE,0,"DIK")
- +5 QUIT
- End DoDot:1
- +6 IF 'DIFRFDD
- IF $DATA(@DIFRSA@("DIFRNI",DIFRFILE))
- Begin DoDot:1
- +7 NEW DIFRD
- +8 SET DIFRD=0
- +9 FOR
- SET DIFRD=$ORDER(@DIFRSA@("DIFRNI",DIFRFILE,DIFRD))
- IF DIFRD'>0
- QUIT
- Begin DoDot:2
- +10 NEW DIFRERR
- SET DIFRERR(1)=DIFRD
- +11 DO BLD^DIALOG(9512,.DIFRERR)
- +12 QUIT
- End DoDot:2
- +13 QUIT
- End DoDot:1
- +14 QUIT
- +15 ;
- UP(ROOT,FILE,DDN) ;Return 1 or 0 to install
- +1 IF FILE=DDN
- QUIT 1
- +2 IF $DATA(^DD(DDN))
- QUIT 1
- +3 IF '$DATA(@ROOT@("UP",FILE,DDN))
- QUIT 1
- +4 NEW MP,PARENT,T,X
- +5 SET MP=0
- SET X=""
- SET T=0
- +6 FOR
- SET X=$ORDER(@ROOT@("UP",FILE,DDN,X))
- IF X=""
- QUIT
- SET PARENT=+^(X)
- Begin DoDot:1
- +7 IF $DATA(^DD(PARENT))!($GET(@ROOT@("FIA",FILE,PARENT))=0)
- IF X=0
- SET T=1
- QUIT
- +8 SET MP=1
- +9 QUIT
- End DoDot:1
- IF T!(MP)
- QUIT
- +10 QUIT T
- +11 ;
- ERR(X) DO BLD^DIALOG($PIECE($TEXT(ERR+X),";",5))
- QUIT
- +1 ;;FIA Node Is Set To "No DD Update";1;9503
- +2 ;;Already Exist On Target System (INSTALL ONLY IF NEW);2;9504
- +3 ;;Did Not Pass DD Screen;3;9505
- +4 ;;FIA Array Does Not Exist;4;9511
- +5 ;;Distribution Array Does Not Exist;5;9506
- +6 ;;FIA File Number Invalid;6;9507
- +7 ;;Partial DD/File Does Not Already Exist On Target System;7;9508