1 | TMGSIPH ;TMG/kst/SIPHON PROGRAM, FOR TRANSFERRING VISTA INSTANCES ;11/27/09
|
---|
2 | ;;1.0;TMG-LIB;**1**;11/27/09
|
---|
3 | ;
|
---|
4 | ;"TMG SIPHON PROGRAM, FOR TRANSFERRING VISTA INSTANCE
|
---|
5 | ;"UTILITY FUNCTIONS
|
---|
6 | ;"Kevin Toppenberg MD
|
---|
7 | ;"GNU General Public License (GPL) applies
|
---|
8 | ;"11/27/09
|
---|
9 | ;
|
---|
10 | ;"=======================================================================
|
---|
11 | ;" API -- Public Functions.
|
---|
12 | ;"=======================================================================
|
---|
13 | ;"ORDREF(REF) -- return a $ORDER on a reference
|
---|
14 | ;"QLASTSUB(REF) -- Returns the LAST subscript of reference
|
---|
15 | ;"QSUBS(REF,ENDNUM,STARTNUM) -- Return subscripts from START to END ***NOTE ORDER OF PARAMETERS.
|
---|
16 | ;"QSETSUB(REF,POS,VALUE) -- Set the subscript in REF as position POS to be VALUE
|
---|
17 | ;"GETREF0(FILENUM) -- Returns reference to 0 node for file.
|
---|
18 | ;"GETNUMREC(FILENUM) -- Return the highest record number in given file.
|
---|
19 | ;"STOREDATA(ARRAY) -- store data from array into local globals, making backup of overwritten records
|
---|
20 | ;"IENOFARRAY(FILENUM,ARRAY,IENS) --return the IEN record number of the array.
|
---|
21 | ;"APPENDIEN(FILENUM,IENS) --return an IEN number that is +1 from the last one in the file.
|
---|
22 | ;"RLOCARRAY(FILENUM,NEWIEN,ARRAY,NARRAY) --Relocate array (change IEN)
|
---|
23 | ;"STOREDAS(FILENUM,IEN,ARRAY) -- Store data from array into local globals, making backup of
|
---|
24 | ;" overwritten records. AND ALSO translate record number to input-specified IEN
|
---|
25 | ;"GETFLD(FILENUM,LOC,PCE) -Return field number cooresponding to File number, node, and piece.
|
---|
26 | ;"
|
---|
27 | ;"=======================================================================
|
---|
28 | ;" API -- Private Functions.
|
---|
29 | ;"=======================================================================
|
---|
30 | ;"UNNEEDPTR(FILENUM,RPTR,LPTR,INOUT,TALLY) -- satisfy all the places that were wanting a remote record to be downloaded
|
---|
31 | ;"ISDIFF(ARRAY) -- determine if record stored in ARRAY is different from that stored in local ^Global
|
---|
32 | ;"RECSHOW(FILENUM,RPTR,ARRAY) -- Show remote and local data, to allow user to see differences
|
---|
33 | ;"GET01FIELD(FILENUM,ARRAY,RVALUE,LVALUE,IENS) -- Extract .01 field name from data array
|
---|
34 | ;"GETTARGETIEN(FILENUM,ARRAY,TARGETIEN) --determine if a local record should be overwritten with record from server.
|
---|
35 | ;" Ask user directly if not able to automically determine.
|
---|
36 | ;"=======================================================================
|
---|
37 | ;"Dependancies
|
---|
38 | ;"=======================================================================
|
---|
39 | ;"TMGUSRIF
|
---|
40 | ;"=======================================================================
|
---|
41 | ;
|
---|
42 | ORDREF(REF)
|
---|
43 | ;"Purpose: to return a $ORDER on a reference
|
---|
44 | ;" e.g. ^TIU(8925,"") --> returns ^TIU(8925,0)
|
---|
45 | ;" ^TIU(8925) --> returns ^TIU(8925.1)
|
---|
46 | ;"NOTE: If there is no further nodes AT THE LEVEL OF THE LAST PARAMETER, then "" is returned.
|
---|
47 | ;" e.g. A("Fruits","Citrus","Orange")
|
---|
48 | ;" A("Fruits","Citrus","Green")
|
---|
49 | ;" A("Fruits","Non-Citrus","Red","Hard")
|
---|
50 | ;" A("Fruits","Non-Citrus","Red","Soft")
|
---|
51 | ;" A("Fruits","Tropic","Yellow")
|
---|
52 | ;" A("Fruits","Tropic","Blue")
|
---|
53 | ;" In this example, $ORDREF(A("Fruits","Non-Citrus","Red","Soft")), would return ""
|
---|
54 | ;" This is difference from $QUERY, which would return A("Fruits","Tropic","Yellow")
|
---|
55 | ;"Input --REF -- reference to a global. Must be in Closed format
|
---|
56 | ;"Results: Returns new reference.
|
---|
57 | NEW RESULT,SUB
|
---|
58 | SET SUB=$ORDER(@REF)
|
---|
59 | IF SUB'="" DO
|
---|
60 | . SET RESULT=REF
|
---|
61 | . DO QSETSUB(.RESULT,$QLENGTH(REF),SUB)
|
---|
62 | ELSE SET RESULT=""
|
---|
63 | QUIT RESULT
|
---|
64 | ;
|
---|
65 | ;
|
---|
66 | QLASTSUB(REF) ;
|
---|
67 | ;"Returns the LAST subscript of reference
|
---|
68 | ;"Input: REF -- The reference to work on, e.g. ^TIU(8925,3,0) MUST be in closed form
|
---|
69 | QUIT $QSUBSCRIPT(REF,$QLENGTH(REF))
|
---|
70 | ;
|
---|
71 | ;
|
---|
72 | QSUBS(REF,ENDNUM,STARTNUM) ;"***NOTE ORDER OF PARAMETERS. IT IS 'BACKWARDS', so STARTNUM can be optional
|
---|
73 | ;"Purpose: Return subscripts from START to END
|
---|
74 | ;"Input: REF -- The reference to work on, e.g. ^TIU(8925,3,0) MUST be in closed form
|
---|
75 | ;" ENDNUM -- The ending subscript to return.
|
---|
76 | ;" STARTNUM -- The starting subscript to return. OPTIONAL. Default is 0
|
---|
77 | ;"Returns the reference, in closed for.
|
---|
78 | NEW I,RESULT SET RESULT=""
|
---|
79 | SET STARTNUM=+$GET(STARTNUM)
|
---|
80 | SET ENDNUM=+$GET(ENDNUM)
|
---|
81 | IF ENDNUM>$QLENGTH(REF) SET ENDNUM=$QLENGTH(REF)
|
---|
82 | FOR I=STARTNUM:1:ENDNUM DO
|
---|
83 | . NEW ONENODE SET ONENODE=$QSUBSCRIPT(REF,I)
|
---|
84 | . IF (+ONENODE'=ONENODE),(I>0) SET ONENODE=""""_ONENODE_""""
|
---|
85 | . SET RESULT=RESULT_ONENODE
|
---|
86 | . IF I=0 SET RESULT=RESULT_"("
|
---|
87 | . ELSE SET RESULT=RESULT_","
|
---|
88 | SET RESULT=$$CREF^DILF(RESULT)
|
---|
89 | IF (RESULT'["("),($EXTRACT(RESULT,$LENGTH(RESULT))=",") DO
|
---|
90 | . SET RESULT=$EXTRACT(RESULT,1,$LENGTH(RESULT)-1)_")"
|
---|
91 | QUIT RESULT
|
---|
92 | ;
|
---|
93 | ;
|
---|
94 | QSETSUB(REF,POS,VALUE) ;
|
---|
95 | ;"Purpose: Set the subscript in REF as position POS to be VALUE
|
---|
96 | ;"Input: REF -- The reference to modify. PASS BY REFERENCE
|
---|
97 | ;" POS -- The position of the subscript to change. POS=1 means first subscript
|
---|
98 | ;" VALUE -- The new subscript number or name
|
---|
99 | ;"Output: REF is modified
|
---|
100 | ;"Results: none
|
---|
101 | IF (POS>$QLENGTH(REF))!(POS<1) QUIT
|
---|
102 | NEW REFA SET REFA=$$QSUBS(REF,POS-1)
|
---|
103 | SET REFA=$$OREF^DILF(REFA)
|
---|
104 | NEW REFB SET REFB=$$QSUBS(REF,999,POS+1)
|
---|
105 | IF REFB="" SET REFB=")"
|
---|
106 | ELSE SET REFB=","_REFB
|
---|
107 | IF (+VALUE'=VALUE),($EXTRACT(VALUE,1)'="""") SET VALUE=""""_VALUE_""""
|
---|
108 | SET REF=REFA_VALUE_REFB
|
---|
109 | QUIT
|
---|
110 | ;
|
---|
111 | ;
|
---|
112 | GETREF0(FILENUM)
|
---|
113 | ;"Purpose: Returns reference to 0 node for file.
|
---|
114 | ;"Input: FILENUM -- The fileman number of the file to return info for.
|
---|
115 | ;"Result: RETURNS REF, OR "" if problem.
|
---|
116 | NEW REF SET REF=$GET(^DIC(FILENUM,0,"GL"))
|
---|
117 | IF REF'="" SET REF=REF_"0)"
|
---|
118 | QUIT REF
|
---|
119 | ;
|
---|
120 | ;
|
---|
121 | GETNUMREC(FILENUM)
|
---|
122 | ;"Purpose: Return the highest record number in given file.
|
---|
123 | ;"Input: FILENUM -- The fileman number of the file to return info for.
|
---|
124 | ;"Results: returns number, or -1 if problem.
|
---|
125 | ;"write "Here in GETNUMRECS",!
|
---|
126 | NEW RESULT,REF,NODE
|
---|
127 | SET RESULT=-1
|
---|
128 | SET REF=$$GETREF0(FILENUM)
|
---|
129 | IF REF'="" SET RESULT=$PIECE($GET(@REF),"^",4)
|
---|
130 | IF RESULT="" SET RESULT=-1
|
---|
131 | QUIT RESULT
|
---|
132 | ;
|
---|
133 | ;
|
---|
134 | STOREDATA(ARRAY)
|
---|
135 | ;"Purpose: To store data from array into local globals, making backup of
|
---|
136 | ;" overwritten records
|
---|
137 | ;"Input: ARRAY -- Pass by REFERENCE. Format
|
---|
138 | ;" ARRAY(1)=ARef_"="
|
---|
139 | ;" ARRAY(2)="="_AValue
|
---|
140 | ;" ARRAY(3)=ARef_"="
|
---|
141 | ;" ARRAY(4)="="_AValue
|
---|
142 | ;" ...
|
---|
143 | ;"Results: none
|
---|
144 | NEW STIME SET STIME=$H
|
---|
145 | NEW TMGI SET TMGI=1
|
---|
146 | NEW TMGCT SET TMGCT=0
|
---|
147 | NEW SHOWPROG SET SHOWPROG=0
|
---|
148 | NEW SHOWREF SET SHOWREF=0
|
---|
149 | NEW REF,VALUE
|
---|
150 | FOR DO QUIT:(TMGI="")
|
---|
151 | . SET REF=$GET(ARRAY(TMGI))
|
---|
152 | . SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1)
|
---|
153 | . IF REF="" SET TMGI="" QUIT
|
---|
154 | . SET TMGI=TMGI+1
|
---|
155 | . SET VALUE=$GET(ARRAY(TMGI))
|
---|
156 | . SET VALUE=$EXTRACT(VALUE,2,10000)
|
---|
157 | . IF $DATA(@REF) DO
|
---|
158 | . . MERGE ^TMG("TMGSIPH","OVERWRITTEN",REF)=@REF
|
---|
159 | . . KILL @REF
|
---|
160 | . SET @REF=VALUE
|
---|
161 | . SET TMGI=$ORDER(ARRAY(TMGI))
|
---|
162 | . SET TMGCT=TMGCT+1
|
---|
163 | . IF (SHOWPROG=0),($$HDIFF^XLFDT($H,STIME,2)>15) DO ;"Turn on progress bar after 15 seconds.
|
---|
164 | . . SET SHOWPROG=1
|
---|
165 | . . SET TMGMIN=$ORDER(ARRAY(0))
|
---|
166 | . . SET TMGMAX=$ORDER(ARRAY(""),-1)
|
---|
167 | . IF (SHOWPROG=1),(TMGCT>500) DO
|
---|
168 | . . IF (SHOWREF=0),($$HDIFF^XLFDT($H,STIME,2)>120) DO ;"Turn on showing referecences after 2 min.
|
---|
169 | . . NEW SREF SET SREF=""
|
---|
170 | . . IF SHOWREF DO
|
---|
171 | . . . SET SREF=REF QUIT:($LENGTH(REF)'>20)
|
---|
172 | . . . SET SREF=$EXTRACT(REF,1,17)_"..."
|
---|
173 | . . DO ProgressBar^TMGUSRIF(TMGI,"Storing Data: "_SREF,TMGMIN,TMGMAX,70,STIME)
|
---|
174 | . . SET TMGCT=0
|
---|
175 | ;
|
---|
176 | QUIT
|
---|
177 | ;
|
---|
178 | ;
|
---|
179 | IENOFARRAY(FILENUM,ARRAY,IENS) ;"
|
---|
180 | ;"Purpose: return the IEN record number of the array.
|
---|
181 | ;"Input: FILENUM -- The file number of the data passed in array. MUST MATCH
|
---|
182 | ;" ARRAY -- Pass by REFERENCE. Format
|
---|
183 | ;" ARRAY(1)=ARef_"=" <---- Expected to hold the .01 field.
|
---|
184 | ;" ARRAY(2)="="_AValue
|
---|
185 | ;" ARRAY(3)=ARef_"="
|
---|
186 | ;" ARRAY(4)="="_AValue
|
---|
187 | ;" IENS -- OPTIONAL (needed If FILENUM is a subfile) -- A standard IENS for subfile.
|
---|
188 | ;"Result: IEN if found, or 0 if error.
|
---|
189 | ;" NOTE: Even if FILENUM is a subfile, IEN is a single number, i.e. IEN of subrecord
|
---|
190 | ;" e.g. '3' not '3,23456,'
|
---|
191 | ;"
|
---|
192 | NEW RESULT SET RESULT=0
|
---|
193 | SET FILENUM=+$GET(FILENUM) IF FILENUM'>0 GOTO IOADN
|
---|
194 | ;"NEW GREF SET GREF=$GET(^DIC(FILENUM,0,"GL"))
|
---|
195 | NEW GREF SET GREF=$$GETGREF^TMGFMUT2(FILENUM,.IENS) ;"IENS not used if not subfile.
|
---|
196 | NEW CGREF SET CGREF=$$CREF^DILF(GREF)
|
---|
197 | IF GREF="" GOTO IOADN
|
---|
198 | NEW GREFLEN SET GREFLEN=$QLENGTH(CGREF)
|
---|
199 | NEW REF SET REF=$GET(ARRAY(1)) IF (REF="") GOTO IOADN
|
---|
200 | SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1) IF (REF="") GOTO IOADN
|
---|
201 | IF $$QSUBS(REF,GREFLEN)'=CGREF GOTO IOADN
|
---|
202 | SET RESULT=$QSUBSCRIPT(REF,GREFLEN+1)
|
---|
203 | IOADN QUIT RESULT
|
---|
204 | ;
|
---|
205 | ;
|
---|
206 | APPENDIEN(FILENUM,IENS) ;
|
---|
207 | ;"Purpose: to return an IEN number that is +1 from the last one in the file.
|
---|
208 | ;"Return : the new IEN, or 0 if problem
|
---|
209 | NEW RESULT SET RESULT=0
|
---|
210 | ;"NEW GREF SET GREF=$GET(^DIC(FILENUM,0,"GL")) IF GREF="" GOTO AIEDN
|
---|
211 | NEW GREF SET GREF=$$GETGREF^TMGFMUT2(FILENUM,.IENS) ;"IENS not used if not subfile.
|
---|
212 | NEW CGREF SET CGREF=$$CREF^DILF(GREF)
|
---|
213 | NEW LASTIEN SET LASTIEN="%"
|
---|
214 | FOR SET LASTIEN=$ORDER(@CGREF@(LASTIEN),-1) QUIT:(LASTIEN="")!(+LASTIEN=LASTIEN)
|
---|
215 | SET RESULT=LASTIEN+1
|
---|
216 | IF $GET(IENS)["," DO
|
---|
217 | . SET $PIECE(IENS,",",1)=RESULT
|
---|
218 | . SET RESULT=IENS
|
---|
219 | AIEDN QUIT RESULT
|
---|
220 | ;
|
---|
221 | ;
|
---|
222 | RLOCARRAY(FILENUM,NEWIEN,ARRAY,NARRAY) ;"Relocate array (change IEN)
|
---|
223 | ;"Purpose: To take array, and change IEN values to NEWIEN
|
---|
224 | ;"NOTE: It is assumed that ALL data in ARRAY represents ONE record (not multiple!)
|
---|
225 | ;" The array MAY contain cross-references data
|
---|
226 | ;"Input: FILENUM -- The file (or subfile) number of the data passed in array. MUST MATCH
|
---|
227 | ;" NEWIEN -- The IEN that the data in ARRAY should be changed to.
|
---|
228 | ;" If FILENUM is a subfile, then NEWIEN should be in standard IENS format (e.g. '7,345,')
|
---|
229 | ;" ARRAY -- Pass by REFERENCE. Format
|
---|
230 | ;" ARRAY(1)=ARef_"="
|
---|
231 | ;" ARRAY(2)="="_AValue
|
---|
232 | ;" ARRAY(3)=ARef_"="
|
---|
233 | ;" ARRAY(4)="="_AValue
|
---|
234 | ;" ...
|
---|
235 | ;" NARRAY -- PASS BY REFERENCE, an OUT PARAMETER. Format same as ARRAY
|
---|
236 | ;" NARRAY(1)=ARef_"="
|
---|
237 | ;" NARRAY(2)="="_AValue
|
---|
238 | ;" ...
|
---|
239 | ;"Results: 1 if OK, -1 if error
|
---|
240 | ;
|
---|
241 | KILL NARRAY
|
---|
242 | NEW RESULT SET RESULT=-1
|
---|
243 | NEW SHOWPROG SET SHOWPROG=0
|
---|
244 | NEW STIME SET STIME=$H
|
---|
245 | SET FILENUM=+$GET(FILENUM) IF FILENUM'>0 GOTO RLAD
|
---|
246 | SET NEWIEN=$GET(NEWIEN) IF +NEWIEN'>0 GOTO RLAD
|
---|
247 | NEW GREF SET GREF=$$GETGREF^TMGFMUT2(FILENUM,NEWIEN)
|
---|
248 | ;"NEW GREF SET GREF=$GET(^DIC(FILENUM,0,"GL"))
|
---|
249 | NEW CGREF SET CGREF=$$CREF^DILF(GREF)
|
---|
250 | IF GREF="" GOTO SDAD
|
---|
251 | ;"Check to see that the ARRAY data is referenced to same place as FILENUM
|
---|
252 | NEW GREFLEN SET GREFLEN=$QL(CGREF)
|
---|
253 | NEW REF SET REF=$GET(ARRAY(1)) IF (REF="") GOTO RLAD
|
---|
254 | SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1) IF (REF="") GOTO RLAD
|
---|
255 | IF $$QSUBS(REF,GREFLEN)'=CGREF GOTO RLAD
|
---|
256 | NEW VALUE,RECNUM
|
---|
257 | NEW OLDIEN SET OLDIEN=""
|
---|
258 | NEW DONE SET DONE=0
|
---|
259 | NEW TMGCT SET TMGCT=0
|
---|
260 | NEW TMGI SET TMGI=0
|
---|
261 | FOR SET TMGI=$ORDER(ARRAY(TMGI)) QUIT:(TMGI="")!DONE DO
|
---|
262 | . SET REF=$GET(ARRAY(TMGI))
|
---|
263 | . SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1)
|
---|
264 | . SET TMGI=TMGI+1
|
---|
265 | . IF REF="" SET DONE=1 QUIT
|
---|
266 | . SET REC=$QSUBSCRIPT(REF,GREFLEN+1) ;"Get IEN of ARRAY data
|
---|
267 | . IF OLDIEN="",(+REC=REC) SET OLDIEN=REC
|
---|
268 | . IF REC'=+NEWIEN DO
|
---|
269 | . . IF (+REC=REC) DO ;"Change record number in reference
|
---|
270 | . . . SET REF=GREF_+NEWIEN_","_$$QSUBS(REF,99,GREFLEN+2)
|
---|
271 | . . ELSE DO ;"Redirect XREF value.
|
---|
272 | . . . NEW PT2 SET PT2=$QSUBSCRIPT(REF,$QLENGTH(REF))
|
---|
273 | . . . IF PT2'=OLDIEN QUIT ;"Unexpected format of xref
|
---|
274 | . . . DO QSETSUB(.REF,$QLENGTH(REF),+NEWIEN) ;"Change pointer in last position.
|
---|
275 | . SET VALUE=$EXTRACT($GET(ARRAY(TMGI)),2,10000)
|
---|
276 | . SET NARRAY(TMGI-1)=REF_"="
|
---|
277 | . SET NARRAY(TMGI)="="_VALUE
|
---|
278 | . IF (SHOWPROG=0),($$HDIFF^XLFDT($H,STIME,2)>15) DO ;"Turn on progress bar after 15 seconds.
|
---|
279 | . . SET SHOWPROG=1
|
---|
280 | . . SET TMGMIN=$ORDER(ARRAY(0))
|
---|
281 | . . SET TMGMAX=$ORDER(ARRAY(""),-1)
|
---|
282 | . SET TMGCT=TMGCT+1
|
---|
283 | . IF (SHOWPROG=1),(TMGCT>500) DO
|
---|
284 | . . DO ProgressBar^TMGUSRIF(TMGI,"Shifting Data: ",TMGMIN,TMGMAX,70,STIME)
|
---|
285 | . . SET TMGCT=0
|
---|
286 | SET RESULT=1
|
---|
287 | RLAD QUIT RESULT
|
---|
288 | ;
|
---|
289 | ;
|
---|
290 | STOREDAS(FILENUM,IEN,ARRAY) ;"'STORE DATA AS'
|
---|
291 | ;"Purpose: To store data from array into local globals, making backup of
|
---|
292 | ;" overwritten records. AND ALSO translate record number to input-specified IEN
|
---|
293 | ;"NOTE: It is assumed that ALL data in ARRAY represents ONE record (not multiple!)
|
---|
294 | ;" The array MAY contain cross-references data
|
---|
295 | ;"Input: FILENUM -- The file number of the data passed in array. MUST MATCH
|
---|
296 | ;" IEN -- The IEN that the data in ARRAY should be changed to.
|
---|
297 | ;" If FILENUM is a subfile, then pass a standard IENS string in IEN
|
---|
298 | ;" ARRAY -- Pass by REFERENCE. Format
|
---|
299 | ;" ARRAY(1)=ARef_"="
|
---|
300 | ;" ARRAY(2)="="_AValue
|
---|
301 | ;" ARRAY(3)=ARef_"="
|
---|
302 | ;" ARRAY(4)="="_AValue
|
---|
303 | ;" ...
|
---|
304 | ;"Also -- Makes use of Globally-scoped variable TMGOWSAVE. If =0, overwritten records are NOT saved
|
---|
305 | ;"Results: 1 if OK, -1 if error
|
---|
306 | ;"NOTE: Subfile support not completed yet...
|
---|
307 | NEW RESULT SET RESULT=-1
|
---|
308 | NEW NARRAY
|
---|
309 | NEW SHOWPROG SET SHOWPROG=0
|
---|
310 | NEW SHOWREF SET SHOWREF=0
|
---|
311 | NEW TMGCT SET TMGCT=0
|
---|
312 | NEW STIME SET STIME=$H
|
---|
313 | IF $$IENOFARRAY(FILENUM,.ARRAY,IEN)=+NEWIEN GOTO SDA2
|
---|
314 | IF $$RLOCARRAY(FILENUM,NEWIEN,.ARRAY,.NARRAY)'=1 GOTO SDAD ;"Relocate array (change IEN)
|
---|
315 | KILL ARRAY MERGE ARRAY=NARRAY
|
---|
316 | SDA2 NEW TMGI SET TMGI=0
|
---|
317 | NEW DONE SET DONE=0
|
---|
318 | FOR SET TMGI=$ORDER(ARRAY(TMGI)) QUIT:(TMGI="")!DONE DO
|
---|
319 | . SET REF=$GET(ARRAY(TMGI))
|
---|
320 | . SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1)
|
---|
321 | . SET TMGI=TMGI+1
|
---|
322 | . IF REF="" SET DONE=1 QUIT
|
---|
323 | . NEW VALUE SET VALUE=$EXTRACT($GET(ARRAY(TMGI)),2,10000)
|
---|
324 | . ;"write REF,!
|
---|
325 | . IF $DATA(@REF) DO
|
---|
326 | . . IF +$GET(TMGOWSAVE)=0 QUIT
|
---|
327 | . . MERGE ^TMG("TMGSIPH","OVERWRITTEN",REF)=@REF
|
---|
328 | . . KILL @REF
|
---|
329 | . SET @REF=VALUE
|
---|
330 | . IF (SHOWPROG=0),($$HDIFF^XLFDT($H,STIME,2)>15) DO ;"Turn on progress bar after 15 seconds.
|
---|
331 | . . SET SHOWPROG=1
|
---|
332 | . . SET TMGMIN=$ORDER(ARRAY(0))
|
---|
333 | . . SET TMGMAX=$ORDER(ARRAY(""),-1)
|
---|
334 | . SET TMGCT=TMGCT+1
|
---|
335 | . IF (SHOWPROG=1),(TMGCT>500) DO
|
---|
336 | . . IF (SHOWREF=0),($$HDIFF^XLFDT($H,STIME,2)>120) DO ;"Turn on showing referecences after 2 min.
|
---|
337 | . . NEW SREF SET SREF=""
|
---|
338 | . . IF SHOWREF DO
|
---|
339 | . . . SET SREF=REF QUIT:($LENGTH(REF)'>20)
|
---|
340 | . . . SET SREF=$EXTRACT(REF,1,17)_"..."
|
---|
341 | . . DO ProgressBar^TMGUSRIF(TMGI,"Storing Data: "_SREF,TMGMIN,TMGMAX,70,STIME)
|
---|
342 | . . SET TMGCT=0
|
---|
343 | SET RESULT=1
|
---|
344 | SDAD QUIT RESULT
|
---|
345 | ;
|
---|
346 | ;
|
---|
347 | UNNEEDPTR(FILENUM,RPTR,LPTR,INOUT,TALLY) ;
|
---|
348 | ;"Purpose: To satisfy all the places that were wanting a remote record to be downloaded
|
---|
349 | ;"Input: FILENUM -- the fileman number of file (or subfile) to get from remote server
|
---|
350 | ;" If FILENUM is a subfile, then can be passed as just subfilenumber, OR
|
---|
351 | ;" in format: SubFileNum{ParentFileNum...
|
---|
352 | ;" RPTR -- The IEN of the record that was wanted from the server.
|
---|
353 | ;" If dealing with subfiles, pass in standard IENS format (e.g. '7,2345,')
|
---|
354 | ;" LPTR -- OPTIONAL. This can specify if the desired REMOTE record has been
|
---|
355 | ;" stored at a different IEN locally.
|
---|
356 | ;" If dealing with subfiles, pass in standard IENS format (e.g. '7,2345,')
|
---|
357 | ;" INOUT -- OPTIONAL -- Default is "PTOUT". Should be "PTIN" or "PTOUT"
|
---|
358 | ;" TALLY -- OPTIONAL. PASS BY REFERENCE. An array to keep progress stats. Format:
|
---|
359 | ;" TALLY("UNNEEDED RECORDS")=#
|
---|
360 | ;"NOTE: Gobal ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT") used, with format as below:
|
---|
361 | ;" ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM,RemotePointer,RefToNodeToBeCorrected,INFO)=""
|
---|
362 | ;" INFO=DataPiece^PointedToFile^PointedToReference^IENDepth^[V]
|
---|
363 | ;" As pointers are resolved, the entries will be KILLED from the above global
|
---|
364 | ;"Results: none
|
---|
365 | ;"
|
---|
366 | SET FILENUM=$GET(FILENUM) QUIT:(+FILENUM'>0)
|
---|
367 | IF $$ISSUBFIL^TMGFMUT2(FILENUM),FILENUM'["{" DO
|
---|
368 | . SET FILENUM=$$GETSPFN^TMGFMUT2(FILENUM) ;"convert 123.02 --> '123.02{123'
|
---|
369 | SET RPTR=$GET(RPTR)
|
---|
370 | SET LPTR=$GET(LPTR)
|
---|
371 | SET INOUT=$GET(INOUT) IF INOUT'="PTIN" SET INOUT="PTOUT"
|
---|
372 | IF INOUT="PTIN" GOTO UN2
|
---|
373 | NEW NODE SET NODE=""
|
---|
374 | FOR SET NODE=$ORDER(^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM,RPTR,NODE)) QUIT:(NODE="") DO
|
---|
375 | . NEW INFO SET INFO=""
|
---|
376 | . FOR SET INFO=$ORDER(^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM,RPTR,NODE,INFO)) QUIT:(INFO="") DO
|
---|
377 | . . NEW PCE SET PCE=+INFO
|
---|
378 | . . NEW P2FILE SET P2FILE=$PIECE(INFO,"^",2)
|
---|
379 | . . IF LPTR'=RPTR DO
|
---|
380 | . . . IF $PIECE(INFO,"^",5)="V" SET LPTR=LPTR_";"_$PIECE(INFO,"^",3) ;"VPTR stored as 'IEN;OREF'
|
---|
381 | . . . SET $PIECE(@NODE,"^",PCE)=LPTR
|
---|
382 | . . IF 0=1 DO ;"Build up map array to store history of connections. DON'T USE.....
|
---|
383 | . . . IF P2FILE=2 DO ;"2=PATIENT file.
|
---|
384 | . . . . SET ^TMG("TMGSIPH","MAP IN","F"_2,"F"_FILENUM,LPTR)=""
|
---|
385 | . . . . SET ^TMG("TMGSIPH","MAP IN","XREF",FILENUM)=$NAME(^TMG("TMGSIPH","MAP IN","F"_2,"F"_FILENUM))
|
---|
386 | . . . IF $DATA(^TMG("TMGSIPH","MAP IN","XREF","F"_P2FILE)) DO
|
---|
387 | . . . . NEW REF SET REF=$GET(^TMG("TMGSIPH","MAP IN","XREF","F"_P2FILE))
|
---|
388 | . . . . QUIT:(REF="")!($QLENGTH(REF)>15)
|
---|
389 | . . . . SET @REF@("F"_FILENUM,LPTR)=""
|
---|
390 | . . . . SET ^TMG("TMGSIPH","MAP IN","XREF","F"_FILENUM)=$NAME(@REF@("F"_FILENUM))
|
---|
391 | . . KILL ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM,RPTR,NODE,INFO)
|
---|
392 | . . SET TALLY("UNNEEDED RECORDS")=+$GET(TALLY("UNNEEDED RECORDS"))+1
|
---|
393 | UN2 KILL ^TMG("TMGSIPH","NEEDED RECORDS",INOUT,FILENUM,RPTR) ;"TEMP
|
---|
394 | ;
|
---|
395 | QUIT
|
---|
396 | ;
|
---|
397 | ;
|
---|
398 | ISDIFF(ARRAY) ;
|
---|
399 | ;"Purpose:to determine if record stored in ARRAY is different from that stored in local ^Global
|
---|
400 | ;"Input: ARRAY -- Pass by REFERENCE. This is actual remote record from server. Format:
|
---|
401 | ;" ARRAY(1)=ARef_"="
|
---|
402 | ;" ARRAY(2)="="_AValue
|
---|
403 | ;" ARRAY(3)=ARef_"="
|
---|
404 | ;" ARRAY(4)="="_AValue
|
---|
405 | ;"Result: 0 -- no difference
|
---|
406 | ;" 1 -- ARRAY has extra information
|
---|
407 | ;" 2 -- ARRAY has conflicting information
|
---|
408 | ;
|
---|
409 | NEW RESULT SET RESULT=0
|
---|
410 | NEW TMGI SET TMGI=0
|
---|
411 | NEW STIME SET STIME=$H
|
---|
412 | NEW SHOWPROG SET SHOWPROG=0
|
---|
413 | NEW TMGMAX,TMGMIN
|
---|
414 | NEW TMGCT SET TMGCT=0
|
---|
415 | NEW REF,VALUE
|
---|
416 | FOR SET TMGI=$ORDER(ARRAY(TMGI)) QUIT:(TMGI="")!(RESULT=2) DO
|
---|
417 | . IF (SHOWPROG=0),($$HDIFF^XLFDT($H,STIME,2)>15) DO ;"Turn on progress bar after 15 seconds.
|
---|
418 | . . SET SHOWPROG=1
|
---|
419 | . . SET TMGMIN=$ORDER(ARRAY(0))
|
---|
420 | . . SET TMGMAX=$ORDER(ARRAY(""),-1)
|
---|
421 | . IF (SHOWPROG=1),(TMGCT>500) DO
|
---|
422 | . . DO ProgressBar^TMGUSRIF(TMGI,"Comparing server data to local ",TMGMIN,TMGMAX,70,STIME)
|
---|
423 | . . SET TMGCT=0
|
---|
424 | . SET REF=$GET(ARRAY(TMGI))
|
---|
425 | . SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1)
|
---|
426 | . SET TMGI=TMGI+1
|
---|
427 | . SET TMGCT=TMGCT+1
|
---|
428 | . IF REF="" SET RESULT=2 QUIT
|
---|
429 | . SET VALUE=$EXTRACT($GET(ARRAY(TMGI)),2,10000)
|
---|
430 | . IF $DATA(@REF)=0 SET RESULT=1 ;"ARRAY has extra info
|
---|
431 | . IF $GET(@REF)=VALUE QUIT
|
---|
432 | . SET RESULT=2 ;"ARRAY conflicts with local value.
|
---|
433 | QUIT RESULT
|
---|
434 | ;
|
---|
435 | ;
|
---|
436 | GETFLD(FILENUM,LOC,PCE)
|
---|
437 | ;"Purpose: Return field number cooresponding to File number, node, and piece.
|
---|
438 | ;"Input: FILENUM -- Fileman file number to work with.
|
---|
439 | ;" LOC -- the subscript location
|
---|
440 | ;" PCE -- the piece for the field in question
|
---|
441 | ;"Results: field number^field name, or 0 if not found
|
---|
442 | NEW RESULT SET RESULT=0
|
---|
443 | NEW FOUND SET FOUND=0
|
---|
444 | NEW FLD SET FLD=0
|
---|
445 | FOR SET FLD=$ORDER(^DD(FILENUM,FLD)) QUIT:(+FLD'>0)!(FOUND=1) DO
|
---|
446 | . NEW INFO SET INFO=$PIECE($GET(^DD(FILENUM,FLD,0)),"^",4)
|
---|
447 | . IF $PIECE(INFO,";",1)'=LOC QUIT
|
---|
448 | . IF $PIECE(INFO,";",2)'=PCE QUIT
|
---|
449 | . SET FOUND=1
|
---|
450 | . SET RESULT=FLD_"^"_$PIECE($GET(^DD(FILENUM,FLD,0)),"^",1)
|
---|
451 | QUIT RESULT
|
---|
452 | ;
|
---|
453 | ;
|
---|
454 | RECSHOW(FILENUM,RPTR,ARRAY) ;
|
---|
455 | ;"Purpose: to show remote and local data, to allow user to see differences
|
---|
456 | ;"Input: FILENUM -- Fileman file (or subfile) number to work with.
|
---|
457 | ;" RPTR -- The record number (IEN) on the server of the record downloaded.
|
---|
458 | ;" If FILENUM is a subfile, then pass RPTR in standard IENS format (e.g. '4,6787,')
|
---|
459 | ;" ARRAY -- Pass by REFERENCE. This is actual remote record from server.
|
---|
460 | ;" Format as per OVERWRITE
|
---|
461 | ;"
|
---|
462 | WRITE "NOTE: ONLY DIFFERENCE WILL BE SHOWN",!,!
|
---|
463 | WRITE "LEGEND: REFERENCE",!
|
---|
464 | WRITE " L -- Local data value",!
|
---|
465 | WRITE " R -- Remote data value",!!
|
---|
466 | NEW LINECT SET LINECT=6
|
---|
467 | NEW TMGI SET TMGI=0
|
---|
468 | SET IOSL=$GET(IOSL,24)
|
---|
469 | ;"NEW GREF SET GREF=$GET(^DIC(FILENUM,0,"GL")) QUIT:(GREF="")
|
---|
470 | NEW GREF SET GREF=$$GETGREF^TMGFMUT2(FILENUM,RPTR) QUIT:(GREF="")
|
---|
471 | NEW SL SET SL=$QLENGTH($$CREF^DILF(GREF))
|
---|
472 | NEW REF,VALUE,LVALUE
|
---|
473 | NEW DONE SET DONE=0
|
---|
474 | FOR SET TMGI=$ORDER(ARRAY(TMGI)) QUIT:(TMGI="")!(DONE=1) DO
|
---|
475 | . SET REF=$GET(ARRAY(TMGI))
|
---|
476 | . SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1)
|
---|
477 | . SET TMGI=TMGI+1
|
---|
478 | . IF REF="" SET DONE=1 QUIT
|
---|
479 | . SET VALUE=$EXTRACT($GET(ARRAY(TMGI)),2,10000)
|
---|
480 | . SET LVALUE=$GET(@REF)
|
---|
481 | . IF LVALUE=VALUE QUIT
|
---|
482 | . ;"Later, I will format raw nodes into readable fileman fields and values...
|
---|
483 | . IF $QLENGTH(REF)=(SL+2) DO
|
---|
484 | . . NEW LOC SET LOC=$QSUBSCRIPT(REF,SL+2)
|
---|
485 | . . NEW PCE,FLD
|
---|
486 | . . FOR PCE=1:1:$LENGTH(VALUE,"^") DO
|
---|
487 | . . . NEW V1,LV1,EV1,ELV1,INFO
|
---|
488 | . . . SET (EV1,V1)=$PIECE(VALUE,"^",PCE)
|
---|
489 | . . . SET (ELV1,LV1)=$PIECE(LVALUE,"^",PCE)
|
---|
490 | . . . IF V1=LV1 QUIT
|
---|
491 | . . . SET FLD=$$GETFLD(FILENUM,LOC,PCE)
|
---|
492 | . . . IF +FLD=0 WRITE "?? FIELD",! QUIT
|
---|
493 | . . . IF $DATA(^DD(FILENUM,+FLD,2))#10=1 DO
|
---|
494 | . . . . NEW XFRM SET XFRM=$GET(^DD(FILENUM,+FLD,2))
|
---|
495 | . . . . IF XFRM="" QUIT
|
---|
496 | . . . . NEW Y
|
---|
497 | . . . . SET Y=V1 XECUTE XFRM SET EV1=Y
|
---|
498 | . . . . SET Y=LV1 XECUTE XFRM SET ELV1=Y
|
---|
499 | . . . WRITE "Field -- ",$PIECE(FLD,"^",2)," (",+FLD,"):",!
|
---|
500 | . . . WRITE " L = ",ELV1,!
|
---|
501 | . . . WRITE " R = ",EV1,!
|
---|
502 | . . . SET LINECT=LINECT+3
|
---|
503 | . . . IF LINECT>(IOSL-5) DO
|
---|
504 | . . . . DO PressToCont^TMGUSRIF
|
---|
505 | . . . . SET LINECT=0
|
---|
506 | . ELSE DO
|
---|
507 | . . WRITE REF,!
|
---|
508 | . . WRITE " L = ",$GET(@REF),!
|
---|
509 | . . WRITE " R = ",VALUE,!
|
---|
510 | . . SET LINECT=LINECT+3
|
---|
511 | . . IF LINECT>(IOSL-5) DO
|
---|
512 | . . . DO PressToCont^TMGUSRIF
|
---|
513 | . . . SET LINECT=0
|
---|
514 | ;
|
---|
515 | IF LINECT>0 DO PressToCont^TMGUSRIF
|
---|
516 | QUIT
|
---|
517 | ;
|
---|
518 | ;
|
---|
519 | GET01FIELD(FILENUM,ARRAY,RVALUE,LVALUE,IENS) ;
|
---|
520 | ;"Purpose: Extract .01 field name from data array
|
---|
521 | ;"Input: FILENUM -- Fileman file (of subfile) number to work with.
|
---|
522 | ;" ARRAY -- Pass by REFERENCE. This is actual remote record from server.
|
---|
523 | ;" Format as per OVERWRITE
|
---|
524 | ;" RVALUE -- Pass by REFERENCE. An OUT PARAMETER. Filled with .01 field from server
|
---|
525 | ;" LVALUE -- Pass by REFERENCE. An OUT PARAMETER Filled with .01 field from local database
|
---|
526 | ;" IENS -- OPTIONAL. Only needed if FILENUM is a subfile.
|
---|
527 | ;"Results: none
|
---|
528 | ;"Output: RVALUE and LVALUE are filled with the INTERNAL values of the .01 field, or "" if null
|
---|
529 | ;"
|
---|
530 | SET (RVALUE,LVALUE)=""
|
---|
531 | ;"NEW GREF SET GREF=$GET(^DIC(FILENUM,0,"GL")) QUIT:(GREF="")
|
---|
532 | NEW GREF SET GREF=$$GETGREF^TMGFMUT2(FILENUM,.IENS) QUIT:(GREF="")
|
---|
533 | NEW SL SET SL=$QLENGTH($$CREF^DILF(GREF))
|
---|
534 | NEW REF,RNODE,LNODE
|
---|
535 | NEW DONE SET DONE=0
|
---|
536 | NEW TMGI SET TMGI=0
|
---|
537 | FOR SET TMGI=$ORDER(ARRAY(TMGI)) QUIT:(TMGI="")!(DONE=1) DO
|
---|
538 | . SET REF=$GET(ARRAY(TMGI))
|
---|
539 | . SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1)
|
---|
540 | . SET TMGI=TMGI+1
|
---|
541 | . IF REF="" SET DONE=1 QUIT
|
---|
542 | . SET RNODE=$EXTRACT($GET(ARRAY(TMGI)),2,10000)
|
---|
543 | . SET LNODE=$GET(@REF)
|
---|
544 | . ;"Later, I will format raw nodes into readable fileman fields and values...
|
---|
545 | . IF $QLENGTH(REF)=(SL+2) DO
|
---|
546 | . . NEW LOC SET LOC=$QSUBSCRIPT(REF,SL+2)
|
---|
547 | . . IF LOC'=0 QUIT
|
---|
548 | . . SET RVALUE=$PIECE(RNODE,"^",1)
|
---|
549 | . . SET LVALUE=$PIECE(LNODE,"^",1)
|
---|
550 | . . SET DONE=1
|
---|
551 | ;
|
---|
552 | QUIT
|
---|
553 | ;
|
---|
554 | ;
|
---|
555 | GETTARGETIEN(FILENUM,ARRAY,TARGETIEN) ;
|
---|
556 | ;"Purpose: To determine if a local record should be overwritten with record from server.
|
---|
557 | ;" Ask user directly if not able to automically determine.
|
---|
558 | ;"Input: FILENUM -- Fileman file (or subfile) number to work with.
|
---|
559 | ;" ARRAY -- Pass by REFERENCE. This is actual remote record from server. Format:
|
---|
560 | ;" ARRAY(1)=ARef_"="
|
---|
561 | ;" ARRAY(2)="="_AValue
|
---|
562 | ;" ARRAY(3)=ARef_"="
|
---|
563 | ;" ARRAY(4)="="_AValue
|
---|
564 | ;" NOTE: IEN of array doesn't match input TARGETIEN, then IEN of array will be changed to it.
|
---|
565 | ;" TARGETIEN -- Required. PASS BY REFERENCE. an IN & OUT PARAMETER.
|
---|
566 | ;" If FILENUM is a subfile, then pass TARGETIEN in standard IENS format.
|
---|
567 | ;" INPUT: The initially planned location for storing the array
|
---|
568 | ;" OUTPUT: This is the pointer of where the record should be stored locally
|
---|
569 | ;"Result: "OVERWRITE" = OVERWRITE record currently stored at TARGETIEN
|
---|
570 | ;" "ABORT" = User abort or error occurred.
|
---|
571 | ;" "USELOCAL" = Dump server data, and just use record already at TARGETIEN
|
---|
572 | ;"TARGETIEN pointer may be changed to new target record location.
|
---|
573 | NEW Y,NARRAY,%
|
---|
574 | NEW R01VALUE,L01VALUE
|
---|
575 | NEW RESULT SET RESULT="OVERWRITE" ;"default to overwriting
|
---|
576 | SET TARGETIEN=$GET(TARGETIEN)
|
---|
577 | IF +TARGETIEN'>0 DO GOTO OVWDN
|
---|
578 | . SET RESULT="ABORT"
|
---|
579 | SET FILENUM=+$GET(FILENUM)
|
---|
580 | NEW RPTR SET RPTR=+$$IENOFARRAY(FILENUM,.ARRAY,TARGETIEN)
|
---|
581 | IF TARGETIEN["," DO ;"i.e. is an IENS
|
---|
582 | . NEW TEMP SET TEMP=TARGETIEN
|
---|
583 | . SET $PIECE(TEMP,",",1)=RPTR
|
---|
584 | . SET RPTR=TEMP ;"convert RPTR into an IENS
|
---|
585 | IF +RPTR'>0 DO GOTO OVWDN
|
---|
586 | . SET RESULT="ABORT"
|
---|
587 | IF $GET(^TMG("TMGSIPH",".01 VALUE",FILENUM,RPTR))="" DO
|
---|
588 | . DO GET01FIELD(FILENUM,.ARRAY,.R01VALUE,,RPTR) ;"Extract .01 field name from data array, before relocated
|
---|
589 | . SET ^TMG("TMGSIPH",".01 VALUE",FILENUM,RPTR)=R01VALUE ;"Needed elsewhere for faster processing of future records.
|
---|
590 | IF TARGETIEN'=RPTR DO GOTO:(RESULT="ABORT") OVWDN
|
---|
591 | . NEW TEMP SET TEMP=$$RLOCARRAY(FILENUM,TARGETIEN,.ARRAY,.NARRAY) ;"Relocate array (change IEN)
|
---|
592 | . IF TEMP=-1 SET RESULT="ABORT" QUIT
|
---|
593 | . KILL ARRAY
|
---|
594 | . MERGE ARRAY=NARRAY
|
---|
595 | NEW DIFF SET DIFF=$$ISDIFF(.ARRAY) ;" 0=no diff, 1=ARRAY has extra info, 2=ARRAY has conflicting info
|
---|
596 | IF DIFF=0 SET RESULT="USELOCAL" GOTO OVWDN
|
---|
597 | IF DIFF=1 SET RESULT="OVERWRITE" GOTO OVWDN
|
---|
598 | ;
|
---|
599 | DO GET01FIELD(FILENUM,.ARRAY,.R01VALUE,.L01VALUE,RPTR) ;
|
---|
600 | IF R01VALUE'=L01VALUE DO GOTO OVWDN ;"If .01 values are different, so move TARGETIEN to new location
|
---|
601 | . SET TARGETIEN=$$APPENDIEN(FILENUM,RPTR) ;"RPTR not used unless dealing with subfile.
|
---|
602 | . SET RESULT=$SELECT((TARGETIEN>0):"OVERWRITE",1:"ABORT")
|
---|
603 | ;
|
---|
604 | IF $GET(^DD(FILENUM,.01,0))["DINUM" SET RESULT="OVERWRITE" GOTO OVWDN ;"translation of pointer not allowed
|
---|
605 | NEW MENU,USRSLCT
|
---|
606 | SET USRSLCT=$GET(^TMG("TMGSIPH","CONFLICT HANDL",FILENUM))
|
---|
607 | IF USRSLCT'="" GOTO OW3
|
---|
608 | ;
|
---|
609 | OW2 WRITE #
|
---|
610 | NEW FNAME SET FNAME=$$FILENAME^TMGFMUT2(FILENUM)
|
---|
611 | KILL MENU
|
---|
612 | set MENU(0)="<<!!CONFLICT FOUND!!>> OVERWRITE LOCAL DATA IN FILE ["_FNAME_"] ?"
|
---|
613 | set MENU(1)="VIEW local and remote raw data"_$char(9)_"View"
|
---|
614 | set MENU(2)="OVERWRITE local data."_$char(9)_"Overwrite1"
|
---|
615 | set MENU(3)="Store record in NEW location."_$char(9)_"ChangeIEN"
|
---|
616 | set MENU(4)="Use LOCAL data, not remote data from server."_$char(9)_"UseLocal"
|
---|
617 | set MENU(5)="FIND a local record to use instead."_$char(9)_"FindLocal"
|
---|
618 | set MENU(6)="Abort"_$char(9)_"Abort"
|
---|
619 | ;
|
---|
620 | WRITE "File = ",FNAME,"; Record .01 field = "_R01VALUE,!
|
---|
621 | SET USRSLCT=$$Menu^TMGUSRIF(.MENU,"")
|
---|
622 | IF USRSLCT="^" SET USRSLCT="Abort"
|
---|
623 | IF USRSLCT=0 set USRSLCT=""
|
---|
624 | IF USRSLCT="FindLocal" DO GOTO:(+Y>0) OVWDN
|
---|
625 | . NEW X,DIC
|
---|
626 | . IF $$ISSUBFIL^TMGFMUT2(FILENUM) DO
|
---|
627 | . . SET DIC=$$GETGREF^TMGFMUT2(FILENUM,TARGETIEN)
|
---|
628 | . ELSE SET DIC=FILENUM
|
---|
629 | . SET DIC(0)="MAEQ"
|
---|
630 | . DO ^DIC WRITE !
|
---|
631 | . IF +Y'>0 QUIT
|
---|
632 | . SET RESULT="OVERWRITE"
|
---|
633 | . SET $PIECE(TARGETIEN,",",1)=+Y
|
---|
634 | IF USRSLCT="Abort" SET RESULT="ABORT" GOTO OVWDN
|
---|
635 | IF USRSLCT="View" DO RECSHOW(FILENUM,RPTR,.ARRAY) GOTO OW2
|
---|
636 | SET %=2
|
---|
637 | WRITE "ALWAYS do this for file ["_FNAME_"]"
|
---|
638 | DO YN^DICN WRITE !
|
---|
639 | IF %=-1 SET RESULT="ABORT" GOTO OVWDN
|
---|
640 | IF %=2 SET ^TMG("TMGSIPH","CONFLICT HANDL",FILENUM)=""
|
---|
641 | ELSE SET ^TMG("TMGSIPH","CONFLICT HANDL",FILENUM)=USRSLCT
|
---|
642 | OW3 IF USRSLCT="Overwrite1" DO GOTO OVWDN
|
---|
643 | . SET RESULT="OVERWRITE"
|
---|
644 | IF USRSLCT="ChangeIEN" DO GOTO OVWDN
|
---|
645 | . SET TARGETIEN=$$APPENDIEN(FILENUM,RPTR) ;"RPTR not used unless dealing with subfile.
|
---|
646 | . SET RESULT=$SELECT((TARGETIEN>0):"OVERWRITE",1:"ABORT")
|
---|
647 | IF USRSLCT="UseLocal" DO GOTO OVWDN
|
---|
648 | . SET RESULT="USELOCAL"
|
---|
649 | GOTO OW2
|
---|
650 | ;
|
---|
651 | OVWDN QUIT RESULT
|
---|
652 | ; |
---|