| 1 | DIKC2 ;SFISC/MKO-CHECK INPUT PARAMETERS TO INDEX^DIKC ;8:25 AM  30 Jul 1999 | 
|---|
| 2 | ;;22.0;VA FileMan;**11**;Mar 30, 1999 | 
|---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ;CHK:  Check input parameters to INDEX^DIKC | 
|---|
| 5 | ;Also set: | 
|---|
| 6 | ; DA     = DA array | 
|---|
| 7 | ; DIROOT = Closed root of file | 
|---|
| 8 | ; DIFILE = File # | 
|---|
| 9 | ; DIKERR = "X" : if there's a problem | 
|---|
| 10 | ; | 
|---|
| 11 | CHK ;File is a required input param | 
|---|
| 12 | I $G(DIFILE)="" D:DIF["D" ERR^DIKCU2(202,"","","","FILE") D ERR Q | 
|---|
| 13 | ; | 
|---|
| 14 | ;Check DIREC and set DA array | 
|---|
| 15 | I $G(DIREC)'["," M DA=DIREC | 
|---|
| 16 | E  S:DIREC'?.E1"," DIREC=DIREC_"," D DA^DILF(DIREC,.DA) | 
|---|
| 17 | S:'$G(DA) DA="" | 
|---|
| 18 | I '$$VDA^DIKCU1(.DA,DIF) D ERR Q | 
|---|
| 19 | ; | 
|---|
| 20 | ;Check DICTRL parameter | 
|---|
| 21 | I $G(DICTRL)]"",'$$VFLAG^DIKCU1(DICTRL,"KSsDWiRIkCTrf",DIF) D ERR | 
|---|
| 22 | I $G(DICTRL)["W",'$$VFNUM^DIKCU1(+$P(DICTRL,"W",2),DIF) D ERR | 
|---|
| 23 | I $G(DICTRL)["C",$G(DICTRL)["T" D | 
|---|
| 24 | . D:DIF["D" ERR^DIKCU2(301,"","","","C and T") | 
|---|
| 25 | . D ERR | 
|---|
| 26 | E  I $G(DICTRL)["C",$G(DICTRL)["K" D | 
|---|
| 27 | . D:DIF["D" ERR^DIKCU2(301,"","","","C and K") | 
|---|
| 28 | . D ERR | 
|---|
| 29 | E  I $G(DICTRL)["T",$G(DICTRL)["S" D | 
|---|
| 30 | . D:DIF["D" ERR^DIKCU2(301,"","","","T and S") | 
|---|
| 31 | . D ERR | 
|---|
| 32 | Q:$G(DIKERR)="X" | 
|---|
| 33 | ; | 
|---|
| 34 | ;Set DIFILE and DIROOT | 
|---|
| 35 | N DILEV | 
|---|
| 36 | I DIFILE=+$P(DIFILE,"E") D | 
|---|
| 37 | . S DIROOT=$$FROOTDA^DIKCU(DIFILE,DIF,.DILEV) I DIROOT="" D ERR Q | 
|---|
| 38 | . I DILEV,$D(DA(DILEV))[0 D  Q | 
|---|
| 39 | .. D:DIF["D" ERR^DIKCU2(205,"",$$IENS^DILF(.DA),"",DIFILE) D ERR | 
|---|
| 40 | . S:DILEV DIROOT=$NA(@DIROOT) | 
|---|
| 41 | . S DIFILE=$$FNUM^DIKCU(DIROOT,DIF) I DIFILE="" D ERR | 
|---|
| 42 | E  D | 
|---|
| 43 | . S DIROOT=DIFILE | 
|---|
| 44 | . S:"(,"[$E(DIROOT,$L(DIROOT)) DIROOT=$$CREF^DILF(DIFILE) | 
|---|
| 45 | . S DIFILE=$$FNUM^DIKCU(DIROOT,DIF) I DIFILE="" D ERR Q | 
|---|
| 46 | . S DILEV=$$FLEV^DIKCU(DIFILE,DIF) I DILEV="" D ERR Q | 
|---|
| 47 | . I DILEV,$D(DA(DILEV))[0 D  Q | 
|---|
| 48 | .. D:DIF["D" ERR^DIKCU2(205,"",$$IENS^DILF(.DA),"",DIFILE) D ERR | 
|---|
| 49 | ; | 
|---|
| 50 | ;Set DIKVAL,DIKON | 
|---|
| 51 | S DIKVAL=$G(DICTRL("VAL")) | 
|---|
| 52 | I DIKVAL]"" D | 
|---|
| 53 | . S:"(,_"'[$E(DIKVAL,$L(DIKVAL)) DIKVAL=$$OREF^DILF(DIKVAL) | 
|---|
| 54 | . S DIKON="O^N" | 
|---|
| 55 | E  S DIKON="" | 
|---|
| 56 | Q | 
|---|
| 57 | ; | 
|---|
| 58 | ERR ;Set error flag | 
|---|
| 59 | S DIKERR="X" | 
|---|
| 60 | Q | 
|---|
| 61 | ; | 
|---|
| 62 | ;========================== | 
|---|
| 63 | ; CRV(Index,ValueRoot,TMP) | 
|---|
| 64 | ;========================== | 
|---|
| 65 | ;Load values from Cross Reference Values multiple into @TMP | 
|---|
| 66 | ;In: | 
|---|
| 67 | ;  XR    = Index # | 
|---|
| 68 | ;  VALRT = Array Ref where old/new values are located | 
|---|
| 69 | ;  TMP   = Root of array to store data | 
|---|
| 70 | ;Returns: | 
|---|
| 71 | ;  @TMP@(RootFile,Index#)             = Name^File^RootType^Type | 
|---|
| 72 | ;                 Index#,Order#)      = Code that sets X to the data | 
|---|
| 73 | ;                        Order#,"SS") = Subscript^MaxLength | 
|---|
| 74 | ;                               "T")  = Transform (for 'Field'-type) | 
|---|
| 75 | ;                               "F")  = file^field^levdiff(file,rFile) | 
|---|
| 76 | CRV(XR,VALRT,TMP) ; | 
|---|
| 77 | Q:'$G(XR)!($G(TMP)="") | 
|---|
| 78 | N CRV,CRV0,DEC,FIL,FLD,MAXL,ND,ORD,OROOT,RFIL,SBSC,TYPE | 
|---|
| 79 | ; | 
|---|
| 80 | S RFIL=$P($G(^DD("IX",XR,0)),U,9) Q:RFIL=""  Q:$D(@TMP@(RFIL,XR)) | 
|---|
| 81 | S @TMP@(RFIL,XR)=$P(^DD("IX",XR,0),U,2)_U_$P(^(0),U)_U_$P(^(0),U,8)_U_$P(^(0),U,4) | 
|---|
| 82 | S OROOT=$$FROOTDA^DIKCU(RFIL,"O")_"DA," Q:OROOT="DA," | 
|---|
| 83 | ; | 
|---|
| 84 | S CRV=0 F  S CRV=$O(^DD("IX",XR,11.1,CRV)) Q:'CRV  D | 
|---|
| 85 | . S CRV0=$G(^DD("IX",XR,11.1,CRV,0)) | 
|---|
| 86 | . S ORD=$P(CRV0,U),TYPE=$P(CRV0,U,2),MAXL=$P(CRV0,U,5),SBSC=$P(CRV0,U,6) | 
|---|
| 87 | . Q:ORD=""!(TYPE="") | 
|---|
| 88 | . ; | 
|---|
| 89 | . I TYPE="F" D | 
|---|
| 90 | .. S FIL=$P(CRV0,U,3),FLD=$P(CRV0,U,4) Q:(FIL="")!'FLD | 
|---|
| 91 | .. I FIL'=RFIL N OROOT,LDIF D  Q:$G(OROOT)="" | 
|---|
| 92 | ... S LDIF=$$FLEVDIFF^DIKCU(FIL,RFIL) Q:'LDIF | 
|---|
| 93 | ... S OROOT=$$FROOTDA^DIKCU(FIL,LDIF_"O") Q:OROOT="" | 
|---|
| 94 | ... S OROOT=OROOT_"DA("_LDIF_")," | 
|---|
| 95 | .. S DEC=$$DEC(FIL,FLD,$G(VALRT),OROOT) Q:DEC="" | 
|---|
| 96 | .. S @TMP@(RFIL,XR,ORD)=DEC | 
|---|
| 97 | .. S @TMP@(RFIL,XR,ORD,"F")=FIL_U_FLD_$S($G(LDIF):U_LDIF,1:"") | 
|---|
| 98 | .. S:$G(^DD("IX",XR,11.1,CRV,2))'?."^" @TMP@(RFIL,XR,ORD,"T")=^(2) | 
|---|
| 99 | . ; | 
|---|
| 100 | . E  I TYPE="C" S @TMP@(RFIL,XR,ORD)=$G(^DD("IX",XR,11.1,CRV,1.5)) | 
|---|
| 101 | . ; | 
|---|
| 102 | . S:SBSC @TMP@(RFIL,XR,ORD,"SS")=SBSC_$S(MAXL:U_MAXL,1:"") | 
|---|
| 103 | Q | 
|---|
| 104 | ; | 
|---|
| 105 | ;====================================== | 
|---|
| 106 | ; $$DEC(File,Field,ValueRoot,OpenRoot) | 
|---|
| 107 | ;====================================== | 
|---|
| 108 | ;Return Data Extraction Code -- M code that sets X equal to the data. | 
|---|
| 109 | ;In: | 
|---|
| 110 | ;  FIL   = File # | 
|---|
| 111 | ;  FLD   = Field # | 
|---|
| 112 | ;  VALRT = Array Ref where old/new values are located | 
|---|
| 113 | ;           if ends in "_", FILE subscript is concatenated to the last | 
|---|
| 114 | ;           subscript (used by DDS02) | 
|---|
| 115 | ;  OROOT = Open root of record w/ DA subscripts | 
|---|
| 116 | ;Returns:  M code | 
|---|
| 117 | ;  For example: | 
|---|
| 118 | ;    S X=$P(^DIZ(1000,DA(1),100,0),U,2)   or | 
|---|
| 119 | ;    S X=$E(^DIZ(1000,DA(1),100,1),1,245) or | 
|---|
| 120 | ;    S X=$G(array(file,DIIENS,field,DION),$P(^root(DA,nd),U,pc)) | 
|---|
| 121 | ; | 
|---|
| 122 | DEC(FIL,FLD,VALRT,OROOT) ; | 
|---|
| 123 | Q:$P($G(^DD(FIL,FLD,0)),U)="" "" | 
|---|
| 124 | ; | 
|---|
| 125 | N ND,PC,DEC | 
|---|
| 126 | S PC=$P($G(^DD(FIL,FLD,0)),U,4) | 
|---|
| 127 | S ND=$P(PC,";"),PC=$P(PC,";",2) Q:ND?." "!("0 "[PC) "" | 
|---|
| 128 | S:ND'=+$P(ND,"E") ND=""""_ND_"""" | 
|---|
| 129 | ; | 
|---|
| 130 | I $G(OROOT)="" S OROOT=$$FROOTDA^DIKCU(FIL,"O")_"DA," Q:OROOT="DA," "" | 
|---|
| 131 | I PC S DEC="$P($G("_OROOT_ND_")),U,"_PC_")" | 
|---|
| 132 | E  S DEC="$E($G("_OROOT_ND_")),"_+$E(PC,2,999)_","_$P(PC,",",2)_")" | 
|---|
| 133 | ; | 
|---|
| 134 | I $G(VALRT)]"" D | 
|---|
| 135 | . I $E(VALRT,$L(VALRT))="_" D  Q | 
|---|
| 136 | .. S VALRT=$E(VALRT,1,$L(VALRT)-3) | 
|---|
| 137 | .. S DEC="$G("_VALRT_FIL_""",DIIENS,"_FLD_",DION),"_DEC_")" | 
|---|
| 138 | . S:"(,"'[$E(VALRT,$L(VALRT)) VALRT=$$OREF^DILF(VALRT) | 
|---|
| 139 | . S DEC="$G("_VALRT_FIL_",DIIENS,"_FLD_",DION),"_DEC_")" | 
|---|
| 140 | S DEC="S X="_DEC | 
|---|
| 141 | Q DEC | 
|---|
| 142 | ; | 
|---|
| 143 | ;====================== | 
|---|
| 144 | ; LOG(Index,Logic,TMP) | 
|---|
| 145 | ;====================== | 
|---|
| 146 | ;Load Set and/or Kill logic into into @TMP | 
|---|
| 147 | ;In: | 
|---|
| 148 | ;  XR  = Index # | 
|---|
| 149 | ;  LOG [ K : load kill logic | 
|---|
| 150 | ;      [ S : load set logic | 
|---|
| 151 | ;  TMP = Root of array to store data | 
|---|
| 152 | ;Returns: | 
|---|
| 153 | ;  @TMP@(RootFile,Index#,"S")  = Set logic | 
|---|
| 154 | ;                        "SC") = Set condition | 
|---|
| 155 | ;                        "K")  = Kill logic | 
|---|
| 156 | ;                        "KC") = Kill condtion | 
|---|
| 157 | LOG(XR,LOG,TMP) ; | 
|---|
| 158 | Q:'$G(XR)  Q:$G(LOG)=""  Q:$G(TMP)="" | 
|---|
| 159 | N SL,KL,SC,KC,RFIL | 
|---|
| 160 | ; | 
|---|
| 161 | S RFIL=$P(^DD("IX",XR,0),U,9) Q:RFIL="" | 
|---|
| 162 | I LOG["S" D | 
|---|
| 163 | . S SL=$G(^DD("IX",XR,1)),SC=$G(^(1.4)) | 
|---|
| 164 | . I "Q"'[SL,SL'?."^" S @TMP@(RFIL,XR,"S")=SL | 
|---|
| 165 | . I "Q"'[SC,SC'?."^" S @TMP@(RFIL,XR,"SC")=SC | 
|---|
| 166 | I LOG["K" D | 
|---|
| 167 | . S KL=$G(^DD("IX",XR,2)),KC=$G(^(2.4)) | 
|---|
| 168 | . I "Q"'[KL,KL'?."^" S @TMP@(RFIL,XR,"K")=KL | 
|---|
| 169 | . I "Q"'[KC,KC'?."^" S @TMP@(RFIL,XR,"KC")=KC | 
|---|
| 170 | Q | 
|---|
| 171 | ; | 
|---|
| 172 | ;=============== | 
|---|
| 173 | ; KW(Index,TMP) | 
|---|
| 174 | ;=============== | 
|---|
| 175 | ;Load Kill Entire Index logic into @TMP | 
|---|
| 176 | ;In: | 
|---|
| 177 | ;  XR  = Index # | 
|---|
| 178 | ;  TMP = Root of array to store data | 
|---|
| 179 | ;Returns: | 
|---|
| 180 | ;  @TMP@("KW",File#[.01],Index#) =   Kill Entire Index logic | 
|---|
| 181 | ;                        Index#,0) = Type ("W" for whole-file index) | 
|---|
| 182 | ;                                    ^RootFile | 
|---|
| 183 | ;                                    ^Level difference between top file | 
|---|
| 184 | ;                                      and root file | 
|---|
| 185 | KW(XR,TMP) ;Get Kill Entire Index logic | 
|---|
| 186 | Q:'$G(XR)!($G(TMP)="") | 
|---|
| 187 | N FILE,KW,RFIL,TYPE | 
|---|
| 188 | S KW=$G(^DD("IX",XR,2.5)) Q:KW="Q"!(KW?."^") | 
|---|
| 189 | S FILE=$P($G(^DD("IX",XR,0)),U),TYPE=$P(^(0),U,8),RFIL=$P(^(0),U,9) | 
|---|
| 190 | Q:FILE=""!(RFIL="") | 
|---|
| 191 | ; | 
|---|
| 192 | S @TMP@("KW",FILE,XR)=KW | 
|---|
| 193 | S:RFIL'=FILE @TMP@("KW",FILE,XR,0)=TYPE_U_RFIL_U_$$FLEVDIFF^DIKCU(FILE,RFIL) | 
|---|
| 194 | Q | 
|---|
| 195 | ; | 
|---|
| 196 | ;#202  The input parameter that identifies the |1| is missing or invalid. | 
|---|
| 197 | ;#205  File# |1| and IEN string |IENS| represent different subfile levels. | 
|---|
| 198 | ; | 
|---|