1 | DIKC1 ;SFISC/MKO-LOAD XREF INFO ;8:19 AM 2 Aug 1999
|
---|
2 | ;;22.0;VA FileMan;**11**;Mar 30, 1999
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ;============================================
|
---|
6 | ; LOADALL(File,Log,Activ,ValRt,Tmp,Flag,.MF)
|
---|
7 | ;============================================
|
---|
8 | ;Load all xrefs for a file. Uses the "AC" index on Root File.
|
---|
9 | ;In:
|
---|
10 | ; RFIL = Root File #
|
---|
11 | ; LOG [ K : load kill logic
|
---|
12 | ; [ S : load set logic
|
---|
13 | ; ACT = Codes: IR
|
---|
14 | ; If ACT '= null, a xref is picked up only if ACT
|
---|
15 | ; and the Activity field (#.41) have codes in common.
|
---|
16 | ; VALRT = Array Ref where old/new values are located
|
---|
17 | ; TMP = Root to store xref info
|
---|
18 | ; FLAG [ s : don't include subfiles under file
|
---|
19 | ; [ i : don't load index-type xrefs (only load whole file xrefs)
|
---|
20 | ; [ f : don't load field-type xrefs
|
---|
21 | ; [ r : don't load record-type xrefs
|
---|
22 | ;
|
---|
23 | ;Out:
|
---|
24 | ; MF(file#,mField#) = multiple node
|
---|
25 | ; MF(file#,mField#,0) = subfile#
|
---|
26 | ; Set only for those files/multiples that have xrefs
|
---|
27 | ; and only if FLAG '[ "s"
|
---|
28 | ;
|
---|
29 | LOADALL(RFIL,LOG,ACT,VALRT,TMP,FLAG,MF) ;
|
---|
30 | N XR
|
---|
31 | ;
|
---|
32 | ;Loop through "AC" index
|
---|
33 | S XR=0 F S XR=$O(^DD("IX","AC",RFIL,XR)) Q:'XR D
|
---|
34 | . ;Skip if no .01, wrong Activity, wrong Type, or wrong Execution
|
---|
35 | . I $P($G(^DD("IX",XR,0)),U)="" K ^DD("IX","AC",RFIL,XR) Q
|
---|
36 | . I $G(ACT)]"",$TR(ACT,$P(^DD("IX",XR,0),U,7),$TR($J("",$L($P(^(0),U,7)))," ","*"))'["*" Q
|
---|
37 | . I $G(FLAG)["i",$P(^DD("IX",XR,0),U,8)="I" Q
|
---|
38 | . I $G(FLAG)["f",$P(^DD("IX",XR,0),U,6)="F" Q
|
---|
39 | . I $G(FLAG)["r",$P(^DD("IX",XR,0),U,6)="R" Q
|
---|
40 | . ;
|
---|
41 | . ;Load xref
|
---|
42 | . D CRV^DIKC2(XR,$G(VALRT),TMP)
|
---|
43 | . D:$G(LOG)]"" LOG^DIKC2(XR,LOG,TMP)
|
---|
44 | . D:$G(LOG)["K" KW^DIKC2(XR,TMP)
|
---|
45 | Q:$G(FLAG)["s"
|
---|
46 | ;
|
---|
47 | ;Build info for all subfiles under FILE into arrays SB and MF
|
---|
48 | N CHK,FIL,MFLD,PAR,SB
|
---|
49 | D SUBFILES^DIKCU(RFIL,.SB,.MF)
|
---|
50 | ;
|
---|
51 | ;Load xref for each subfile
|
---|
52 | S:$G(FLAG)'["s" FLAG=$G(FLAG)_"s"
|
---|
53 | S SB=0 F S SB=$O(SB(SB)) Q:'SB D
|
---|
54 | . D LOADALL(SB,$G(LOG),$G(ACT),$G(VALRT),TMP,FLAG)
|
---|
55 | . Q:'$D(@TMP@(SB))
|
---|
56 | . ;
|
---|
57 | . ;Set CHK(f)="" flag for subfile and its antecedents
|
---|
58 | . S PAR=SB F Q:$D(CHK(PAR)) S CHK(PAR)=1,PAR=$G(SB(PAR)) Q:PAR=""
|
---|
59 | ;
|
---|
60 | ;Use the CHK array to get rid of unneeded elements in MF
|
---|
61 | S FIL=0 F S FIL=$O(MF(FIL)) Q:'FIL D
|
---|
62 | . S MFLD=0 F S MFLD=$O(MF(FIL,MFLD)) Q:'MFLD D
|
---|
63 | .. K:'$D(CHK(MF(FIL,MFLD,0))) MF(FIL,MFLD)
|
---|
64 | Q
|
---|
65 | ;
|
---|
66 | ;========================================
|
---|
67 | ; LOADXREF(File,Fld,Log,.XRef,ValRt,Tmp)
|
---|
68 | ;========================================
|
---|
69 | ;Load specified xrefs. Uses the "AC" index on Root file if Index
|
---|
70 | ;Names are passed in. Also, uses the "F" index, if Field is passed in.
|
---|
71 | ;In:
|
---|
72 | ; RFIL = if FLD is not passed in : Root File or subfile#
|
---|
73 | ; (required if XREF contains names)
|
---|
74 | ; if FLD is passed in : The file of the field
|
---|
75 | ; (defaults to Root file of XREF)
|
---|
76 | ; FLD = Field # (optional) (if passed in, a specified index is
|
---|
77 | ; loaded only if FLD is one of the cross-reference values.
|
---|
78 | ; LOG [ K : load kill logic (incl. whole kill)
|
---|
79 | ; [ S : load set logic
|
---|
80 | ; .XREF = ^-delimited list of xref names or numbers;
|
---|
81 | ; (overflow in XREF(n) where n=1,2,...)
|
---|
82 | ; VALRT = Array Ref where old/new values are located
|
---|
83 | ; TMP = Root to store info
|
---|
84 | ;
|
---|
85 | LOADXREF(RFIL,FLD,LOG,XREF,VALRT,TMP) ;
|
---|
86 | N I,N,PC,RF,XR,XRLIST
|
---|
87 | ;
|
---|
88 | ;Loop through XREF array
|
---|
89 | S N=0,XRLIST=$G(XREF) F Q:XRLIST="" D
|
---|
90 | . ;
|
---|
91 | . ;Loop through each xref in XRLIST
|
---|
92 | . F PC=1:1:$L(XRLIST,U) K XR S XR=$P(XRLIST,U,PC) D:XR]""
|
---|
93 | .. ;
|
---|
94 | .. ;Convert xref name to number, if necessary
|
---|
95 | .. I XR'=+$P(XR,"E") D Q:$D(XR)<2
|
---|
96 | ... S I=0 F S I=$O(^DD("IX","AC",RFIL,I)) Q:'I D
|
---|
97 | .... S:$P($G(^DD("IX",I,0)),U,2)=XR XR(I)=""
|
---|
98 | .. E Q:$P($G(^DD("IX",XR,0)),U)="" S XR(XR)=""
|
---|
99 | .. ;
|
---|
100 | .. ;Load code from Cross-Reference Values multiple
|
---|
101 | .. S XR=0 F S XR=$O(XR(XR)) Q:'XR D
|
---|
102 | ... S RF=$P(^DD("IX",XR,0),U,9)
|
---|
103 | ... I $G(FLD) Q:'$D(^DD("IX","F",$S($G(RFIL):RFIL,1:RF),FLD,XR))
|
---|
104 | ... E I $G(RFIL) Q:RFIL'=RF
|
---|
105 | ... D CRV^DIKC2(XR,$G(VALRT),TMP)
|
---|
106 | ... D:$G(LOG)]"" LOG^DIKC2(XR,LOG,TMP)
|
---|
107 | ... D:$G(LOG)["K" KW^DIKC2(XR,TMP)
|
---|
108 | . ;
|
---|
109 | . ;Process next overflow
|
---|
110 | . S N=$O(XREF(N)),XRLIST=$S(N:$G(XREF(N)),1:"")
|
---|
111 | Q
|
---|
112 | ;
|
---|
113 | ;================================================================
|
---|
114 | ; LOADFLD(File,Field,Log,Activ,ValRt,TmpF,TmpR,FList,RList,Flag)
|
---|
115 | ;================================================================
|
---|
116 | ;Get all xrefs for a field. Uses the "F" index on file/field.
|
---|
117 | ;In:
|
---|
118 | ; FIL = File #
|
---|
119 | ; FLD = Field #
|
---|
120 | ; LOG [ K : load kill logic
|
---|
121 | ; [ S : load set logic
|
---|
122 | ; [ W : load entire kill logic (if LOG also [ "K")
|
---|
123 | ; ACT = codes: IR
|
---|
124 | ; If ACT is not null, a xref is picked up only if ACT
|
---|
125 | ; and the Activity field (#.41) have codes in common.
|
---|
126 | ; VALRT = Array Ref where old/new values are located
|
---|
127 | ; TMPF = Root to store field-level xref info
|
---|
128 | ; TMPR = Root to store record-level xref info
|
---|
129 | ; FLAG [ i : don't load index-type xrefs (only load whole file xrefs)
|
---|
130 | ; [ f : don't load field-type xrefs
|
---|
131 | ; [ r : don't load record-type xrefs
|
---|
132 | ;Out:
|
---|
133 | ; .FLIST = ^-delimited list of field xrefs (overflow in FLIST(n))
|
---|
134 | ; .RLIST = ^-delimited list of record xrefs (overflow in RLIST(n))
|
---|
135 | ;
|
---|
136 | LOADFLD(FIL,FLD,LOG,ACT,VALRT,TMPF,TMPR,FLIST,RLIST,FLAG) ;
|
---|
137 | N EXECFLD,TMP,XR
|
---|
138 | K FLIST,RLIST S (FLIST,RLIST)=0,(FLIST(0),RLIST(0))=""
|
---|
139 | S:$G(TMPR)="" TMPR=TMPF
|
---|
140 | ;
|
---|
141 | ;Loop through "F" index and pick up xrefs
|
---|
142 | S XR=0 F S XR=$O(^DD("IX","F",FIL,FLD,XR)) Q:'XR D
|
---|
143 | . I $P($G(^DD("IX",XR,0)),U)="" K ^DD("IX","F",FIL,FLD,XR) Q
|
---|
144 | . S EXECFLD=$P(^DD("IX",XR,0),U,6)
|
---|
145 | . I $G(ACT)]"",$TR(ACT,$P(^DD("IX",XR,0),U,7),$TR($J("",$L($P(^(0),U,7)))," ","*"))'["*" Q
|
---|
146 | . I $G(FLAG)["i",$P(^DD("IX",XR,0),U,8)="I" Q
|
---|
147 | . I $G(FLAG)["f",$P(^DD("IX",XR,0),U,6)="F" Q
|
---|
148 | . I $G(FLAG)["r",$P(^DD("IX",XR,0),U,6)="R" Q
|
---|
149 | . ;
|
---|
150 | . ;Set TMP, RLIST, and FLIST
|
---|
151 | . K TMP
|
---|
152 | . I EXECFLD="R" D
|
---|
153 | .. S TMP=$G(TMPR)
|
---|
154 | .. I $L(RLIST(RLIST))+$L(XR)+1>255 S RLIST=RLIST+1,RLIST(RLIST)=""
|
---|
155 | .. S RLIST(RLIST)=RLIST(RLIST)_$E(U,RLIST(RLIST)]"")_XR
|
---|
156 | . E D
|
---|
157 | .. S TMP=$G(TMPF)
|
---|
158 | .. I $L(FLIST(FLIST))+$L(XR)+1>255 S FLIST=FLIST+1,FLIST(FLIST)=""
|
---|
159 | .. S FLIST(FLIST)=FLIST(FLIST)_$E(U,FLIST(FLIST)]"")_XR
|
---|
160 | . ;
|
---|
161 | . ;Load xref
|
---|
162 | . Q:$G(TMP)="" Q:$D(@TMP@(FIL,XR))
|
---|
163 | . D CRV^DIKC2(XR,$G(VALRT),TMP)
|
---|
164 | . D:$G(LOG)]"" LOG^DIKC2(XR,LOG,TMP)
|
---|
165 | . I $G(LOG)["K",$G(LOG)["W" D KW^DIKC2(XR,TMP)
|
---|
166 | ;
|
---|
167 | I FLIST(0)]"" S FLIST=FLIST(0) K FLIST(0)
|
---|
168 | E K FLIST S FLIST=""
|
---|
169 | I RLIST(0)]"" S RLIST=RLIST(0) K RLIST(0)
|
---|
170 | E K RLIST S RLIST=""
|
---|
171 | Q
|
---|
172 | ;
|
---|
173 | GETTMP(DIKC) ;Find next available root in ^TMP(DIKC)
|
---|
174 | ;Time stamp ^TMP(DIKC,J)
|
---|
175 | ;Out:
|
---|
176 | ; Name of available ^TMP root; e.g. ^TMP("DIKC",$J+.01)
|
---|
177 | ;
|
---|
178 | N DAY,FREE,J
|
---|
179 | S FREE=0 F J=$J:.01 D Q:FREE
|
---|
180 | . S DAY=$G(^TMP(DIKC,J))
|
---|
181 | . I DAY<($H-1) K ^TMP(DIKC,J) S ^TMP(DIKC,J)=$H,FREE=1
|
---|
182 | Q $NA(^TMP(DIKC,J))
|
---|