1 | TMGSIPH3 ;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 | ;"Support functions for transferring files from server
|
---|
6 | ;"Kevin Toppenberg MD
|
---|
7 | ;"GNU General Public License (GPL) applies
|
---|
8 | ;"11/27/09
|
---|
9 | ;
|
---|
10 | ;"=======================================================================
|
---|
11 | ;" API -- Public Functions.
|
---|
12 | ;"=======================================================================
|
---|
13 | ;"TRANSFILE(JNUM) -- move a remote file to local machine, overwriting local entries.
|
---|
14 | ;"GET01FLD(JNUM,FILENUM,IEN) -Get .01 field (internal format) from server.
|
---|
15 | ;"TRANS1FIL(JNUM,FILENUM) -move a remote file to local machine, overwriting local entries.
|
---|
16 | ;"QRYSERVER(JNUM) -- display a given reference from the server
|
---|
17 | ;"TRANSREF(JUNUM) -- move an absolute reference from server to local
|
---|
18 | ;"ASKNEEDED(JNUM,OUTARRAY,INOUT,OPTIONS) --review records of needed records, and
|
---|
19 | ;" ask user which file, or
|
---|
20 | ;" which records to get, and return results of selected in array.
|
---|
21 | ;" This can handle either the list of needed pointers IN or OUT.
|
---|
22 | ;"NUMNEEDED(JNUM,INOUT) -- count number of records needed from server.
|
---|
23 | ;"CHCK4SIM(FILENUM,ARRAY,ANIEN,VALUE01,IENS) -- look at an array and see if there is similar record already on the client.
|
---|
24 | ;"XTRACT01FLD(ARRAY) ; --remove .01 Field values from array returned from GET RECORD & XREF, and store
|
---|
25 | ;"GETANDFIXREC(JNUM,FILENUM,IEN,OVERWRITE,TALLY,INOUT) -- request a record from server, and integrate into local vista,
|
---|
26 | ;" resolving pointers locally to point to newly downloaded record.
|
---|
27 | ;"HANDLNEEDED(JNUM,INOUT,AUTOMODE) --Ask user which records to get from server, then get them and update
|
---|
28 | ;" pointer translation table.
|
---|
29 |
|
---|
30 | ;"=======================================================================
|
---|
31 | ;"Dependancies
|
---|
32 | ;"=======================================================================
|
---|
33 | ;"TMGUSRIF, XLFSTR
|
---|
34 | ;"=======================================================================
|
---|
35 | ;
|
---|
36 | ;
|
---|
37 | TRANSFILE(JNUM)
|
---|
38 | ;"Purpose: to move a remote file to local machine, overwriting local entries.
|
---|
39 | ;"Input: JNUM -- The job number of the background client process
|
---|
40 | ;"Results: none
|
---|
41 | NEW X,Y,DIC,ARRAY,%
|
---|
42 | SET DIC=1,DIC(0)="MAEQ"
|
---|
43 | TF1 WRITE "Pick file to transfer COMPLETELY, or to resume transfer from",!
|
---|
44 | DO ^DIC WRITE !
|
---|
45 | IF +Y'>0 DO QUIT:(+Y'>0)!(%=-1)
|
---|
46 | . SET %=1
|
---|
47 | . WRITE "File not found on this client. Do you want to select a file",!
|
---|
48 | . WRITE "to transfer from the server" DO YN^DICN WRITE !
|
---|
49 | . QUIT:(%'=1)
|
---|
50 | . WRITE "Pick file ON SERVER to transfer COMPLETELY: "
|
---|
51 | . READ Y,!
|
---|
52 | . IF Y["^" QUIT
|
---|
53 | . NEW QUERY,REPLY,ERROR,RESULT
|
---|
54 | . SET QUERY="DO DIC|1^"_Y
|
---|
55 | . DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,30)
|
---|
56 | . IF $DATA(ERROR) WRITE ERROR,! SET Y=0 QUIT
|
---|
57 | . SET Y=$GET(REPLY(1))
|
---|
58 | . IF +Y>0 SET ^TMG("TMGSIPH","DD",+Y,"DIFF")=0
|
---|
59 | FOR DO QUIT:(DDOK'=0)
|
---|
60 | . SET DDOK=$$PREPDD^TMGSIPH1(JNUM,+Y)
|
---|
61 | . QUIT:(DDOK=1)
|
---|
62 | . WRITE "Before records can be transferred from the server, the local data",!
|
---|
63 | . WRITE "dictionary must be made compatible. Must work on this now.",!
|
---|
64 | . DO PressToCont^TMGUSRIF
|
---|
65 | . SET DDOK=+$GET(^TMG("TMGSIPH","DD",+Y,"DIFF"))
|
---|
66 | GOTO TF1:(DDOK'=1)
|
---|
67 | DO TRANS1FIL(JNUM,+Y)
|
---|
68 | GOTO TF1
|
---|
69 | ;
|
---|
70 | ;
|
---|
71 | GET01FLD(JNUM,FILENUM,IEN) ;
|
---|
72 | ;"Purpose: Get .01 field (internal format) from server, or return previously obtained value.
|
---|
73 | ;"Input: JNUM -- The job number of the background client process
|
---|
74 | ;" FILENUM -- The file number to compare.
|
---|
75 | ;" IEN -- the record to query -- Server-side IEN, not client IEN
|
---|
76 | ;"Result: returns the .01 value or "" if problem
|
---|
77 | SET RESULT=$GET(^TMG("TMGSIPH",".01 VALUE",FILENUM,IEN))
|
---|
78 | IF RESULT'="" GOTO G1DN
|
---|
79 | NEW QUERY,REPLY,ERROR,RESULT
|
---|
80 | SET QUERY="GET .01 FLD|"_FILENUM_"^"_IEN
|
---|
81 | DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,30)
|
---|
82 | IF $DATA(ERROR) WRITE ERROR,!
|
---|
83 | SET RESULT=$GET(REPLY(1))
|
---|
84 | SET ^TMG("TMGSIPH",".01 VALUE",FILENUM,IEN)=RESULT
|
---|
85 | G1DN QUIT RESULT
|
---|
86 | ;
|
---|
87 | ;
|
---|
88 | TRANS1FIL(JNUM,FILENUM) ;
|
---|
89 | ;"Purpose: to move a remote file to local machine, overwriting local entries.
|
---|
90 | ;"Input: JNUM -- The job number of the background client process
|
---|
91 | ;" FILENUM -- The file number to transfer. (Not a subfile)
|
---|
92 | ;"Output: Will set output globals:
|
---|
93 | ;" ^TMG("TMGSIPH","PT XLAT",FILENUM,RemoteIEN)=LocalIEN
|
---|
94 | ;" ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM,RemotePointer,ReferToNodeToBeCorrected,Piece#OfNode)=""
|
---|
95 | ;"Results: none
|
---|
96 | ;
|
---|
97 | NEW MAXNUM
|
---|
98 | NEW QUERY,ERROR,RESULT,REPLY
|
---|
99 | SET QUERY="NUMRECS|"_FILENUM
|
---|
100 | DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,15)
|
---|
101 | IF $DATA(ERROR) WRITE ERROR,! GOTO T1FD
|
---|
102 | SET MAXNUM=+$GET(REPLY(1))
|
---|
103 | IF MAXNUM'>0 DO GOTO T1FD
|
---|
104 | . WRITE "Error: number of records=",MAXNUM,!
|
---|
105 | NEW STARTTIME SET STARTTIME=$H
|
---|
106 | NEW GLREF SET GLREF=$GET(^DIC(FILENUM,0,"GL"))
|
---|
107 | NEW REF SET REF=$GET(^TMG("TMGSIPH","DOWNLOADED",FILENUM,"#PRIOR RUN#"))
|
---|
108 | NEW % SET %=1 ;"Default=Y
|
---|
109 | IF REF'="" DO
|
---|
110 | . WRITE "Continue transfer of records from point of last run"
|
---|
111 | . DO YN^DICN WRITE !
|
---|
112 | . IF %=2 SET REF=""
|
---|
113 | IF %=-1 GOTO T1FD
|
---|
114 | IF REF="" SET REF=$$CREF^DILF(GLREF_""""",")
|
---|
115 | SET GLREF=$$CREF^DILF(GLREF)
|
---|
116 | NEW QL SET QL=$QLENGTH(REF)
|
---|
117 | WRITE "Press ESC to abort...",!
|
---|
118 | NEW REC SET REC=""
|
---|
119 | NEW TMGABORT
|
---|
120 | FOR DO QUIT:(REF="")!(TMGABORT=1)
|
---|
121 | . SET TMGABORT=$$UserAborted^TMGUSRIF() QUIT:(TMGABORT=1)
|
---|
122 | . SET QUERY="ORDREF|"_REF
|
---|
123 | . DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,30)
|
---|
124 | . IF $DATA(ERROR) DO QUIT
|
---|
125 | . . WRITE ERROR,!
|
---|
126 | . . SET REF=""
|
---|
127 | . IF $DATA(REPLY)=0 SET REF="" QUIT
|
---|
128 | . DO STOREDATA^TMGSIPHU(.REPLY)
|
---|
129 | . SET ^TMG("TMGSIPH","DOWNLOADED",FILENUM,"#PRIOR RUN#")=REF
|
---|
130 | . SET REF=$GET(REPLY(1)) QUIT:(REF="")
|
---|
131 | . SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1)
|
---|
132 | . SET REF=$$QSUBS^TMGSIPHU(REF,QL)
|
---|
133 | . IF $QSUBSCRIPT(REF,QL)=REC do
|
---|
134 | . . write "ERROR: Record number didn't increase!",!
|
---|
135 | . SET REC=$QSUBSCRIPT(REF,QL)
|
---|
136 | . IF (+REC=REC) DO
|
---|
137 | . . IF $$REAL1PTOUT^TMGSIPH1(FILENUM,REC) ;"Ignore function result
|
---|
138 | . . SET ^TMG("TMGSIPH","PT XLAT",FILENUM,REC)=REC ;"remote and local IEN's are same
|
---|
139 | . . SET ^TMG("TMGSIPH","DOWNLOADED",FILENUM,REC)=REC
|
---|
140 | . IF (REC#10)=0 DO
|
---|
141 | . . DO ProgressBar^TMGUSRIF(REC,"Progress: "_REC,0,MAXNUM,70,STARTTIME)
|
---|
142 | T1FD QUIT
|
---|
143 | ;
|
---|
144 | ;
|
---|
145 | QRYSERVER(JNUM) ;
|
---|
146 | ;"Purpose: To display a given reference from the server
|
---|
147 | ;"Input: JNUM -- The job number of the background client process
|
---|
148 | SET JNUM=+$GET(JNUM)
|
---|
149 | QUIT:(+JNUM'>0)
|
---|
150 | NEW QUERY,ERROR,RESULT,REPLY
|
---|
151 | FOR DO quit:(QUERY="^")
|
---|
152 | . READ "Enter reference> ",QUERY,!
|
---|
153 | . IF (QUERY="")!(QUERY="^") SET QUERY="^" QUIT
|
---|
154 | . ELSE SET QUERY="GET|"_QUERY
|
---|
155 | . DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,5)
|
---|
156 | . IF $DATA(ERROR) WRITE ERROR,!
|
---|
157 | . IF $DATA(REPLY) do
|
---|
158 | . . WRITE "reply:",!
|
---|
159 | . . ZWR REPLY
|
---|
160 | quit
|
---|
161 | ;
|
---|
162 | ;
|
---|
163 | TRANSREF(JNUM) ;
|
---|
164 | ;"Purpose: To move an absolute reference from server to local
|
---|
165 | SET JNUM=+$GET(JNUM)
|
---|
166 | QUIT:(+JNUM'>0)
|
---|
167 | WRITE "This will allow an arbitrary global to be transferred",!
|
---|
168 | write "from the server.",!
|
---|
169 | NEW REF,QUERY,ERROR,RESULT,REPLY,%
|
---|
170 | FOR DO QUIT:(REF="^")
|
---|
171 | . READ "Enter reference (e.g. ""^ABC(123,"" or ^ to quit)> ",REF,!
|
---|
172 | . IF (REF="")!(REF="^") SET REF="^" QUIT
|
---|
173 | . SET REF=$$CREF^DILF(REF)
|
---|
174 | . SET QUERY="GET|"_REF
|
---|
175 | . DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,5)
|
---|
176 | . IF $DATA(ERROR) WRITE ERROR,! QUIT
|
---|
177 | . IF $DATA(REPLY) ZWR REPLY WRITE !
|
---|
178 | . SET %=1
|
---|
179 | . IF $DATA(@REF) DO QUIT:(%'=1)
|
---|
180 | . . WRITE "WARNING: There is already data locally at ",REF,!
|
---|
181 | . . WRITE "Do you want to OVERWRITE this local data"
|
---|
182 | . . SET %=2
|
---|
183 | . . DO YN^DICN WRITE !
|
---|
184 | . DO STOREDATA^TMGSIPHU(.REPLY)
|
---|
185 | . WRITE "Data stored locally.",!,!
|
---|
186 | . KILL REPLY
|
---|
187 | quit
|
---|
188 |
|
---|
189 |
|
---|
190 |
|
---|
191 |
|
---|
192 | ASKNEEDED(JNUM,OUTARRAY,INOUT,OPTIONS) ;
|
---|
193 | ;"Purpose: To review records of needed records, and ask user which file, or
|
---|
194 | ;" which records to get, and return results of selected in array.
|
---|
195 | ;" This can handle either the list of needed pointers IN or OUT.
|
---|
196 | ;"Input: JNUM -- The job number of the background client process
|
---|
197 | ;" OUTARRAY -- PASS BY REFERNCE, an OUT PARAMETER. Filled as follows
|
---|
198 | ;" OUTARRAY(FileNum,RecordNum)=""
|
---|
199 | ;" INOUT -- OPTIONAL -- Default is "PTOUT". Should be "PTIN" or "PTOUT"
|
---|
200 | ;" OPTIONS -- OPTIONAL default is 0. See SELNEEDED for details.
|
---|
201 | ;"Results: None.
|
---|
202 | ;"NOTE: uses ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM,RemotePointer,RefToNodeToBeCorrected,Piece#OfNode)=""
|
---|
203 | ;" ^TMG("TMGSIPH","NEEDED RECORDS","PTIN",FILENUM,IEN)=""
|
---|
204 | ;
|
---|
205 | NEW REF SET REF=$NAME(^TMG("TMGSIPH","NEEDED RECORDS",INOUT))
|
---|
206 | DO SELNEEDED(JNUM,.OUTARRAY,REF,.OPTIONS)
|
---|
207 | QUIT
|
---|
208 | ;
|
---|
209 | ;
|
---|
210 | SELNEEDED(JNUM,OUTARRAY,REF,OPTIONS) ;
|
---|
211 | ;"Purpose: To review an array of needed records, and ask user which file, or
|
---|
212 | ;" which records to get, and return results of selected in array.
|
---|
213 | ;"Input: JNUM -- The job number of the background client process
|
---|
214 | ;" OUTARRAY -- PASS BY REFERNCE, an OUT PARAMETER. Filled as follows
|
---|
215 | ;" OUTARRAY(FileNum,RecordNum)=""
|
---|
216 | ;" REF -- PASS BY NAME -- The name of the variable holding the records to ask from. Variable
|
---|
217 | ;" array should have this format:
|
---|
218 | ;" @REF@(FILENUM,RPTR)=""
|
---|
219 | ;" @REF@(FILENUM,RPTR)=""
|
---|
220 | ;" OPTIONS -- OPTIONAL default is 0. If 1, then all records are processed without asking.
|
---|
221 | ;" OPTIONS("MAP MODE")=1 OPTIONAL, if exists, then different header is displayed
|
---|
222 | ;" OPTIONS("NUMNEEDED")=1 OPTIONAL, if exists, will only get up to 200 records
|
---|
223 | ;" OPTIONS("HEADER")=<header text> OPTIONAL. If present, will be used for header display
|
---|
224 | ;"Results: None.
|
---|
225 | NEW TMGARRAY,TMGSEL,TMGSEL2
|
---|
226 | KILL OUTARRAY
|
---|
227 | SET INOUT=$GET(INOUT) IF INOUT'="PTIN" SET INOUT="PTOUT"
|
---|
228 | NEW FILENUM SET FILENUM=""
|
---|
229 | NEW AUTOMODE SET AUTOMODE=(+$GET(OPTIONS)=1)
|
---|
230 | FOR SET FILENUM=$ORDER(@REF@(FILENUM)) QUIT:(+FILENUM'>0) DO
|
---|
231 | . NEW DISPSTR SET DISPSTR="Get records from REMOTE file #"_FILENUM_" ("
|
---|
232 | . SET DISPSTR=DISPSTR_$$FILENAME^TMGFMUT2(FILENUM)_")"
|
---|
233 | . SET TMGARRAY(DISPSTR)=FILENUM
|
---|
234 | NEW STIME SET STIME=$H
|
---|
235 | NEW SHOWPROG SET SHOWPROG=0
|
---|
236 | NEW TMGCT SET TMGCT=0
|
---|
237 | NEW TMGDONE SET TMGDONE=0
|
---|
238 | NEW SHORTLST SET SHORTLST=+$GET(OPTIONS("NUMNEEDED"))
|
---|
239 | NEW HEADER
|
---|
240 | IF $DATA(OPTIONS("HEADER")) DO
|
---|
241 | . SET HEADER=$GET(OPTIONS("HEADER"))
|
---|
242 | ELSE DO
|
---|
243 | . IF $GET(OPTIONS("MAP MODE"))=1 DO
|
---|
244 | . . SET HEADER="Select File(s) to MAP to local records in. Press <ESC><ESC> when Done."
|
---|
245 | . ELSE SET HEADER="Select File(s) to get REMOTE records from. Press <ESC><ESC> when Done."
|
---|
246 | IF AUTOMODE MERGE TMGSEL=TMGARRAY
|
---|
247 | ELSE DO Selector^TMGUSRIF("TMGARRAY","TMGSEL",HEADER)
|
---|
248 | NEW TMGABORT SET TMGABORT=0
|
---|
249 | NEW IDX SET IDX=""
|
---|
250 | FOR SET IDX=$ORDER(TMGSEL(IDX)) QUIT:(IDX="")!TMGABORT!TMGDONE DO
|
---|
251 | . SET FILENUM=$GET(TMGSEL(IDX)) QUIT:FILENUM=""
|
---|
252 | . NEW FNAME SET FNAME=$$FILENAME^TMGFMUT2(FILENUM)
|
---|
253 | . NEW RPTR SET RPTR=""
|
---|
254 | . KILL TMGARRAY,TMGSEL2
|
---|
255 | . NEW RECCT SET RECCT=0
|
---|
256 | . NEW SELALL SET SELALL=0
|
---|
257 | . NEW ASKED SET ASKED=0
|
---|
258 | . IF AUTOMODE=0 WRITE "GETTING NAMES OF RECORDS...",!
|
---|
259 | . FOR SET RPTR=$ORDER(@REF@(FILENUM,RPTR)) QUIT:(RPTR="")!SELALL!TMGABORT!TMGDONE DO
|
---|
260 | . . NEW DISPSTR SET DISPSTR="File: "_FNAME_", record #"_$$RJ^XLFSTR(RPTR,6)
|
---|
261 | . . IF AUTOMODE=0 SET DISPSTR=DISPSTR_" -- "_$$GET01FLD(JNUM,FILENUM,RPTR)
|
---|
262 | . . SET TMGARRAY(DISPSTR)=RPTR
|
---|
263 | . . SET RECCT=RECCT+1
|
---|
264 | . . SET TMGCT=TMGCT+1
|
---|
265 | . . IF (SHOWPROG=0),($$HDIFF^XLFDT($H,STIME,2)>10) DO ;"Turn on progress bar after 10 seconds.
|
---|
266 | . . . SET SHOWPROG=1
|
---|
267 | . . IF (SHOWPROG=1),(TMGCT>500) DO
|
---|
268 | . . . DO ProgressBar^TMGUSRIF(100,"Gathering list of needed records "_RECCT,-1,-1,70,STIME)
|
---|
269 | . . . SET TMGCT=0
|
---|
270 | . . IF (RECCT>200),(ASKED=0) DO
|
---|
271 | . . . IF SHORTLST SET TMGDONE=1,RECCT=0 QUIT
|
---|
272 | . . . SET ASKED=1
|
---|
273 | . . . IF AUTOMODE=1 QUIT
|
---|
274 | . . . NEW MENU,USRSLCT
|
---|
275 | . . . SET MENU(0)="File "_FNAME_" has > 200 records."
|
---|
276 | . . . SET MENU(1)="Automatically Select ALL records"_$char(9)_"AutoSelALL"
|
---|
277 | . . . SET MENU(2)="Show LONG list to allow picking individual records"_$char(9)_"SelectList"
|
---|
278 | . . . NEW DONE SET DONE=0
|
---|
279 | . . . FOR DO QUIT:(DONE=1)!(TMGABORT)
|
---|
280 | . . . . WRITE #
|
---|
281 | . . . . SET USRSLCT=$$MENU^TMGUSRIF(.MENU,"^")
|
---|
282 | . . . . SET DONE=1
|
---|
283 | . . . . IF USRSLCT="^" SET TMGABORT=1 QUIT
|
---|
284 | . . . . IF USRSLCT="AutoSelALL" SET SELALL=1 QUIT
|
---|
285 | . . . . IF USRSLCT="SelectList" QUIT
|
---|
286 | . . . . ELSE SET DONE=0
|
---|
287 | . IF TMGABORT QUIT
|
---|
288 | . IF (RECCT=1)!AUTOMODE!SELALL DO
|
---|
289 | . . NEW TMGSKIP SET TMGSKIP=0
|
---|
290 | . . SET TMGCT=0
|
---|
291 | . . NEW ONEREC SET ONEREC=""
|
---|
292 | . . FOR SET ONEREC=$ORDER(@REF@(FILENUM,ONEREC)) QUIT:(ONEREC="")!TMGSKIP DO
|
---|
293 | . . . SET TMGSEL2(ONEREC)=ONEREC
|
---|
294 | . . . IF SHORTLST,(TMGCT>200) SET TMGSKIP=1,TMGDONE=1 QUIT
|
---|
295 | . . . SET TMGCT=TMGCT+1
|
---|
296 | . . . SET RECCT=RECCT+1
|
---|
297 | . . . IF (SHOWPROG=0),($$HDIFF^XLFDT($H,STIME,2)>10) DO ;"Turn on progress bar after 10 seconds.
|
---|
298 | . . . . SET SHOWPROG=1
|
---|
299 | . . . IF (SHOWPROG=1),(TMGCT>500) DO
|
---|
300 | . . . . DO ProgressBar^TMGUSRIF(100,"Gathering list of needed records "_RECCT,0,100,70,STIME)
|
---|
301 | . . . . SET TMGCT=0
|
---|
302 | . . SET SELALL=1
|
---|
303 | . IF SELALL=0 DO
|
---|
304 | . . IF $GET(OPTIONS("MAP MODE"))=1 DO
|
---|
305 | . . . SET HEADER="Select records to MAP to local records. Press <ESC><ESC> when Done."
|
---|
306 | . . ELSE SET HEADER="Select records to get from Server. Press <ESC><ESC> when Done."
|
---|
307 | . . DO Selector^TMGUSRIF("TMGARRAY","TMGSEL2",HEADER)
|
---|
308 | . NEW I2 SET I2=""
|
---|
309 | . FOR SET I2=$ORDER(TMGSEL2(I2)) QUIT:(I2="") DO
|
---|
310 | . . SET RPTR=$GET(TMGSEL2(I2))
|
---|
311 | . . SET OUTARRAY(FILENUM,RPTR)=""
|
---|
312 | ;
|
---|
313 | QUIT
|
---|
314 | ;
|
---|
315 | ;
|
---|
316 | NUMNEEDED(JNUM,INOUT)
|
---|
317 | ;"Purpose: To count number of records needed from server.
|
---|
318 | ;"Input: JNUM -- The job number of the background client process
|
---|
319 | ;" INOUT -- OPTIONAL -- Default is "PTOUT". Should be "PTIN" or "PTOUT"
|
---|
320 | ;"Output: Returns the number of records needed.
|
---|
321 | ;"
|
---|
322 | NEW GETARRAY,FILENUM,RESULT
|
---|
323 | SET INOUT=$GET(INOUT) IF INOUT'="PTIN" SET INOUT="PTOUT"
|
---|
324 | NEW MODE SET MODE=1,MODE("NUMNEEDED")=1 ;"Will limit number counting to 200 mg
|
---|
325 | DO ASKNEEDED(JNUM,.GETARRAY,INOUT,.MODE)
|
---|
326 | SET FILENUM=0
|
---|
327 | SET RESULT=0
|
---|
328 | NEW TMGCT SET TMGCT=0
|
---|
329 | NEW STIME SET STIME=$H
|
---|
330 | NEW SHOWPROG SET SHOWPROG=0
|
---|
331 | FOR SET FILENUM=$ORDER(GETARRAY(FILENUM)) QUIT:(FILENUM="") DO
|
---|
332 | . NEW IEN SET IEN=""
|
---|
333 | . FOR SET IEN=$ORDER(GETARRAY(FILENUM,IEN),-1) QUIT:(IEN="") DO
|
---|
334 | . . SET RESULT=RESULT+1
|
---|
335 | . . SET TMGCT=TMGCT+1
|
---|
336 | . . IF (SHOWPROG=0),($$HDIFF^XLFDT($H,STIME,2)>5) DO ;"Turn on progress bar after 5 seconds.
|
---|
337 | . . . SET SHOWPROG=1
|
---|
338 | . . IF (SHOWPROG=1),(TMGCT>1000) DO
|
---|
339 | . . . DO ProgressBar^TMGUSRIF(100,"Counting records: "_TMGCT,0,100,70)
|
---|
340 | . . . SET TMGCT=0
|
---|
341 | IF TMGCT>200 SET TMGCT=TMGCT_"+"
|
---|
342 | QUIT TMGCT
|
---|
343 | ;
|
---|
344 | ;
|
---|
345 | CHCK4SIM(FILENUM,ARRAY,ANIEN,VALUE01,IENS)
|
---|
346 | ;"Purpose: To look at an array, as returned from server, and see if there is
|
---|
347 | ;" a similar record already on the client.
|
---|
348 | ;"Input: FILENUM -- the fileman filenumber of file to get from remote server
|
---|
349 | ;" ARRAY -- The global record array, as returned from server.
|
---|
350 | ;" ANIEN -- PASS BY REFERENCE. Will be filled with IEN match
|
---|
351 | ;" If IENS is passed (i.e. if dealing with a subfile), then ANIEN is passed
|
---|
352 | ;" back in standard IENS format (e.g. '7,1234,')
|
---|
353 | ;" VALUE01 -- OPTIONAL. This allows a .01 value to be passed. If provided, then
|
---|
354 | ;" the ARRAY won't be searched for a .01 value.
|
---|
355 | ;" IENS -- OPTIONAL. If FILENUM is a subfile, then IENS is needed for lookup.
|
---|
356 | ;" IENS is modified, so **DON'T** PASS BY REFERENCE
|
---|
357 | ;"Results: 0 if no similar record already on the local server (i.e. NO MATCH)
|
---|
358 | ;" 1 if a match WAS found.
|
---|
359 | ;"Output: ANIEN is modified.
|
---|
360 | ;"NOTE: If .01 field of passed record array matches to 2 or more records, then NO MATCH resulted
|
---|
361 | ;" Also, if file does not have a "B" cross reference, then NO MATCH resulted.
|
---|
362 | ;" Also, the first 30 characters (only) are tested for match in "B" xref.
|
---|
363 | ;
|
---|
364 | NEW RESULT SET RESULT=0
|
---|
365 | SET ANIEN=0
|
---|
366 | SET FILENUM=+$GET(FILENUM) ;" If in format of 'SubFile{ParentFile', then strip off parent filenum.
|
---|
367 | NEW GREF SET GREF=$$GETGREF^TMGFMUT2(FILENUM,.IENS) ;"IENS not used if not subfile.
|
---|
368 | IF GREF="" GOTO C4SDN
|
---|
369 | NEW BREF SET BREF=GREF_"""B"")"
|
---|
370 | NEW SAVIENS SET SAVIENS=$GET(IENS)
|
---|
371 | SET $PIECE(IENS,",",1)="" ;"e.g. '7,2345,' --> ',2345,' to specify parent, but no particular subfile entry
|
---|
372 | IF $DATA(@BREF)=0 GOTO C4SDN
|
---|
373 | NEW CGREF SET CGREF=$$CREF^DILF(GREF)
|
---|
374 | NEW GREFLEN SET GREFLEN=$QLENGTH(CGREF)
|
---|
375 | NEW VALUE SET VALUE=$GET(VALUE01)
|
---|
376 | NEW TMGI SET TMGI=0
|
---|
377 | FOR SET TMGI=$ORDER(ARRAY(TMGI)) QUIT:(TMGI="")!(VALUE'="") DO ;"Find .01 value
|
---|
378 | . NEW REF SET REF=$GET(ARRAY(TMGI))
|
---|
379 | . SET REF=$EXTRACT(REF,1,$LENGTH(REF)-1)
|
---|
380 | . SET TMGI=TMGI+1
|
---|
381 | . IF REF="" SET TMGI="" QUIT
|
---|
382 | . IF $QSUBSCRIPT(REF,GREFLEN+2)'=0 QUIT ;"Only check 0 node.
|
---|
383 | . IF $QLENGTH(REF)'=(GREFLEN+2) QUIT ;"Only allow ^GREF(xxx,xxx,IEN,0)
|
---|
384 | . SET VALUE=$EXTRACT($GET(ARRAY(TMGI)),2,10000)
|
---|
385 | . SET VALUE=$PIECE(VALUE,"^",1)
|
---|
386 | IF VALUE="" GOTO C4SDN
|
---|
387 | IF (FILENUM'=9999999.27),$GET(^TMG("TMGSIPH","SKIP CHCK4SIM",FILENUM,VALUE))=1 GOTO C4SDN
|
---|
388 | NEW TMGOUT,TMGMSG
|
---|
389 | DO FIND^DIC(FILENUM,IENS,"@;.01I","BOQUX",VALUE,"*","B","","","TMGOUT","TMGMSG")
|
---|
390 | DO ShowIfDIERR^TMGDEBUG(.TMGOUT)
|
---|
391 | NEW CT SET CT=+$GET(TMGOUT("DILIST",0))
|
---|
392 | IF CT=1 DO
|
---|
393 | . ;"Ensure matched local record didn't actually come from server
|
---|
394 | . NEW LPTR SET LPTR=+$GET(TMGOUT("DILIST",2,1))
|
---|
395 | . IF $DATA(^TMG("TMGSIPH","DOWNLOADED",FILENUM,LPTR)) QUIT
|
---|
396 | . IF SAVIENS'="" DO
|
---|
397 | . . SET ANIEN=SAVIENS
|
---|
398 | . . SET $PIECE(ANIEN,",",1)=LPTR
|
---|
399 | . ELSE SET ANIEN=LPTR
|
---|
400 | . SET RESULT=1
|
---|
401 | ELSE IF CT>100 DO
|
---|
402 | . SET ^TMG("TMGSIPH","SKIP CHCK4SIM",FILENUM,VALUE)=1
|
---|
403 | ;
|
---|
404 | C4SDN QUIT RESULT
|
---|
405 | ;
|
---|
406 | ;
|
---|
407 | XTRACT01FLD(ARRAY) ;
|
---|
408 | ;"Purpose: To remove pointed-to .01 Field values from array returned from GET RECORD & XREF,
|
---|
409 | ;" and store these for future reference. Removes %PTRSOUT%
|
---|
410 | ;"Input: ARRAY -- PASS BY REFERENCE. Results returned from GET RECORD & XREF. Format:
|
---|
411 | ;" ARRAY(1)="<Ref>="
|
---|
412 | ;" ARRAY(2)="=<Value>"
|
---|
413 | ;" ARRAY(3)="<Ref>="
|
---|
414 | ;" ARRAY(4)="=<Value>"
|
---|
415 |
|
---|
416 | ;" ...
|
---|
417 | ;" ARRAY(20)="%PTRSOUT%^PointedToFile^IEN^FIELD_VALUE"
|
---|
418 | ;" ARRAY(21)="%PTRSOUT%^PointedToFile^IEN^FIELD_VALUE"
|
---|
419 | ;" ...
|
---|
420 | ;"Results: none
|
---|
421 | NEW RESULT SET RESULT=0 ;Default to error.
|
---|
422 | NEW SHOWPG SET SHOWPG=0
|
---|
423 | NEW TMGCT SET TMGCT=0
|
---|
424 | NEW STIME SET STIME=$H
|
---|
425 | NEW TMGI SET TMGI=""
|
---|
426 | FOR SET TMGI=$ORDER(ARRAY(TMGI)) QUIT:(+TMGI'>0) DO
|
---|
427 | . IF (SHOWPG=0),($$HDIFF^XLFDT($H,STIME,2)>15) DO ;"Turn on progress bar after 15 seconds.
|
---|
428 | . . SET SHOWPG=1
|
---|
429 | . . SET TMGMIN=$ORDER(ARRAY(0))
|
---|
430 | . . SET TMGMAX=$ORDER(ARRAY(""),-1)
|
---|
431 | . IF (SHOWPG=1),(TMGCT>2000) DO
|
---|
432 | . . DO ProgressBar^TMGUSRIF(TMGI,"Extracting pointers from server data",TMGMIN,TMGMAX,70,STIME)
|
---|
433 | . . SET TMGCT=0
|
---|
434 | . SET TMGCT=TMGCT+1
|
---|
435 | . IF $GET(ARRAY(TMGI))'["%PTRSOUT%" QUIT
|
---|
436 | . NEW FILENUM SET FILENUM=$PIECE(ARRAY(TMGI),"^",2)
|
---|
437 | . NEW IEN SET IEN=$PIECE(ARRAY(TMGI),"^",3)
|
---|
438 | . NEW VALUE SET VALUE=$PIECE(ARRAY(TMGI),"^",4)
|
---|
439 | . KILL ARRAY(TMGI)
|
---|
440 | . SET ^TMG("TMGSIPH",".01 VALUE",FILENUM,IEN)=VALUE
|
---|
441 | QUIT
|
---|
442 | ;
|
---|
443 | ;
|
---|
444 | GETANDFIXREC(JNUM,FILENUM,RPTR,OVERWRITE,TALLY,INOUT) ;
|
---|
445 | ;"Purpose: To request a record from server, and integrate into local vista,
|
---|
446 | ;" resolving pointers locally to point to newly downloaded record.
|
---|
447 | ;"Input: JNUM -- The job number of the background client process
|
---|
448 | ;" FILENUM -- the fileman filenumber of file to get from remote server
|
---|
449 | ;" Can be in format of SubFileNum{ParentFileNum{GrandParent....
|
---|
450 | ;" RPTR -- The record number on the server to get.
|
---|
451 | ;" Can be in IENS format, e.g. '7,34532,' if FILENUM is a subfile.
|
---|
452 | ;" OVERWRITE -- OPTIONAL. If 1, then prior local records may be overwritten.
|
---|
453 | ;" If '?' then figure out if should overwrite, asking user if needed.
|
---|
454 | ;" TALLY -- OPTIONAL. PASS BY REFERENCE. An array to keep progress stats. Format:
|
---|
455 | ;" TALLY("ALREADY LOCAL FOUND")=#
|
---|
456 | ;" TALLY("DOWNLOADED")=#
|
---|
457 | ;" TALLY(FILENUM,"NEW REC NEEDED")=#
|
---|
458 | ;" TALLY("UNNEEDED RECORDS")=#
|
---|
459 | ;" INOUT -- OPTIONAL -- Default is "PTOUT". Should be "PTIN" or "PTOUT"
|
---|
460 | ;"NOTE: Gobal ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT") used, with format as below:
|
---|
461 | ;" ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM,RemotePointer,RefToNodeToBeCorrected,Piece#OfNode)=""
|
---|
462 | ;" As pointers are resolved, the entries will be KILLED from the above global
|
---|
463 | ;"Results: 1 if OK, -1 if error, -2 if abort
|
---|
464 | ;
|
---|
465 | NEW QUERY,REPLY,ERROR,NEWIEN
|
---|
466 | NEW RESULT SET RESULT=-1 ;"Default to error
|
---|
467 | NEW TMGABORT SET TMGABORT=0
|
---|
468 | SET INOUT=$GET(INOUT) IF INOUT'="PTIN" SET INOUT="PTOUT"
|
---|
469 | SET OVERWRITE=$GET(OVERWRITE)
|
---|
470 | SET FILENUM=$GET(FILENUM)
|
---|
471 | NEW ISSUBFIL SET ISSUBFIL=$$ISSUBFIL^TMGFMUT2(+FILENUM)
|
---|
472 | IF +RPTR'>0 GOTO GAFRD
|
---|
473 | SET NEWIEN=RPTR ;"Default of not changing IEN
|
---|
474 | SET FILENUM=+FILENUM IF FILENUM'>0 GOTO GAFRD ;"If subfile, strip parent file number.
|
---|
475 | NEW LPTR SET LPTR=$GET(^TMG("TMGSIPH","PT XLAT",FILENUM,RPTR))
|
---|
476 | IF (+LPTR>0) DO GOTO GAFR1 ;"Remote records already downloaded, so just link to it.
|
---|
477 | . SET NEWIEN=LPTR
|
---|
478 | . SET TALLY("ALREADY LOCAL FOUND")=+$GET(TALLY("ALREADY LOCAL FOUND"))+1
|
---|
479 | NEW CONHANDL SET CONHANDL=$GET(^TMG("TMGSIPH","CONFLICT HANDL",FILENUM))
|
---|
480 | NEW USELOCAL SET USELOCAL=0
|
---|
481 | IF CONHANDL="UseLocal" DO GOTO:(USELOCAL=1) GAF2
|
---|
482 | . ;"If pointer is to a file specified as ALWAYS LOCAL, Handle here, if .01 value is known.
|
---|
483 | . NEW VALUE SET VALUE=$GET(^TMG("TMGSIPH",".01 VALUE",FILENUM,RPTR))
|
---|
484 | . QUIT:(VALUE="")
|
---|
485 | . NEW ANIEN
|
---|
486 | . IF $$CHCK4SIM(FILENUM,,.ANIEN,VALUE,RPTR)=0 QUIT ;"RPTR (as IENS) not used if not subfile.
|
---|
487 | . IF +ANIEN'>0 QUIT
|
---|
488 | . SET NEWIEN=ANIEN
|
---|
489 | . SET USELOCAL=1
|
---|
490 | NEW GREF SET GREF=$$GETGREF^TMGFMUT2(FILENUM,RPTR) ;"RPTR (as IENS) not used if not subfile.
|
---|
491 | IF GREF="" GOTO GAFRD
|
---|
492 | NEW ZREF SET ZREF=GREF_"0)"
|
---|
493 | NEW CGREF SET CGREF=$$CREF^DILF(GREF)
|
---|
494 | IF ISSUBFIL DO
|
---|
495 | . NEW REF SET REF=GREF_+RPTR
|
---|
496 | . SET QUERY="GET REF & FILE XREF|"_REF_"^"_FILENUM_"^"_RPTR
|
---|
497 | ELSE DO
|
---|
498 | . SET QUERY="GET RECORD & XREF|"_FILENUM_"^"_RPTR
|
---|
499 | DO MSGCLIENT^TMGKERN2(JNUM,QUERY,.REPLY,.ERROR,30)
|
---|
500 | IF $DATA(ERROR) DO GOTO GAFRD
|
---|
501 | . WRITE ERROR,!
|
---|
502 | IF $DATA(REPLY)=0 DO GOTO GAFR0 ;"No data on server for record, so zero pointers
|
---|
503 | . SET NEWIEN=0
|
---|
504 | DO XTRACT01FLD(.REPLY)
|
---|
505 | NEW SIMIEN
|
---|
506 | IF $$CHCK4SIM(FILENUM,.REPLY,.SIMIEN,,RPTR) DO ;"A prior similar record already is on client.
|
---|
507 | . SET NEWIEN=SIMIEN ;"If dealing with subfiles, SIMIEN will be in IENS format.
|
---|
508 | NEW REF SET REF=GREF_+NEWIEN_")"
|
---|
509 | IF $DATA(@REF) DO
|
---|
510 | . NEW TEMP SET TEMP=$$GETTARGETIEN^TMGSIPHU(FILENUM,.REPLY,.NEWIEN)
|
---|
511 | . SET REF=GREF_+NEWIEN_")" ;"NEWIEN might have changed.
|
---|
512 | . IF TEMP="ABORT" SET RESULT=-2,TMGABORT=1 QUIT
|
---|
513 | . IF TEMP="USELOCAL" SET USELOCAL=1 QUIT
|
---|
514 | . IF TEMP="OVERWRITE" DO QUIT ;"OVERWRITE LOCAL RECORD #LPTR (KILL, THEN STORE later)
|
---|
515 | . . KILL @REF
|
---|
516 | GAF2 IF ($GET(TMGABORT)=1)!(NEWIEN'>0) GOTO GAFRD
|
---|
517 | IF USELOCAL=1 DO GOTO GAFR0
|
---|
518 | . SET TALLY("ALREADY LOCAL FOUND")=$GET(TALLY("ALREADY LOCAL FOUND"))+1
|
---|
519 | IF $$STOREDAS^TMGSIPHU(FILENUM,NEWIEN,.REPLY)=-1 GOTO GAFRD
|
---|
520 | SET $PIECE(@ZREF,"^",4)=+$PIECE($GET(@ZREF),"^",4)+1 ;"Update File Header to reflect added records
|
---|
521 | IF +NEWIEN>$PIECE(@ZREF,"^",3) SET $PIECE(@ZREF,"^",3)=NEWIEN
|
---|
522 | IF $$REAL1PTOUT^TMGSIPH1(FILENUM,NEWIEN,.TALLY) ;"Scan for pointers out. Ignore function result
|
---|
523 | SET ^TMG("TMGSIPH","DOWNLOADED",FILENUM,NEWIEN)=RPTR
|
---|
524 | SET TALLY("DOWNLOADED")=+$GET(TALLY("DOWNLOADED"))+1
|
---|
525 | GAFR0 SET ^TMG("TMGSIPH","PT XLAT",FILENUM,RPTR)=NEWIEN ;"Add entry to Pointer translation table.
|
---|
526 | IF (RPTR'=NEWIEN) SET ^TMG("TMGSIPH","NEED RE-XREF",FILENUM)="" ;"Flag for re-cross referencing again later.
|
---|
527 | IF USELOCAL=1 SET ^TMG("TMGSIPH","PT XLAT",FILENUM,RPTR,"L")=1 ;"Signal that local record was used
|
---|
528 | GAFR1 DO UNNEEDPTR^TMGSIPHU(FILENUM,RPTR,NEWIEN,INOUT,.TALLY)
|
---|
529 | IF INOUT="PTIN" KILL ^TMG("TMGSIPH","NEEDED RECORDS","PTIN",FILENUM,RPTR)
|
---|
530 | IF $$NEEDPTIN(FILENUM)!(INOUT="PTIN") DO ;"See if pointers IN are needed
|
---|
531 | . IF LPTR=RPTR QUIT ;"No need for relinking if this record was already local.
|
---|
532 | . DO GETPTIN^TMGSIPH4(JNUM,FILENUM,RPTR)
|
---|
533 | SET RESULT=1
|
---|
534 | GAFRD IF (RESULT'=-1)&(TMGABORT=1) SET RESULT=-2
|
---|
535 | QUIT RESULT
|
---|
536 | ;
|
---|
537 | ;
|
---|
538 | NEEDPTIN(FILENUM) ;
|
---|
539 | ;"Purpose: To have a centralized location for which files should automatically trigger a request
|
---|
540 | ;" for pointers-IN
|
---|
541 | ;"NOTE:
|
---|
542 | NEW RESULT SET RESULT=0
|
---|
543 | IF FILENUM=2 SET RESULT=1
|
---|
544 | ELSE IF (FILENUM=9000001) SET RESULT=1
|
---|
545 | ELSE IF (FILENUM=8925) SET RESULT=1
|
---|
546 | ELSE IF (FILENUM["8925.") SET RESULT=1
|
---|
547 | QUIT RESULT
|
---|
548 | ;
|
---|
549 | ;
|
---|
550 | AUTONEEDED(JNUM) ;
|
---|
551 | ;"Purpose: To automatically get all pointers IN records and also pointers OUT records
|
---|
552 | ;"Input: JNUM -- The job number of the background client process
|
---|
553 | ;"Results: None
|
---|
554 | ;
|
---|
555 | NEW NPTO,NPTI,TALLY
|
---|
556 | AN1 SET NPTO=$$NUMNEEDED^TMGSIPH3(JNUM,"PTOUT")
|
---|
557 | IF NPTO>0 IF $$HANDLNEEDED^TMGSIPH3(JNUM,"PTOUT",1,.TALLY)=-1 GOTO ANDN
|
---|
558 | SET NPTI=$$NUMNEEDED^TMGSIPH3(JNUM,"PTIN")
|
---|
559 | IF (NPTO=0)&(NPTI=0) GOTO ANDN
|
---|
560 | IF NPTI>0 IF $$HANDLNEEDED^TMGSIPH3(JNUM,"PTIN",1,.TALLY)=-1 GOTO ANDN
|
---|
561 | GOTO AN1
|
---|
562 | ANDN IF $DATA(TALLY) WRITE ! ZWR TALLY
|
---|
563 | ELSE WRITE "No records needed auto-downloading.",!
|
---|
564 | DO PressToCont^TMGUSRIF
|
---|
565 | QUIT
|
---|
566 | ;
|
---|
567 | ;
|
---|
568 | HANDLNEEDED(JNUM,INOUT,AUTOMODE,TALLY) ;
|
---|
569 | ;"Purpose: Ask user which records to get from server, then get them and update
|
---|
570 | ;" pointer translation table.
|
---|
571 | ;"Input: JNUM -- The job number of the background client process
|
---|
572 | ;" INOUT -- OPTIONAL -- Default is "PTOUT". Should be "PTIN" or "PTOUT"
|
---|
573 | ;" AUTOMODE -- OPTIONAL default is 0. If 1, then all records are processed without asking.
|
---|
574 | ;" TALLY -- OPTIONAL. PASS BY REFERENCE. An array to show downloads.
|
---|
575 | ;"Results: 1 if OK, -1 if abort.
|
---|
576 | ;
|
---|
577 | NEW GETARRAY,FILENUM,IEN,STIME,TMGCT,SHOWPROG,QUERY,ERROR,TMGMAX
|
---|
578 | SET INOUT=$GET(INOUT) IF INOUT'="PTIN" SET INOUT="PTOUT"
|
---|
579 | NEW TMGABORT SET TMGABORT=0
|
---|
580 | NEW RESULT SET RESULT=1 ;"Default to success
|
---|
581 | HN1 DO ASKNEEDED(JNUM,.GETARRAY,INOUT,.AUTOMODE)
|
---|
582 | IF $DATA(GETARRAY)=0 GOTO HNDN
|
---|
583 | ;"Process JUST ONE record from each file to begin with, to try to minimize user interaction after that.
|
---|
584 | SET FILENUM=0
|
---|
585 | FOR SET FILENUM=$ORDER(GETARRAY(FILENUM)) QUIT:(FILENUM="")!(TMGABORT=1) DO
|
---|
586 | . QUIT:($$DDOK^TMGSIPH1(JNUM,FILENUM)'=1)
|
---|
587 | . QUIT:($$PREPXREF^TMGSIPH1(JNUM,FILENUM)'=1)
|
---|
588 | . SET IEN=$ORDER(GETARRAY(FILENUM,""),-1) QUIT:(IEN="")
|
---|
589 | . NEW TMP SET TMP=$$GETANDFIXREC(JNUM,FILENUM,IEN,"?",.TALLY,INOUT)
|
---|
590 | . IF TMP=-2 SET TMGABORT=1 QUIT
|
---|
591 | . IF TMP=-1 DO HNDLGAFE(FILENUM,IEN,.TMGABORT) QUIT
|
---|
592 | . KILL GETARRAY(FILENUM,IEN) ;"Prevent reprocessing below
|
---|
593 | ;"Now loop through ALL the files and records
|
---|
594 | SET FILENUM=0,SHOWPROG=0
|
---|
595 | FOR SET FILENUM=$ORDER(GETARRAY(FILENUM)) QUIT:(FILENUM="")!(TMGABORT=1) DO
|
---|
596 | . QUIT:($$DDOK^TMGSIPH1(JNUM,FILENUM)'=1)
|
---|
597 | . QUIT:($$PREPXREF^TMGSIPH1(JNUM,FILENUM)'=1)
|
---|
598 | . SET TMGMAX=-1,STIME=$H,TMGCT=1,IEN=""
|
---|
599 | . FOR SET IEN=$ORDER(GETARRAY(FILENUM,IEN),-1) QUIT:(IEN="")!(TMGABORT=1) DO
|
---|
600 | . . IF TMGMAX=-1 SET TMGMAX=IEN
|
---|
601 | . . SET TMGABORT=$$UserAborted^TMGUSRIF() QUIT:(TMGABORT=1)
|
---|
602 | . . SET TMGCT=TMGCT+1
|
---|
603 | . . NEW TMP SET TMP=$$GETANDFIXREC(JNUM,FILENUM,IEN,"?",.TALLY,INOUT)
|
---|
604 | . . IF TMP=-2 SET TMGABORT=1 QUIT
|
---|
605 | . . IF TMP=-1 DO HNDLGAFE(FILENUM,IEN,.TMGABORT) QUIT
|
---|
606 | . . IF (SHOWPROG=0),(($PIECE($H,",",2)-$PIECE(STIME,",",2))>10) SET SHOWPROG=1
|
---|
607 | . . IF SHOWPROG,(TMGCT#10=0) DO
|
---|
608 | . . . WRITE #
|
---|
609 | . . . DO ProgressBar^TMGUSRIF(TMGCT,"Progress: "_TMGCT,0,TMGMAX,70,STIME)
|
---|
610 | . . . IF $DATA(TALLY) WRITE ! ZWR TALLY
|
---|
611 | IF (AUTOMODE=1)&(TMGABORT'=1) GOTO HN1 ;"Loop back and see if more records are now needed.
|
---|
612 | ELSE DO
|
---|
613 | . IF $DATA(TALLY) WRITE ! ZWR TALLY
|
---|
614 | . DO PressToCont^TMGUSRIF
|
---|
615 | HNDN IF TMGABORT SET RESULT=-1
|
---|
616 | QUIT RESULT
|
---|
617 | ;
|
---|
618 | ;
|
---|
619 | HNDLGAFE(FILENUM,RPTR,TMGABORT) ;" Handle GETANDFIXREC error.
|
---|
620 | ;"Input: FILENUM -- The file containing the bad record
|
---|
621 | ;" RPTR -- the IEN of the bad record, on the server
|
---|
622 | ;" TMGABORT -- PASS BY REFERENCE. An OUT parameter to abort.
|
---|
623 | WRITE !,"Error encountered processing FILE ",$$FILENAME^TMGFMUT2(FILENUM)," (#"_FILENUM_"), REC #"_IEN,!
|
---|
624 | NEW % SET %=2
|
---|
625 | WRITE "Mark REC #",IEN," in FILE #",FILENUM," as an invalid server record"
|
---|
626 | DO YN^DICN WRITE !
|
---|
627 | IF %=-1 SET TMGABORT=1
|
---|
628 | IF %=1 DO BADPTR(FILENUM,IEN)
|
---|
629 | HGAFEDN QUIT
|
---|
630 | ;
|
---|
631 | ;
|
---|
632 | BADPTR(FILENUM,RPTR) ;
|
---|
633 | ;"Purpose: To handle a pointer to a bad record on the server.
|
---|
634 | ;"Input: FILENUM -- The file containing the bad record
|
---|
635 | ;" RPTR -- the IEN of the bad record, on the server
|
---|
636 | ;"NOTE: globally-scoped variable TMGABORT may be set.
|
---|
637 | ;"Results: None
|
---|
638 | NEW MENU,USRSLCT
|
---|
639 | LC2 KILL MENU,USRSLCT
|
---|
640 | SET MENU(0)="Pick Option for Handling INVALID server record"
|
---|
641 | NEW IDX SET IDX=1
|
---|
642 | SET MENU(IDX)="Examine who need this bad record"_$char(9)_"Examine",IDX=IDX+1
|
---|
643 | SET MENU(IDX)="Redirect pointer to a different local record"_$char(9)_"RedirToLocal",IDX=IDX+1
|
---|
644 | SET MENU(IDX)="Change pointer to a NULL pointer"_$char(9)_"MakeNull",IDX=IDX+1
|
---|
645 | SET MENU(IDX)="Backup without making any changes"_$char(9)_"Quit",IDX=IDX+1
|
---|
646 | SET MENU(IDX)="Abort"_$char(9)_"Abort",IDX=IDX+1
|
---|
647 | ;
|
---|
648 | WRITE #
|
---|
649 | SET USRSLCT=$$MENU^TMGUSRIF(.MENU,"^")
|
---|
650 | IF USRSLCT="^" GOTO LC3
|
---|
651 | IF USRSLCT=0 SET USRSLCT=""
|
---|
652 | IF USRSLCT="Examine" DO GOTO:(TMGABORT=1) LC3 GOTO LC2
|
---|
653 | . NEW ARRAY SET ARRAY(FILENUM,RPTR)=""
|
---|
654 | . IF $$SHOWNEED^TMGSIPH5(JNUM,.ARRAY)=-1 SET TMGABORT=1 QUIT
|
---|
655 | IF USRSLCT="RedirToLocal" DO GOTO LC3
|
---|
656 | . NEW DIC,X,Y
|
---|
657 | . SET DIC=FILENUM,DIC(0)="MAEQ"
|
---|
658 | . DO ^DIC WRITE !
|
---|
659 | . IF +Y'>0 QUIT
|
---|
660 | . SET ^TMG("TMGSIPH","PT XLAT",FILENUM,RPTR)=+Y
|
---|
661 | IF USRSLCT="MakeNull" DO GOTO LC3
|
---|
662 | . SET ^TMG("TMGSIPH","PT XLAT",FILENUM,RPTR)=0
|
---|
663 | IF USRSLCT="Quit" GOTO LC3
|
---|
664 | IF USRSLCT="Abort" SET TMGABORT=1 GOTO LC3
|
---|
665 | GOTO LC2
|
---|
666 | LC3 QUIT
|
---|
667 | ;
|
---|
668 | ;
|
---|
669 | MAP2LOCAL(JNUM,INOUT) ;
|
---|
670 | ;"Purpose: Ask user which records to map to local records
|
---|
671 | ;"Input: JNUM -- The job number of the background client process
|
---|
672 | ;" INOUT -- OPTIONAL -- Default is "PTOUT". Should be "PTIN" or "PTOUT"
|
---|
673 | ;"Results: None
|
---|
674 | ;
|
---|
675 | NEW GETARRAY,FILENUM,IEN,STIME,TMGCT,SHOWPROG,TALLY,QUERY,ERROR,REPLY
|
---|
676 | SET INOUT=$GET(INOUT) IF INOUT'="PTIN" SET INOUT="PTOUT"
|
---|
677 | NEW AUTOMODE SET AUTOMODE=0
|
---|
678 | SET AUTOMODE("MAP MODE")=1
|
---|
679 | DO ASKNEEDED(JNUM,.GETARRAY,INOUT,.AUTOMODE)
|
---|
680 | SET FILENUM=0
|
---|
681 | SET STIME=$H
|
---|
682 | SET TMGCT=1,SHOWPROG=0
|
---|
683 | NEW TMGABORT SET TMGABORT=0
|
---|
684 | FOR SET FILENUM=$ORDER(GETARRAY(FILENUM)) QUIT:(FILENUM="")!(TMGABORT=1) DO
|
---|
685 | . QUIT:($$DDOK^TMGSIPH1(JNUM,FILENUM)'=1)
|
---|
686 | . QUIT:($$PREPXREF^TMGSIPH1(JNUM,FILENUM)'=1)
|
---|
687 | . NEW TMGMAX SET TMGMAX=-1,TMGCT=1,STIME=$H
|
---|
688 | . NEW IEN SET IEN=""
|
---|
689 | . FOR SET IEN=$ORDER(GETARRAY(FILENUM,IEN),-1) QUIT:(IEN="")!(TMGABORT=1) DO
|
---|
690 | . . IF TMGMAX=-1 SET TMGMAX=IEN
|
---|
691 | . . SET TMGABORT=$$UserAborted^TMGUSRIF() QUIT:(TMGABORT=1)
|
---|
692 | . . SET TMGCT=TMGCT+1
|
---|
693 | . . IF (SHOWPROG=0),(($PIECE($H,",",2)-$PIECE(STIME,",",2))>15) SET SHOWPROG=1
|
---|
694 | . . IF SHOWPROG,(TMGCT#2=0) DO
|
---|
695 | . . . WRITE #
|
---|
696 | . . . DO ProgressBar^TMGUSRIF(TMGCT,"Progress in "_FILENUM_": "_TMGCT,0,TMGMAX,70,STIME)
|
---|
697 | . . . IF $DATA(TALLY) WRITE ! ZWR TALLY
|
---|
698 | . . NEW NEWIEN SET NEWIEN=0
|
---|
699 | . . IF $$CHCK4SIM(FILENUM,,.NEWIEN,$$GET01FLD(JNUM,FILENUM,IEN))=0 QUIT ;"Is a prior similar record already is on client?
|
---|
700 | . . SET ^TMG("TMGSIPH","PT XLAT",FILENUM,IEN)=NEWIEN ;"Add entry to Pointer translation table.
|
---|
701 | . . DO UNNEEDPTR^TMGSIPHU(FILENUM,IEN,NEWIEN,INOUT,.TALLY)
|
---|
702 | . . IF INOUT="PTIN" KILL ^TMG("TMGSIPH","NEEDED RECORDS","PTIN",FILENUM,IEN)
|
---|
703 | . . KILL GETARRAY(FILENUM,IEN)
|
---|
704 | SET RESULT=1
|
---|
705 | IF $DATA(GETARRAY) DO
|
---|
706 | . NEW TMGARRAY,TMGSEL,IEN
|
---|
707 | . WRITE #
|
---|
708 | . WRITE "One or more records could not be automatically matched to a local record.",!
|
---|
709 | . WRITE "Select records to manually looked up.",!
|
---|
710 | . DO PRESSTOCONT^TMGUSRIF QUIT:$GET(TMGPTCABORT)=1
|
---|
711 | . FOR SET FILENUM=$ORDER(GETARRAY(FILENUM)) QUIT:(FILENUM="") DO
|
---|
712 | . . NEW FNAME SET FNAME=$PIECE($GET(^DIC(FILENUM,0)),"^",1)
|
---|
713 | . . SET IEN=""
|
---|
714 | . . FOR SET IEN=$ORDER(GETARRAY(FILENUM,IEN),-1) QUIT:(IEN="") DO
|
---|
715 | . . . NEW DISPSTR SET DISPSTR="Get records from REMOTE file #"_FILENUM_" ("
|
---|
716 | . . . SET DISPSTR="File: "_FNAME_"; Record: "_$$GET01FLD(JNUM,FILENUM,IEN)
|
---|
717 | . . . SET TMGARRAY(DISPSTR)=FILENUM_"^"_IEN
|
---|
718 | . NEW HEADER
|
---|
719 | . SET HEADER="Select Record(s) in file "_FILENUM_" to MAP to local records. Press <ESC><ESC> when Done."
|
---|
720 | . DO Selector^TMGUSRIF("TMGARRAY","TMGSEL",HEADER)
|
---|
721 | . IF $DATA(TMGSEL)=0 QUIT
|
---|
722 | . NEW TMGI SET TMGI=""
|
---|
723 | . FOR SET TMGI=$ORDER(TMGSEL(TMGI)) QUIT:(TMGI="")!TMGABORT DO
|
---|
724 | . . NEW ENTRY SET ENTRY=$GET(TMGSEL(TMGI))
|
---|
725 | . . SET FILENUM=+ENTRY QUIT:FILENUM'>0
|
---|
726 | . . SET IEN=$PIECE(ENTRY,"^",2)
|
---|
727 | . . NEW X,Y,DIC
|
---|
728 | . . SET DIC=FILENUM,DIC(0)="MAEQ"
|
---|
729 | . . SET DIC("A")="Lookup a match for ["_$$GET01FLD(JNUM,FILENUM,IEN)_"]: "
|
---|
730 | . . NEW DONE SET DONE=0
|
---|
731 | . . FOR DO QUIT:(+Y>0)!(DONE)!TMGABORT
|
---|
732 | . . . NEW %
|
---|
733 | . . . DO ^DIC WRITE !
|
---|
734 | . . . IF +Y>0 DO QUIT:TMGABORT
|
---|
735 | . . . . SET %=1
|
---|
736 | . . . . WRITE "Use [",$PIECE(Y,"^",2),"]" DO YN^DICN WRITE !
|
---|
737 | . . . . IF %=-1 SET TMGABORT=1 QUIT
|
---|
738 | . . . . IF %=2 SET Y=0 QUIT
|
---|
739 | . . . IF +Y>0 QUIT
|
---|
740 | . . . SET %=1
|
---|
741 | . . . WRITE "Try another lookup" DO YN^DICN WRITE !
|
---|
742 | . . . IF %=-1 SET TMGABORT=1 QUIT
|
---|
743 | . . . IF %=2 SET DONE=1 QUIT
|
---|
744 | . . IF +Y>0 DO
|
---|
745 | . . . SET ^TMG("TMGSIPH","PT XLAT",FILENUM,IEN)=+Y ;"Add entry to Pointer translation table.
|
---|
746 | . . . DO UNNEEDPTR^TMGSIPHU(FILENUM,IEN,+Y,INOUT,.TALLY)
|
---|
747 | . . . IF INOUT="PTIN" KILL ^TMG("TMGSIPH","NEEDED RECORDS","PTIN",FILENUM,IEN)
|
---|
748 | . . . KILL GETARRAY(FILENUM,IEN)
|
---|
749 | . . . SET TALLY("MANUALLY MATCHED TO LOCAL")=+$GET(TALLY("MANUALLY MATCHED TO LOCAL"))+1
|
---|
750 | IF $DATA(TALLY) WRITE ! ZWR TALLY
|
---|
751 | DO PRESSTOCONT^TMGUSRIF
|
---|
752 | QUIT
|
---|
753 | ;
|
---|
754 | ;
|
---|
755 | GETFILE |
---|