| 1 | TMGSIPH0 ;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 |  ;"----===== SERVER-SIDE CODE ====------
 | 
|---|
| 6 |  ;"Kevin Toppenberg MD
 | 
|---|
| 7 |  ;"GNU General Public License (GPL) applies
 | 
|---|
| 8 |  ;"11/27/09
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  ;"=======================================================================
 | 
|---|
| 11 |  ;" API -- Public Functions.
 | 
|---|
| 12 |  ;"=======================================================================
 | 
|---|
| 13 |  ;"HANDLMSG(MESSAGE) -- A message handler for communication between VistA instances.
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  ;"=======================================================================
 | 
|---|
| 16 |  ;" API -- Private Functions.
 | 
|---|
| 17 |  ;"=======================================================================
 | 
|---|
| 18 |  ;"HANDLGET(REF) --A handler for GET command between VistA instances.  Get a ^global node
 | 
|---|
| 19 |  ;"HANDLGDD(FILENUM) -- Return Data Dictionary information about specified file.
 | 
|---|
| 20 |  ;"GETSUBDD(SUBFILENUM) -- Return DD information about subfiles (and sub-subfiles)
 | 
|---|
| 21 |  ;"HANDLORD(REF) --A handler for ORDREF command between VistA instances. Will get ^Global node that is $ORDER'd after REF
 | 
|---|
| 22 |  ;"HANDLNRS(FILENUM) -- Return the highest record number in given file.
 | 
|---|
| 23 |  ;"HANDGRXR(PARAMS) -- Return one record, and associated cross-reference entries
 | 
|---|
| 24 |  ;"SENDFLDS(FILENUM,IEN) -- send any .01 fields VALUES of any pointers OUT
 | 
|---|
| 25 |  ;"HANDLDIC(PARAMS) -- Do a ^DIC lookup in file for value.
 | 
|---|
| 26 |  ;"
 | 
|---|
| 27 |  ;"=======================================================================
 | 
|---|
| 28 |  ;"Dependancies
 | 
|---|
| 29 |  ;"=======================================================================
 | 
|---|
| 30 |  ;"DILF, XLFSTR, TMGSIPHU, TMGKERN2, TMGFMUT2
 | 
|---|
| 31 |  ;"=======================================================================
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 |  ;"=============================================================
 | 
|---|
| 34 |  ;" Below will be core of server-side request handler.
 | 
|---|
| 35 |  ;"=============================================================
 | 
|---|
| 36 | HANDLMSG(MESSAGE) ;
 | 
|---|
| 37 |         ;"Purpose: A message handler for communication between VistA instances.
 | 
|---|
| 38 |         ;"Input MESSAGE -- This is the message send from the client, who will be asking for
 | 
|---|
| 39 |         ;"                 information and records etc from this instance.
 | 
|---|
| 40 |         ;" Format:  'Command|parameters'
 | 
|---|
| 41 |         ;" -----------------------
 | 
|---|
| 42 |         ;" GET|REF                 -- Get a ^global node
 | 
|---|
| 43 |         ;" GET DD|FILENUM          -- return Data Dictionary information about specified file.
 | 
|---|
| 44 |         ;" ORDREF|REF              -- Get ^Global node that is $ORDER'd after REF
 | 
|---|
| 45 |         ;" NUMRECS|FILENUM         -- Return the highest record number in given file
 | 
|---|
| 46 |         ;" PT XREF|FILENUM         -- Prepair PT XREF for all records pointing INTO specified file.
 | 
|---|
| 47 |         ;" WIPE PT XREF|           -- Delete the last run of PT XREF, so it can be refreshened.
 | 
|---|
| 48 |         ;" PREP XREFS|FILENUM^[1]  -- Make a xref of cross-references (a backward xref)
 | 
|---|
| 49 |         ;" GET REF & FILE XREF|REF^FILENUM^IENS -- Return one reference, and associated FILENUM cross-reference entries
 | 
|---|
| 50 |         ;" GET RECORD & XREF|FILENUM^IEN -- Return one record, and associated cross-reference entries
 | 
|---|
| 51 |         ;" GET PTRS IN|FILENUM^IEN -- Get a listing of all pointers INTO requested record
 | 
|---|
| 52 |         ;" DO DIC|FILENUM^VALUE    -- Do a ^DIC lookup in file for value.
 | 
|---|
| 53 |         ;" GET XREF AGE            -- Get age of server-side PT xrefs etc, in HOURS
 | 
|---|
| 54 |         ;" GET .01 FLD|FILENUM^IEN -- Return INTERNAL format of .01 field.  Doesn't support subfiles.
 | 
|---|
| 55 |         ;" DUMP REC|FILENUM^IENS^SHOWEMPTY -- Display dump of server record.
 | 
|---|
| 56 |         ;" GET IEN LIST|FILENUM    -- Get a listing of all records (IEN's) in specified file.
 | 
|---|
| 57 |         ;" GET IEN HDR|FILENUM     -- Get Last IEN,HighestIEN from file header.
 | 
|---|
| 58 |         ;" -----------------------
 | 
|---|
| 59 |         ;"Results: None
 | 
|---|
| 60 |         ;
 | 
|---|
| 61 |         NEW CMD SET CMD=$$UP^XLFSTR($PIECE(MESSAGE,"|",1))
 | 
|---|
| 62 |         SET CMD=$$TRIM^XLFSTR(CMD)
 | 
|---|
| 63 |         NEW PARAMS SET PARAMS=$$TRIM^XLFSTR($PIECE(MESSAGE,"|",2,99))
 | 
|---|
| 64 |         DO DEBUGMSG^TMGKERN2("In HANDLMSG. CMD="_CMD_" & PARAMS="_PARAMS)
 | 
|---|
| 65 |         DO
 | 
|---|
| 66 |         . NEW $ETRAP SET $ETRAP="write ""#ERROR TRAPPED#  "",$ZSTATUS,! set $etrap="""",$ecode="""""
 | 
|---|
| 67 |         . IF CMD="GET" DO HANDLGET(PARAMS) QUIT
 | 
|---|
| 68 |         . IF CMD="GET DD" DO HANDLGDD(PARAMS) QUIT
 | 
|---|
| 69 |         . IF CMD="ORDREF" DO HANDLORD(PARAMS) QUIT
 | 
|---|
| 70 |         . IF CMD="NUMRECS" DO HANDLNRS(PARAMS) QUIT
 | 
|---|
| 71 |         . IF CMD="PT XREF" DO HNDLPTIX^TMGSIPH2(PARAMS) QUIT
 | 
|---|
| 72 |         . IF CMD="WIPE PT XREF" DO KILLPTIX^TMGFMUT2 QUIT
 | 
|---|
| 73 |         . IF CMD="GET PTRS IN" DO GETPTIN^TMGSIPH2(PARAMS) QUIT
 | 
|---|
| 74 |         . IF CMD="PREP XREFS" DO BAKXREF^TMGSIPH2(PARAMS) QUIT
 | 
|---|
| 75 |         . IF CMD="GET RECORD & XREF" DO HANDGRXR(PARAMS) QUIT
 | 
|---|
| 76 |         . IF CMD="GET REF & FILE XREF" DO HANDGRFX(PARAMS) QUIT
 | 
|---|
| 77 |         . IF CMD="DO DIC" DO HANDLDIC(PARAMS) QUIT
 | 
|---|
| 78 |         . IF CMD="GET XREF AGE" DO GETXRAGE^TMGSIPH2 QUIT
 | 
|---|
| 79 |         . IF CMD="GET .01 FLD" DO GET01FLD^TMGSIPH2(PARAMS) QUIT
 | 
|---|
| 80 |         . IF CMD="DUMP REC" DO DUMPREC(PARAMS) QUIT
 | 
|---|
| 81 |         . IF CMD="GET IEN LIST" DO HANDIENL^TMGSIPH2(PARAMS) QUIT
 | 
|---|
| 82 |         . IF CMD="GET IEN HDR" DO HANDLIENHDR^TMGSIPH2(PARAMS) QUIT
 | 
|---|
| 83 |         . ELSE  DO
 | 
|---|
| 84 |         . . DO SEND^TMGKERN2("Got: ["_MESSAGE_"].  Server is $JOB="_$JOB)
 | 
|---|
| 85 |         QUIT
 | 
|---|
| 86 |  ;"=============================================================
 | 
|---|
| 87 |  ;"=============================================================
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 | HANDLGET(REF) ;
 | 
|---|
| 90 |         ;"Purpose: A handler for GET command between VistA instances.  Get a ^global node
 | 
|---|
| 91 |         ;"Input --REF -- reference to a global.  May be in Open or Closed format
 | 
|---|
| 92 |         ;"Results: none
 | 
|---|
| 93 |         ;"Output: Will write output to current device (should be socket to other instance)
 | 
|---|
| 94 |         ;
 | 
|---|
| 95 |         NEW OREF SET OREF=$$OREF^DILF(REF)
 | 
|---|
| 96 |         NEW LEN SET LEN=$LENGTH(OREF)
 | 
|---|
| 97 |         SET REF=$$CREF^DILF(REF)
 | 
|---|
| 98 |         NEW DONE SET DONE=0
 | 
|---|
| 99 |         FOR  DO  QUIT:(DONE>0)
 | 
|---|
| 100 |         . IF $DATA(@REF)#10 DO
 | 
|---|
| 101 |         . . DO SEND^TMGKERN2(REF_"=")
 | 
|---|
| 102 |         . . DO SEND^TMGKERN2("="_$GET(@REF))
 | 
|---|
| 103 |         . SET REF=$QUERY(@REF)
 | 
|---|
| 104 |         . IF (REF="")!($QSUBSCRIPT(REF,1)="") SET DONE=1 QUIT
 | 
|---|
| 105 |         . IF $EXTRACT(REF,1,LEN)'=OREF SET DONE=1 QUIT
 | 
|---|
| 106 |         QUIT
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 | HANDLGDD(FILENUM) ; "Handle Get DD
 | 
|---|
| 110 |         ;"Purpose: to return Data Dictionary information about specified file.
 | 
|---|
| 111 |         SET FILENUM=+$GET(FILENUM)
 | 
|---|
| 112 |         NEW REF SET REF=$NAME(^DD(FILENUM))
 | 
|---|
| 113 |         DO HANDLGET(REF)
 | 
|---|
| 114 |         SET REF=$NAME(^DIC(FILENUM))
 | 
|---|
| 115 |         DO HANDLGET(REF)
 | 
|---|
| 116 |         ;"Get nodes from INDEX file
 | 
|---|
| 117 |         NEW IDX SET IDX=""
 | 
|---|
| 118 |         FOR  SET IDX=$ORDER(^DD("IX","B",FILENUM,IDX)) QUIT:(IDX="")  DO
 | 
|---|
| 119 |         . SET REF=$NAME(^DD("IX",IDX))
 | 
|---|
| 120 |         . DO HANDLGET(REF)
 | 
|---|
| 121 |         NEW FLD SET FLD=0
 | 
|---|
| 122 |         FOR  SET FLD=$ORDER(^DD(FILENUM,FLD)) QUIT:(+FLD'>0)  DO
 | 
|---|
| 123 |         . NEW PT SET PT=+$PIECE($GET(^DD(FILENUM,FLD,0)),"^",2)
 | 
|---|
| 124 |         . QUIT:(PT'>0)
 | 
|---|
| 125 |         . IF $DATA(^DD(PT,0,"UP")) DO GETSUBDD(PT)
 | 
|---|
| 126 |         QUIT
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | GETSUBDD(SUBFILENUM)
 | 
|---|
| 130 |         ;"Purpose: Return DD information about subfiles (and sub-subfiles)
 | 
|---|
| 131 |         NEW REF SET REF=$NAME(^DD(SUBFILENUM))
 | 
|---|
| 132 |         DO HANDLGET(REF)
 | 
|---|
| 133 |         NEW PT SET PT=+$PIECE($GET(^DD(SUBFILENUM,0)),"^",2)
 | 
|---|
| 134 |         QUIT:(PT'>0)
 | 
|---|
| 135 |         IF $DATA(^DD(PT,0,"UP")) DO GETSUBDD(PT)
 | 
|---|
| 136 |         QUIT
 | 
|---|
| 137 |  ;
 | 
|---|
| 138 |  ;
 | 
|---|
| 139 | HANDLORD(REF) ;
 | 
|---|
| 140 |         ;"Purpose: A handler for ORDREF command between VistA instances.
 | 
|---|
| 141 |         ;"         Will get ^Global node that is $ORDER'd after REF
 | 
|---|
| 142 |         ;"              e.g.  ^TIU(8925,"")  --> returns node ^TIU(8925,0,
 | 
|---|
| 143 |         ;"                    ^TIU(8925,     --> returns node ^TIU(8925.1,
 | 
|---|
| 144 |         ;"Input --REF -- reference to a global.  May be in Open or Closed format
 | 
|---|
| 145 |         ;"Results: none
 | 
|---|
| 146 |         ;"Output: Will write output to current device (should be socket to other VistA instance)
 | 
|---|
| 147 |         ;"
 | 
|---|
| 148 |         NEW CREF SET CREF=$$CREF^DILF(REF)
 | 
|---|
| 149 |         SET REF=$$ORDREF^TMGSIPHU(CREF)
 | 
|---|
| 150 |         IF REF'="" DO HANDLGET(REF)
 | 
|---|
| 151 |         QUIT
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 | HANDLNRS(FILENUM) ;
 | 
|---|
| 155 |         ;"Purpose: Return the highest record number in given file.
 | 
|---|
| 156 |         ;"Input: FILENUM -- The fileman number of the file to return info for.
 | 
|---|
| 157 |         ;"Results: None
 | 
|---|
| 158 |         DO SEND^TMGKERN2($$GETNUMREC^TMGSIPHU(FILENUM))
 | 
|---|
| 159 |         QUIT
 | 
|---|
| 160 |  ;
 | 
|---|
| 161 |  ;
 | 
|---|
| 162 | HANDGRFX(PARAMS) ;" Handler for GET REF & FILE XREF|REF^FILENUM^IENS
 | 
|---|
| 163 |         ;"Purpose: Return one reference, and associated FILENUM cross-reference entries
 | 
|---|
| 164 |         ;"         Note: It is anticipated that this will be used to get subfile entries.
 | 
|---|
| 165 |         ;"Input: PARAMS :  REF^FILENUM^IENS
 | 
|---|
| 166 |         ;"              REF -- should be in OPEN format (ending in a ',')
 | 
|---|
| 167 |         ;"              FILENUM -- the subfile number.
 | 
|---|
| 168 |         ;"              IENS -- A standard IENS string
 | 
|---|
| 169 |         ;"Output: Will write output to current device (should be socket).  Format
 | 
|---|
| 170 |         ;"        <Ref>=
 | 
|---|
| 171 |         ;"        =<Value>
 | 
|---|
| 172 |         ;"        <Ref>=
 | 
|---|
| 173 |         ;"        =<Value>
 | 
|---|
| 174 |         ;"       ...
 | 
|---|
| 175 |         ;"       %PTRSOUT%^PointedToFile^IEN^FIELD_VALUE
 | 
|---|
| 176 |         ;"       %PTRSOUT%^PointedToFile^IEN^FIELD_VALUE
 | 
|---|
| 177 |         ;"       ...
 | 
|---|
| 178 |         ;"Result: none
 | 
|---|
| 179 |         ;"NOTE: This function will assume that an xref of all the cross-references has
 | 
|---|
| 180 |         ;"      already been set up by calling BAKXREF^TMGSIPH1(FILENUM).  This can be
 | 
|---|
| 181 |         ;"      triggered on the client side by calling QUERY="PREP XREFS|<filenumber>"
 | 
|---|
| 182 |         SET PARAMS=$GET(PARAMS)
 | 
|---|
| 183 |         NEW GREF SET GREF="^"_$PIECE(PARAMS,"^",2)  ;"Ref itself has a ^ in it.
 | 
|---|
| 184 |         NEW FILENUM SET FILENUM=$PIECE(PARAMS,"^",3)
 | 
|---|
| 185 |         NEW IENS SET IENS=$PIECE(PARAMS,"^",4)
 | 
|---|
| 186 |         DO HANDLGET(GREF) ;
 | 
|---|
| 187 |         ;"Now send XRef entries for IEN.
 | 
|---|
| 188 |         DO BAKXREF^TMGSIPH2(FILENUM_"^1") ;"organize XRefs if needed, keeping current orangization array
 | 
|---|
| 189 |         NEW REF SET REF=""
 | 
|---|
| 190 |         FOR  SET REF=$ORDER(^TMG("PTXREF","XREFS",FILENUM,IENS,REF)) QUIT:(REF="")  DO
 | 
|---|
| 191 |         . DO SEND^TMGKERN2(REF_"=")
 | 
|---|
| 192 |         . DO SEND^TMGKERN2("="_$GET(^TMG("PTXREF","XREFS",FILENUM,IENS,REF)))
 | 
|---|
| 193 |         DO SENDFLDS(FILENUM,IENS) ;"Send values of .01 fields for all pointers OUT from record
 | 
|---|
| 194 |         QUIT
 | 
|---|
| 195 |  ;
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 | HANDGRXR(PARAMS) ;
 | 
|---|
| 198 |         ;"Purpose: Return one record, and associated cross-reference entries
 | 
|---|
| 199 |         ;"Input: PARAMS :  Filenumber^IEN
 | 
|---|
| 200 |         ;"Output: Will write output to current device (should be socket).  Format
 | 
|---|
| 201 |         ;"        <Ref>=
 | 
|---|
| 202 |         ;"        =<Value>
 | 
|---|
| 203 |         ;"        <Ref>=
 | 
|---|
| 204 |         ;"        =<Value>
 | 
|---|
| 205 |         ;"       ...
 | 
|---|
| 206 |         ;"       %PTRSOUT%^PointedToFile^IEN^FIELD_VALUE
 | 
|---|
| 207 |         ;"       %PTRSOUT%^PointedToFile^IEN^FIELD_VALUE
 | 
|---|
| 208 |         ;"       ...
 | 
|---|
| 209 |         ;"Result: none
 | 
|---|
| 210 |         ;"NOTE: This function will assume that an xref of all the cross-references has
 | 
|---|
| 211 |         ;"      already been set up by calling BAKXREF^TMGSIPH1(FILENUM).  This can be
 | 
|---|
| 212 |         ;"      triggered on the client side by calling QUERY="PREP XREFS|<filenumber>"
 | 
|---|
| 213 |         ;
 | 
|---|
| 214 |         NEW FILENUM,IEN
 | 
|---|
| 215 |         SET PARAMS=$GET(PARAMS)
 | 
|---|
| 216 |         SET FILENUM=+PARAMS
 | 
|---|
| 217 |         SET IEN=$PIECE(PARAMS,"^",2)
 | 
|---|
| 218 |         IF (FILENUM'>0)!(IEN'>0) QUIT
 | 
|---|
| 219 |         NEW GREF SET GREF=$GET(^DIC(FILENUM,0,"GL"))
 | 
|---|
| 220 |         IF GREF="" QUIT
 | 
|---|
| 221 |         DO HANDLGET(GREF_IEN_",") ;
 | 
|---|
| 222 |         ;"Now send XRef entries for IEN.
 | 
|---|
| 223 |         NEW REF SET REF=""
 | 
|---|
| 224 |         DO BAKXREF^TMGSIPH2(FILENUM_"^1") ;"organize XRefs if needed, keeping current orangization array
 | 
|---|
| 225 |         FOR  SET REF=$ORDER(^TMG("PTXREF","XREFS",FILENUM,IEN,REF)) QUIT:(REF="")  DO
 | 
|---|
| 226 |         . DO SEND^TMGKERN2(REF_"=")
 | 
|---|
| 227 |         . DO SEND^TMGKERN2("="_$GET(^TMG("PTXREF","XREFS",FILENUM,IEN,REF)))
 | 
|---|
| 228 |         DO SENDFLDS(FILENUM,IEN) ;"Send values of .01 fields for all pointers OUT from record
 | 
|---|
| 229 | HGXDN   QUIT
 | 
|---|
| 230 |  ;
 | 
|---|
| 231 |  ;
 | 
|---|
| 232 | SENDFLDS(FILENUM,IEN) ;
 | 
|---|
| 233 |         ;"Purpose to send any .01 fields VALUES of any pointers OUT
 | 
|---|
| 234 |         ;"Input: FILENUM -- the file containing the record to be scanned
 | 
|---|
| 235 |         ;"       IEN -- The record number being scanned.
 | 
|---|
| 236 |         ;"Results: none
 | 
|---|
| 237 |         ;"Output: Values will be sent to client via SEND^TMGKERN2.  Format as follows:
 | 
|---|
| 238 |         ;"           %PTRSOUT%^PointedToFile^IEN^FIELD_VALUE
 | 
|---|
| 239 |         ;"           %PTRSOUT%^PointedToFile^IEN^FIELD_VALUE
 | 
|---|
| 240 |         NEW TALLY
 | 
|---|
| 241 |         KILL ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM)
 | 
|---|
| 242 |         IF $$REAL1PTOUT^TMGSIPH1(FILENUM,IEN,.TALLY)=1 DO
 | 
|---|
| 243 |         . NEW REF SET REF=""
 | 
|---|
| 244 |         . FOR  SET REF=$ORDER(^TMG("TMGSIPH","DD",FILENUM,"PTR OUT",REF)) QUIT:(REF="")  DO
 | 
|---|
| 245 |         . . NEW INFO SET INFO=""
 | 
|---|
| 246 |         . . FOR  SET INFO=$ORDER(^TMG("TMGSIPH","DD",FILENUM,"PTR OUT",REF,INFO)) QUIT:(INFO="")  DO
 | 
|---|
| 247 |         . . . NEW PCE SET PCE=+INFO
 | 
|---|
| 248 |         . . . NEW P2FILE SET P2FILE=$PIECE(INFO,"^",2)
 | 
|---|
| 249 |         . . . NEW P2REF SET P2REF=$PIECE(INFO,"^",3)
 | 
|---|
| 250 |         . . . NEW IENDEPTH SET IENDEPTH=$PIECE(INFO,"^",4)
 | 
|---|
| 251 |         . . . NEW ISVIRT SET ISVIRT=($PIECE(INFO,"^",5)="V")
 | 
|---|
| 252 |         . . . NEW TEMP SET TEMP=IEN KILL IEN SET IEN=TEMP  ;"kill subnodes
 | 
|---|
| 253 |         . . . NEW OKCOMBO
 | 
|---|
| 254 |         . . . FOR  DO  QUIT:(OKCOMBO=0)
 | 
|---|
| 255 |         . . . . SET OKCOMBO=$$IENCOMBO^TMGFMUT2(REF,IENDEPTH,.IEN) ;"Sets up IEN(n).. needed for @REF
 | 
|---|
| 256 |         . . . . QUIT:(OKCOMBO=0)
 | 
|---|
| 257 |         . . . . NEW PT SET PT=$PIECE($GET(@REF),"^",PCE)
 | 
|---|
| 258 |         . . . . IF ISVIRT,$PIECE(PT,";",2)'=P2REF QUIT ;"Loop to handle PTR with different INFO entry (V-Ptrs stored as IEN;OREF)
 | 
|---|
| 259 |         . . . . SET PT=+PT QUIT:(PT'>0)
 | 
|---|
| 260 |         . . . . NEW VALUE SET VALUE=$$FLD01^TMGSIPH2(P2FILE_"^"_PT) ;
 | 
|---|
| 261 |         . . . . DO SEND^TMGKERN2("%PTRSOUT%^"_P2FILE_"^"_PT_"^"_VALUE)
 | 
|---|
| 262 |         . . . KILL IEN("DONE"),IEN("INIT")
 | 
|---|
| 263 |         ;"KILL ^TMG("TMGSIPH","UNRESOLVED",FILENUM)
 | 
|---|
| 264 |         KILL ^TMG("TMGSIPH","NEEDED RECORDS","PTOUT",FILENUM)
 | 
|---|
| 265 |         KILL ^TMG("TMGSIPH","DD",FILENUM)
 | 
|---|
| 266 |         QUIT
 | 
|---|
| 267 |  ;
 | 
|---|
| 268 |  ;
 | 
|---|
| 269 | HANDLDIC(PARAMS) ;
 | 
|---|
| 270 |         ;"Purpose: Do a ^DIC lookup in file for value.
 | 
|---|
| 271 |         ;"Input: Params:  this is FILENUM^LOOKUPVALUE
 | 
|---|
| 272 |         ;"Result: Will send back value of Y to client
 | 
|---|
| 273 |         SET PARAMS=$GET(PARAMS)
 | 
|---|
| 274 |         NEW DIC SET DIC=+$PIECE(PARAMS,"^",1)
 | 
|---|
| 275 |         NEW Y,X SET X=$PIECE(PARAMS,"^",2)
 | 
|---|
| 276 |         SET DIC(0)="M"
 | 
|---|
| 277 |         DO ^DIC
 | 
|---|
| 278 |         DO SEND^TMGKERN2(Y)
 | 
|---|
| 279 |         QUIT
 | 
|---|
| 280 |  ;
 | 
|---|
| 281 |  ;
 | 
|---|
| 282 | DUMPREC(PARAMS) ;
 | 
|---|
| 283 |         ;"Purpose: To do a record dump of a server-side record, sending output back to client
 | 
|---|
| 284 |         ;"Input: Params -- FILENUM^IENS^SHOWEMPTY
 | 
|---|
| 285 |         NEW FILENUM,IENS,SHOWEMPTY
 | 
|---|
| 286 |         SET PARAMS=$GET(PARAMS)
 | 
|---|
| 287 |         SET FILENUM=+PARAMS
 | 
|---|
| 288 |         SET IENS=$PIECE(PARAMS,"^",2)
 | 
|---|
| 289 |         IF (FILENUM'>0)!(IENS'>0) QUIT
 | 
|---|
| 290 |         SET SHOWEMPTY=+$PIECE(PARAMS,"^",3)
 | 
|---|
| 291 |         NEW OPTION
 | 
|---|
| 292 |         SET OPTION("WRITE REC FN")="WRLABEL^TMGSIPH0"
 | 
|---|
| 293 |         SET OPTION("WRITE FLD FN")="WFLABEL^TMGSIPH0"
 | 
|---|
| 294 |         SET OPTION("WRITE LINE FN")="WLINE^TMGSIPH0"
 | 
|---|
| 295 |         SET OPTION("WRITE WP LINE")="WWPLINE^TMGSIPH0"
 | 
|---|
| 296 |         NEW TMGDUMPS ;"Will be used with global scope
 | 
|---|
| 297 |         DO DumpRec2^TMGDEBUG(FILENUM,IENS,SHOWEMPTY,,.OPTION)
 | 
|---|
| 298 |         QUIT
 | 
|---|
| 299 |  ;
 | 
|---|
| 300 |  ;
 | 
|---|
| 301 | WRLABEL(IEN,ENDER)
 | 
|---|
| 302 |         ;"Purpose: To actually write out labels for record starting and ending.
 | 
|---|
| 303 |         ;"Input: IEN -- the IEN (record number) of the record
 | 
|---|
| 304 |         ;"       ENDER -- OPTIONAL if 1, then ends field.
 | 
|---|
| 305 |         ;"Note: also uses globally scoped variable TMGDUMPS
 | 
|---|
| 306 |         ;"Results: none.
 | 
|---|
| 307 |         ;"Note: Used by DumpRec2 above, with callback from TMGXMLE2
 | 
|---|
| 308 |         SET TMGDUMPS=$GET(TMGDUMPS)
 | 
|---|
| 309 |         IF +$GET(ENDER)>0 DO
 | 
|---|
| 310 |         . IF TMGDUMPS="" SET TMGDUMPS="."
 | 
|---|
| 311 |         ELSE  SET TMGDUMPS=TMGDUMPS_"     Multiple Entry #"_IEN
 | 
|---|
| 312 |         DO SEND^TMGKERN2(TMGDUMPS)
 | 
|---|
| 313 |         SET TMGDUMPS=""
 | 
|---|
| 314 |         QUIT
 | 
|---|
| 315 |  ;
 | 
|---|
| 316 | WFLABEL(LABEL,FIELD,TYPE,ENDER)
 | 
|---|
| 317 |         ;"Purpose: This is the code that actually does writing of labels etc for output
 | 
|---|
| 318 |         ;"      This is a CUSTOM CALL BACK function called by Write1Fld^TMGXMLE2
 | 
|---|
| 319 |         ;"Input: LABEL -- OPTIONAL -- Name of label, to write after  'label='
 | 
|---|
| 320 |         ;"       FIELD -- OPTIONAL -- Name of field, to write after  'id='
 | 
|---|
| 321 |         ;"       TYPE -- OPTIONAL -- TYPEof field, to write after  'type='
 | 
|---|
| 322 |         ;"       ENDER -- OPTIONAL if 1, then ends field.
 | 
|---|
| 323 |         ;"Note: also uses globally scoped variable TMGDUMPS
 | 
|---|
| 324 |         ;"Note: Used by DumpRec2 above, with callback from TMGXMLE2
 | 
|---|
| 325 |         ;"To write out <FIELD label="NAME" id=".01" type="FREE TEXT"> or </FIELD>
 | 
|---|
| 326 |         SET TMGDUMPS=$GET(TMGDUMPS)
 | 
|---|
| 327 |         IF +$GET(ENDER)>0 DO
 | 
|---|
| 328 |         . IF TMGDUMPS="" SET TMGDUMPS="."
 | 
|---|
| 329 |         . DO SEND^TMGKERN2(TMGDUMPS)
 | 
|---|
| 330 |         . SET TMGDUMPS=""
 | 
|---|
| 331 |         ELSE  DO
 | 
|---|
| 332 |         . IF $GET(FIELD)'="" SET TMGDUMPS=TMGDUMPS_$$RJ^XLFSTR(FIELD,6," ")_"-"
 | 
|---|
| 333 |         . IF $GET(LABEL)'="" SET TMGDUMPS=TMGDUMPS_LABEL_" "
 | 
|---|
| 334 |         . ;"IF $GET(TYPE)'="" SET TMGDUMPS=TMGDUMPS_"type="""_TYPE_""" "
 | 
|---|
| 335 |         . SET TMGDUMPS=TMGDUMPS_": "
 | 
|---|
| 336 |         QUIT
 | 
|---|
| 337 |  ;
 | 
|---|
| 338 | WLINE(LINE)
 | 
|---|
| 339 |         ;"Purpose: To actually write out labels for record starting and ending.
 | 
|---|
| 340 |         ;"Input: Line -- The line of text to be written out.
 | 
|---|
| 341 |         ;"Note: also uses globally scoped variable TMGDUMPS
 | 
|---|
| 342 |         ;"Note: Used by DumpRec2 above, with callback from TMGXMLE2
 | 
|---|
| 343 |         SET TMGDUMPS=$GET(TMGDUMPS)_$GET(LINE)
 | 
|---|
| 344 |         QUIT
 | 
|---|
| 345 |  ;
 | 
|---|
| 346 | WWPLINE(LINE)
 | 
|---|
| 347 |         ;"Purpose: To actually write out line from WP field
 | 
|---|
| 348 |         ;"Input: Line -- The line of text to be written out.
 | 
|---|
| 349 |         ;"Note: also uses globally scoped variable TMGDUMPS
 | 
|---|
| 350 |         ;"Note: Used by DumpRec2 above, with callback from TMGXMLE2
 | 
|---|
| 351 |         SET TMGDUMPS=$GET(TMGDUMPS)_$GET(LINE)
 | 
|---|
| 352 |         IF TMGDUMPS="" SET TMGDUMPS="."
 | 
|---|
| 353 |         DO SEND^TMGKERN2(TMGDUMPS)
 | 
|---|
| 354 |         SET TMGDUMPS=""
 | 
|---|
| 355 |         QUIT
 | 
|---|