| 1 | TMGSIPH2 ;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 |  ;"Especially functions for working with the data dictionaries, POINTERS IN.
 | 
|---|
| 7 |  ;"Kevin Toppenberg MD
 | 
|---|
| 8 |  ;"GNU General Public License (GPL) applies
 | 
|---|
| 9 |  ;"11/27/09
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ;"=======================================================================
 | 
|---|
| 12 |  ;" API -- Public Functions.
 | 
|---|
| 13 |  ;"=======================================================================
 | 
|---|
| 14 |  ;"HNDLPTIX(FILENUM) --prepair PT XREF for all records pointing INTO specified file.
 | 
|---|
| 15 |  ;"GETPTIN(PARAMS) --get a listing of all pointers INTO requested record
 | 
|---|
| 16 |  ;"BAKXREF(PARAMS) --Make a xref of cross-references (a backward xref)
 | 
|---|
| 17 |  ;"GETXRAGE --Return, in HOURS, the time since the ^TMG("PTXREF") array has had any modification
 | 
|---|
| 18 |  ;"FLD01(PARAMS) -- return .01 field of a record.  Gets INTERNAL value, and doesn't support subfiles.
 | 
|---|
| 19 |  ;"GET01FLD(PARAMS) --To SEND .01 field of a record.  Gets INTERNAL value, and doesn't support subfiles.
 | 
|---|
| 20 | 
 | 
|---|
| 21 |  ;"=======================================================================
 | 
|---|
| 22 |  ;"Dependancies
 | 
|---|
| 23 |  ;"=======================================================================
 | 
|---|
| 24 |  ;"TMGKERN2, TMGUSRIF, TMGFMUT2
 | 
|---|
| 25 |  ;"=======================================================================
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 | HNDLPTIX(FILENUM,CLSIDE) ;
 | 
|---|
| 28 |         ;"Purpose: To prepair PT XREF for all records pointing INTO specified file.
 | 
|---|
| 29 |         ;"Input: FILENUM -- The fileman file number to get pointers INTO.
 | 
|---|
| 30 |         ;"       CLSIDE -- OPTIONAL.  If =1, then will be running on client side, and will work differently
 | 
|---|
| 31 |         ;"Result: None
 | 
|---|
| 32 |         SET FILENUM=+$GET(FILENUM) IF FILENUM'>0 QUIT
 | 
|---|
| 33 |         SET CLSIDE=+$GET(CLSIDE,0)
 | 
|---|
| 34 |         NEW TMGSTIME SET TMGSTIME=$H
 | 
|---|
| 35 |         NEW PGFN,LIMITS
 | 
|---|
| 36 |         IF 'CLSIDE SET PGFN="DO SEND^TMGKERN2(""#THINKING#|Organizing pointers for ""_TMGFNAME_"":  ""_TMGIEN_"" of ""_TMGMAX)"
 | 
|---|
| 37 |         ELSE  DO
 | 
|---|
| 38 |         . SET PGFN="WRITE ""Organizing pointers for ""_TMGFNAME_"":  ""_TMGIEN_"" of ""_TMGMAX"
 | 
|---|
| 39 |         . SET LIMITS("REF")=$NAME(^TMG("TMGSIPH","DOWNLOADED"))
 | 
|---|
| 40 |         DO SETPTOUT^TMGFMUT2(FILENUM,$NAME(^TMG("PTXREF")),PGFN,3000,.LIMITS)
 | 
|---|
| 41 |         SET ^TMG("PTXREF","IN",FILENUM)=$H
 | 
|---|
| 42 |         SET ^TMG("PTXREF")=$H
 | 
|---|
| 43 |         QUIT
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 | GETPTIN(PARAMS,CLSIDE)
 | 
|---|
| 47 |         ;"Purpose: To get a listing of all pointers INTO requested record
 | 
|---|
| 48 |         ;"Input: PARAMS -- this is FILENUM^IEN
 | 
|---|
| 49 |         ;"       CLSIDE -- PASS BY REFERNCE.  OPTIONAL.  If =1, then will be running on client side, and will work differently
 | 
|---|
| 50 |         ;"                 Will also be used as an OUT PARAMETER when CLSIDE=1.  Format:
 | 
|---|
| 51 |         ;"                   CLSIDE(1)=FROMFILE^FROMIENS^FROMFLD
 | 
|---|
| 52 |         ;"                   CLSIDE(2)=FROMFILE^FROMIENS^FROMFLD
 | 
|---|
| 53 |         ;"                   ...
 | 
|---|
| 54 |         ;"Output: Will return data to client.  Format:
 | 
|---|
| 55 |         ;"               FROMFILE^FROMIENS^FROMFLD
 | 
|---|
| 56 |         ;"               FROMFILE^FROMIENS^FROMFLD
 | 
|---|
| 57 |         ;"               FROMFILE^FROMIENS^FROMFLD   (e.g. one line for every pointer in)
 | 
|---|
| 58 |         ;"Result: None.
 | 
|---|
| 59 |         NEW FILENUM SET FILENUM=+$PIECE(PARAMS,"^",1)
 | 
|---|
| 60 |         IF $DATA(^TMG("PTXREF","IN",FILENUM))'>0 DO HNDLPTIX(FILENUM,.CLSIDE)
 | 
|---|
| 61 |         DO GETPTIN^TMGFMUT2(PARAMS,.CLSIDE) ;
 | 
|---|
| 62 |         SET CLSIDE=+$GET(CLSIDE,0) IF CLSIDE QUIT
 | 
|---|
| 63 |         NEW TMGCT SET TMGCT=0
 | 
|---|
| 64 |         FOR  SET TMGCT=$ORDER(CLSIDE(TMGCT)) QUIT:(TMGCT="")  DO
 | 
|---|
| 65 |         . NEW TEMP SET TEMP=$GET(CLSIDE(TMGCT)) QUIT:(TEMP="")
 | 
|---|
| 66 |         . DO SEND^TMGKERN2(TEMP)
 | 
|---|
| 67 |         QUIT
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 | BAKXREF(PARAMS) ;
 | 
|---|
| 71 |         ;"Purpose: Make a xref of cross-references (a backward xref)
 | 
|---|
| 72 |         ;"Input: PARAMS -- This is FILENUM^[KEEP]
 | 
|---|
| 73 |         ;"                 FILENUM -- The fileman file to work with
 | 
|---|
| 74 |         ;"                 KEEP -- optional.  DEFAULT=0;  If '1', then nothing done if xref already exists.
 | 
|---|
| 75 |         ;"Output: ^TMG("PTXREF","XREFS",FILENUM,IEN,REF)=<xref value>
 | 
|---|
| 76 |         ;"        e.g. ^TMG("PTXREF","XREFS",FILENUM,113,"^VA(200,""A"",8870804679,113)")=6188
 | 
|---|
| 77 |         ;"Result: none.
 | 
|---|
| 78 |         ;"DO SEND^TMGKERN2("#THINKING#|Organizing server cross-reference enteries...")
 | 
|---|
| 79 |         NEW PGFN
 | 
|---|
| 80 |         SET PGFN="DO SEND^TMGKERN2(""#THINKING#|Processing index: ""_INDEX_"" for file #""_FILENUM)"
 | 
|---|
| 81 |         DO BAKXREF^TMGFMUT2(PARAMS,PGFN)
 | 
|---|
| 82 |         ;"DO SEND^TMGKERN2("#THINKING#|Completed.")
 | 
|---|
| 83 | BXDN    QUIT
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 | GETXRAGE ;
 | 
|---|
| 87 |         ;"Purpose: Return, in HOURS, the time since the ^TMG("PTXREF") array has had any modification
 | 
|---|
| 88 |         ;"OUTPUT: Sends 0 if not currently defined, otherwise number of HOURS since setup.
 | 
|---|
| 89 |         ;"Results: None
 | 
|---|
| 90 |         DO SEND^TMGKERN2($$GETXRAGE^TMGFMUT2)
 | 
|---|
| 91 |         QUIT
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | FLD01(PARAMS) ;
 | 
|---|
| 95 |         ;"Purpose: To return .01 field of a record.
 | 
|---|
| 96 |         ;"Input: PARAMS -- this is FILENUM^IEN
 | 
|---|
| 97 |         ;"                 Note: FILENUM can be in format of subfilenum{parentfilenum{grandparentnum
 | 
|---|
| 98 |         ;"                       In this case, IEN must be an IENS to be passed to $$GET1^DIQ
 | 
|---|
| 99 |         ;"Result: returns .01 value.  Internal format (for speed), or External format if subfile.
 | 
|---|
| 100 |         NEW FILENUM SET FILENUM=$PIECE(PARAMS,"^",1)
 | 
|---|
| 101 |         NEW RESULT SET RESULT=""
 | 
|---|
| 102 |         IF FILENUM["{" DO
 | 
|---|
| 103 |         . SET FILENUM=+FILENUM
 | 
|---|
| 104 |         . NEW IENS SET IENS=$PIECE(PARAMS,"^",2)
 | 
|---|
| 105 |         . SET RESULT=$$GET1^DIQ(FILENUM,IENS,.01,"E")
 | 
|---|
| 106 |         ELSE  DO
 | 
|---|
| 107 |         . SET FILENUM=+FILENUM
 | 
|---|
| 108 |         . NEW IEN SET IEN=+$PIECE(PARAMS,"^",2)
 | 
|---|
| 109 |         . NEW GREF SET GREF=$GET(^DIC(FILENUM,0,"GL"))
 | 
|---|
| 110 |         . IF GREF="" SET RESULT="<ERROR>" GOTO F1DN
 | 
|---|
| 111 |         . NEW CGREF SET CGREF=$$CREF^DILF(GREF)
 | 
|---|
| 112 |         . NEW VALUE SET VALUE=$GET(@CGREF@(IEN,0))
 | 
|---|
| 113 |         . SET RESULT=$PIECE(VALUE,"^",1)
 | 
|---|
| 114 |         . IF RESULT="" SET RESULT="<NONE FOUND AT "_CGREF_"("_IEN_")>"
 | 
|---|
| 115 | F1DN    QUIT RESULT
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 | GET01FLD(PARAMS) ;
 | 
|---|
| 119 |         ;"Purpose: To get .01 field of a record.
 | 
|---|
| 120 |         ;"Input: PARAMS -- this is FILENUM^IEN
 | 
|---|
| 121 |         ;"                    FILENUM can be File number, or SubFileNum{ParentFileNum{Grandparent...
 | 
|---|
| 122 |         ;"                    IEN can be a record number, or IENS (e.g. '1,2456,')
 | 
|---|
| 123 |         ;"Output: Will return data to client.  Format:
 | 
|---|
| 124 |         ;"          <.01 value>
 | 
|---|
| 125 |         ;"Result: None.
 | 
|---|
| 126 |         NEW VALUE
 | 
|---|
| 127 |         DO DEBUGMSG^TMGKERN2("In GET01FLD. PARAMS="_PARAMS)
 | 
|---|
| 128 |         SET VALUE=$$FLD01(.PARAMS)
 | 
|---|
| 129 |         DO DEBUGMSG^TMGKERN2("In GET01FLD. VALUE="_VALUE)
 | 
|---|
| 130 |         DO SEND^TMGKERN2(VALUE)
 | 
|---|
| 131 |         DO DEBUGMSG^TMGKERN2("Leaving GET01FLD.")
 | 
|---|
| 132 |         QUIT
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 | HANDIENL(PARAMS) ;
 | 
|---|
| 136 |         ;"Purpose: To return a listing of all records (IEN's) in specified file.
 | 
|---|
| 137 |         ;"Input : PARAMS -- this is FILENUM  (Subfiles not supported)
 | 
|---|
| 138 |         ;"Output:  Will return data to client.  Format:
 | 
|---|
| 139 |         ;"           <IEN>^.01 Value (internal format)
 | 
|---|
| 140 |         ;"           <IEN2>^.01 Value (internal format)
 | 
|---|
| 141 |         ;"           <IEN3>^.01 Value (internal format) ...
 | 
|---|
| 142 |         ;"Results: None
 | 
|---|
| 143 |         SET PARAMS=$GET(PARAMS)
 | 
|---|
| 144 |         NEW FILENUM SET FILENUM=$PIECE(PARAMS,"^",1)
 | 
|---|
| 145 |         IF +FILENUM'>0 QUIT
 | 
|---|
| 146 |         NEW GREF SET GREF=$GET(^DIC(FILENUM,0,"GL"))
 | 
|---|
| 147 |         IF GREF="" QUIT
 | 
|---|
| 148 |         NEW CGREF SET CGREF=$$CREF^DILF(GREF)
 | 
|---|
| 149 |         NEW TMGCT SET TMGCT=1
 | 
|---|
| 150 |         NEW IEN SET IEN=0
 | 
|---|
| 151 |         FOR  SET IEN=$ORDER(@CGREF@(IEN)) QUIT:(+IEN'>0)  DO
 | 
|---|
| 152 |         . NEW VALUE SET VALUE=$PIECE($GET(@CGREF@(IEN,0)),"^",1)
 | 
|---|
| 153 |         . DO SEND^TMGKERN2(IEN_"^"_VALUE)
 | 
|---|
| 154 |         . SET TMGCT=TMGCT+1
 | 
|---|
| 155 |         . IF TMGCT>5000 DO
 | 
|---|
| 156 |         . . DO SEND^TMGKERN2("#THINKING#|Processing IEN: "_IEN_" for file #"_FILENUM)
 | 
|---|
| 157 |         . . SET TMGCT=0
 | 
|---|
| 158 |         QUIT
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 | HANDLIENHDR(PARAMS) ;
 | 
|---|
| 161 |         ;"Purpose: Return the Fileman records of the last record added, and highest IEN number from File
 | 
|---|
| 162 |         ;"Input : PARAMS -- this is FILENUM  (Subfiles not supported)
 | 
|---|
| 163 |         ;"Output:  Will return data to client.  Format:
 | 
|---|
| 164 |         ;"           LastIEN^NumIENs
 | 
|---|
| 165 |         ;"Results: None
 | 
|---|
| 166 |         SET PARAMS=$GET(PARAMS)
 | 
|---|
| 167 |         NEW FILENUM SET FILENUM=$PIECE(PARAMS,"^",1)
 | 
|---|
| 168 |         IF +FILENUM'>0 QUIT
 | 
|---|
| 169 |         NEW GREF SET GREF=$GET(^DIC(FILENUM,0,"GL"))
 | 
|---|
| 170 |         IF GREF="" QUIT
 | 
|---|
| 171 |         NEW NODE SET NODE=$GET(@(GREF_"0)"))
 | 
|---|
| 172 |         NEW LASTIEN SET LASTIEN=$PIECE(NODE,"^",3)
 | 
|---|
| 173 |         NEW TOTIENS SET TOTIENS=$PIECE(NODE,"^",4)
 | 
|---|
| 174 |         DO SEND^TMGKERN2(LASTIEN_"^"_TOTIENS)
 | 
|---|
| 175 |         QUIT
 | 
|---|
| 176 |  ;
 | 
|---|
| 177 |  ; | 
|---|