[613] | 1 | DIKK1 ;SFISC/MKO-CHECK KEY INTEGRITY ;9:19 AM 5 Feb 1998
|
---|
| 2 | ;;22.0;VA FileMan;;Mar 30, 1999
|
---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | ;========================
|
---|
| 6 | ; LOADALL(File,Flag,.MF)
|
---|
| 7 | ;========================
|
---|
| 8 | ;Load info about all keys on a file. Use the "B" xref on the Key file.
|
---|
| 9 | ;In:
|
---|
| 10 | ; KFIL = File # [.31,.01]
|
---|
| 11 | ; FLAG [ "s" : don't include subfile under file
|
---|
| 12 | ;Out:
|
---|
| 13 | ; ^TMP("DIKK",$J,keyFile#,file#) = levDif(keyfile,file) (if > 0)
|
---|
| 14 | ; ^openRootDA
|
---|
| 15 | ; ... file#,field#) = S X=$P($G(...),U,n)
|
---|
| 16 | ; or S X=$E($G(...),m,n)
|
---|
| 17 | ;
|
---|
| 18 | ; ^TMP("DIKK",$J,"UI",file[.01],ui#) = key#
|
---|
| 19 | ; ^TMP("DIKK",$J,"UIR",rFile[.51],ui#) = key#
|
---|
| 20 | ;
|
---|
| 21 | ; MF(file#,mField#) = multiple node
|
---|
| 22 | ; MF(file#,mField#,0) = subfile#
|
---|
| 23 | ;
|
---|
| 24 | LOADALL(KFIL,FLAG,MF) ;
|
---|
| 25 | N FLD,KEY,ROOT
|
---|
| 26 | ;
|
---|
| 27 | ;Get info for all keys on this file
|
---|
| 28 | S KEY=0
|
---|
| 29 | F S KEY=$O(^DD("KEY","B",KFIL,KEY)) Q:'KEY D LOADKEY(KEY,.ROOT)
|
---|
| 30 | Q:$G(FLAG)["s"
|
---|
| 31 | ;
|
---|
| 32 | ;Make a recursive call to get subfiles under KFIL
|
---|
| 33 | N CHK,FIL,MFLD,PAR,SB
|
---|
| 34 | D SUBFILES^DIKCU(KFIL,.SB,.MF)
|
---|
| 35 | S SB=0 F S SB=$O(SB(SB)) Q:'SB D
|
---|
| 36 | . D LOADALL(SB,"s") Q:'$D(^TMP("DIKK",$J,SB))
|
---|
| 37 | . ;
|
---|
| 38 | . ;Set CHK(subfile)="" for subfile and its antecedents
|
---|
| 39 | . S PAR=SB F Q:$D(CHK(PAR)) S CHK(PAR)=1,PAR=$G(SB(PAR)) Q:PAR=""
|
---|
| 40 | ;
|
---|
| 41 | ;Use the CHK array to get rid of unneeded elements in MF
|
---|
| 42 | S FIL=0 F S FIL=$O(MF(FIL)) Q:'FIL D
|
---|
| 43 | . S MFLD=0 F S MFLD=$O(MF(FIL,MFLD)) Q:'MFLD D
|
---|
| 44 | .. K:'$D(CHK(MF(FIL,MFLD,0))) MF(FIL,MFLD)
|
---|
| 45 | Q
|
---|
| 46 | ;
|
---|
| 47 | ;=====================
|
---|
| 48 | ; LOADFLD(File,Field)
|
---|
| 49 | ;=====================
|
---|
| 50 | ;Load info for all keys of which a field is a part.
|
---|
| 51 | ;
|
---|
| 52 | LOADFLD(FIL,FLD) ;
|
---|
| 53 | N KEY
|
---|
| 54 | S KEY=0 F S KEY=$O(^DD("KEY","F",FIL,FLD,KEY)) Q:'KEY D LOADKEY(KEY)
|
---|
| 55 | Q
|
---|
| 56 | ;
|
---|
| 57 | ;===================
|
---|
| 58 | ; LOADKEY(Key,Root)
|
---|
| 59 | ;===================
|
---|
| 60 | ;Load info about a key.
|
---|
| 61 | ;In:
|
---|
| 62 | ; KEY = Key #
|
---|
| 63 | ; .OROOT = Open root of File of Key [.31,.01] (optional) (also output)
|
---|
| 64 | ;Out:
|
---|
| 65 | ; .OROOT = Open root of File of Key [.31,.01]
|
---|
| 66 | ; ^TMP (see LOADALL above)
|
---|
| 67 | ;
|
---|
| 68 | LOADKEY(KEY,OROOT) ;
|
---|
| 69 | N DEC,FIL,FLD,FLDN,KFIL,LDIF,UI,UIFIL,UIRFIL
|
---|
| 70 | ;
|
---|
| 71 | ;Get key data
|
---|
| 72 | S KFIL=$P($G(^DD("KEY",KEY,0)),U),UI=$P($G(^(0)),U,4) Q:'KFIL!'UI
|
---|
| 73 | ;
|
---|
| 74 | ;Get info about UI
|
---|
| 75 | S UIFIL=$P($G(^DD("IX",UI,0)),U),UIRFIL=$P(^(0),U,9) Q:'UIFIL!'UIRFIL
|
---|
| 76 | Q:$D(^TMP("DIKK",$J,"UI",UIFIL,UI)) S ^(UI)=KEY
|
---|
| 77 | S ^TMP("DIKK",$J,"UIR",UIRFIL,UI)=KEY
|
---|
| 78 | ;
|
---|
| 79 | ;Get root of file [.31,.01]
|
---|
| 80 | I $G(OROOT)="" S OROOT=$$FROOTDA^DIKCU(KFIL,"O")_"DA," Q:OROOT="DA,"
|
---|
| 81 | ;
|
---|
| 82 | ;Loop through fields in key; get data extraction code
|
---|
| 83 | S FLDN=0 F S FLDN=$O(^DD("KEY",KEY,2,FLDN)) Q:'FLDN D
|
---|
| 84 | . Q:'$D(^DD("KEY",KEY,2,FLDN,0)) S FLD=$P(^(0),U),FIL=$P(^(0),U,2)
|
---|
| 85 | . Q:'FLD!'FIL Q:$D(^TMP("DIKK",$J,KFIL,FIL,FLD))#2
|
---|
| 86 | . ;
|
---|
| 87 | . I FIL'=KFIL N OROOT D Q:$G(OROOT)=""
|
---|
| 88 | .. I $D(^TMP("DIKK",$J,KFIL,FIL))#2 S LDIF=+^(FIL),OROOT=U_$P(^(FIL),U,2,999)
|
---|
| 89 | .. E D
|
---|
| 90 | ... S LDIF=$$FLEVDIFF^DIKCU(FIL,KFIL) Q:'LDIF
|
---|
| 91 | ... S OROOT=$$FROOTDA^DIKCU(FIL,LDIF_"O") Q:OROOT=""
|
---|
| 92 | ... S OROOT=OROOT_"DA("_LDIF_"),"
|
---|
| 93 | ... S ^TMP("DIKK",$J,KFIL,FIL)=LDIF_OROOT
|
---|
| 94 | . ;
|
---|
| 95 | . S DEC=$$DEC(FIL,FLD,OROOT) Q:DEC=""
|
---|
| 96 | . S ^TMP("DIKK",$J,KFIL,FIL,FLD)=DEC
|
---|
| 97 | ;
|
---|
| 98 | Q
|
---|
| 99 | ;
|
---|
| 100 | ;==============================
|
---|
| 101 | ; $$DEC(File#,Field#,OpenRoot)
|
---|
| 102 | ;==============================
|
---|
| 103 | ;Return code that sets X=data from file; examples:
|
---|
| 104 | ; S X=$P($G(^DIZ(1000,DA(2),"m1",DA(1),"m2",DA,0)),U,3)
|
---|
| 105 | ; S X=$E($G(^DIZ(1000,DA(2),"m1",DA(1),"m2",DA,0)),1,245)
|
---|
| 106 | ;In:
|
---|
| 107 | ; FIL = File #
|
---|
| 108 | ; FLD = Field #
|
---|
| 109 | ; OROOT = Open root of record (with DA strings) (optional)
|
---|
| 110 | ;
|
---|
| 111 | DEC(FIL,FLD,OROOT) ;Get data extraction code
|
---|
| 112 | N ND,PC
|
---|
| 113 | S PC=$P($G(^DD(FIL,FLD,0)),U,4)
|
---|
| 114 | S ND=$P(PC,";"),PC=$P(PC,";",2) Q:ND?." " "" Q:"0 "[PC ""
|
---|
| 115 | S:ND'=+$P(ND,"E") ND=""""_ND_""""
|
---|
| 116 | ;
|
---|
| 117 | I $G(OROOT)="" S OROOT=$$FROOTDA^DIKCU(FIL,"O")_"DA," Q:OROOT="DA," ""
|
---|
| 118 | I PC Q "S X=$P($G("_OROOT_ND_")),U,"_PC_")"
|
---|
| 119 | E Q "S X=$E($G("_OROOT_ND_")),"_+$E(PC,2,999)_","_$P(PC,",",2)_")"
|
---|
| 120 | ;
|
---|