[894] | 1 | TMGRPC1C ;TMG/kst-RPC Functions ;07/09/10
|
---|
| 2 | ;;1.0;TMG-LIB;**1**;07/09/10
|
---|
| 3 |
|
---|
| 4 | ;"TMG RPC FUNCTIONS especially related to imaging.
|
---|
| 5 |
|
---|
| 6 | ;"Kevin Toppenberg MD
|
---|
| 7 | ;"GNU General Public License (GPL) applies
|
---|
| 8 | ;"7/09/10
|
---|
| 9 |
|
---|
| 10 | ;"=======================================================================
|
---|
| 11 | ;" RPC -- Public Functions.
|
---|
| 12 | ;"=======================================================================
|
---|
| 13 | ;"GETDEFNL() -- return the default Network Location (file 2005.2) entry
|
---|
| 14 | ;"GETLOCFPATH(FPATH,LOCIEN) -- get local (absolute) path for storing on host file system
|
---|
| 15 | ;"GETDROPPATH(LOCIEN,DropBox) -- return path to local dropbox.
|
---|
| 16 | ;"DOWNLOAD(GREF,FPATH,FNAMEW $$,LOCIEN)
|
---|
| 17 | ;"UPLOAD(RESULT,FPATH,FNAME,LOCIEN,ARRAY)
|
---|
| 18 | ;"DOWNDROP(RESULT,FPATH,FNAME,LOCIEN) -- Download drop box file
|
---|
| 19 | ;"UPLDDROP(RESULT,FPATH,FNAME,LOCIEN) -- Upload Dropbox File
|
---|
| 20 | ;"DELIMAGE(RESULT,IMGIEN,MODE,REASON) -- Delete or Retract Image
|
---|
| 21 | ;"UNRETRACT(RESULT,TMGIEN) -- reverse retraction process from DELIMAGE above.
|
---|
| 22 | ;"=======================================================================
|
---|
| 23 | ;"PRIVATE API FUNCTIONS
|
---|
| 24 | ;"=======================================================================
|
---|
| 25 | ;"ENCODE(GRef,incSubscr,encodeFn)
|
---|
| 26 | ;"DECODE(GRef,incSubscr,decodeFn)
|
---|
| 27 | ;"$$HEXCODER(INPUT) ;encode the input string. Currently using simple hex encoding/
|
---|
| 28 | ;"$$B64CODER(INPUT) ;encode the input string via UUENCODE (actually Base64)
|
---|
| 29 | ;"$$B64DECODER(INPUT) ;encode the input string via UUDECODE (actually Base64)
|
---|
| 30 | ;"ENSUREDIV(FPATH,LOCIEN) ;Ensure that the path ends with an appropriate node divider.
|
---|
| 31 |
|
---|
| 32 | ;"=======================================================================
|
---|
| 33 | ;"Dependancies:
|
---|
| 34 | ;" DIK, TMGDEBUG
|
---|
| 35 | ;"=======================================================================
|
---|
| 36 | ;
|
---|
| 37 | GETDEFNL()
|
---|
| 38 | ;"Purpose: to return the default Network Location (file 2005.2) entry
|
---|
| 39 | ;"Input: None
|
---|
| 40 | ;"Results: Returns IEN in file 2005.2, or 1 if some problem.
|
---|
| 41 | ;
|
---|
| 42 | NEW RESULT SET RESULT=1 ;"Default
|
---|
| 43 | ;
|
---|
| 44 | ;"First get default INSTITUTION, stored in KERNEL SYSTEM PARAMETERS file.
|
---|
| 45 | NEW INSTPTR SET INSTPTR=+$PIECE($GET(^XTV(8989.3,1,"XUS")),"^",17) ;"Ptr to file $4 (Institution)
|
---|
| 46 | IF INSTPTR'>0 GOTO GDFNDN
|
---|
| 47 | ;
|
---|
| 48 | ;"Now get IMAGING SITE PARAMETERS for Institution Name
|
---|
| 49 | NEW IMGSPPTR SET IMGSPPTR=+$ORDER(^MAG(2006.1,"B",INSTPTR,0))
|
---|
| 50 | IF IMGSPPTR'>0 GOTO GDFNDN
|
---|
| 51 | ;
|
---|
| 52 | ;"Now get NETWORK LOCATION stored in IMAGING SITE PARAMETERS record
|
---|
| 53 | NEW LOCPTR SET LOCPTR=+$PIECE($GET(^MAG(2006.1,IMGSPPTR,0)),"^",3)
|
---|
| 54 | IF LOCPTR>0 SET RESULT=LOCPTR
|
---|
| 55 | ;
|
---|
| 56 | GDFNDN QUIT RESULT
|
---|
| 57 | ;
|
---|
| 58 | ;
|
---|
| 59 | ENSUREDIV(FPATH,LOCIEN) ;
|
---|
| 60 | ;"Purpose: Ensure that the path ends with an appropriate node divider.
|
---|
| 61 | set FPATH=$GET(FPATH,"/")
|
---|
| 62 | set LOCIEN=+$GET(LOCIEN) if LOCIEN'>0 set LOCIEN=$$GETDEFNL()
|
---|
| 63 |
|
---|
| 64 | ;"default is "/" NOTE: CUSTOM FIELD
|
---|
| 65 | new NodeDiv set NodeDiv=$piece($get(^MAG(2005.2,LOCIEN,22701),"/"),"^",1)
|
---|
| 66 |
|
---|
| 67 | new EndChar set EndChar=$extract(FPATH,$length(FPATH))
|
---|
| 68 | if EndChar'=NodeDiv set FPATH=FPATH_NodeDiv
|
---|
| 69 | quit FPATH
|
---|
| 70 | ;
|
---|
| 71 | GETLOCFPATH(FPATH,LOCIEN) ;
|
---|
| 72 | ;"Purpose: to get local (absolute) path for storing on host file system
|
---|
| 73 | ;"Input: FPATH -- the file path up to, but not including, the filename
|
---|
| 74 | ;" Use '/' to NOT specify any subdirectory
|
---|
| 75 | ;" [optional] default is '/'
|
---|
| 76 | ;" LOCIEN-- [optional] -- the IEN from file 2005.2 (network location) to download from
|
---|
| 77 | ;" NOTE: DEPRECIATED. Should pass "" to allow code to lookup default
|
---|
| 78 | ;" values stored in KERNEL SYSTEM PARAMETERS etc.
|
---|
| 79 | ;" Note: For security reasons, all path requests will be considered relative to a root path.
|
---|
| 80 | ;" e.g. if user asks for /download/SomeFile.jpg, this function will retrieve:
|
---|
| 81 | ;" /var/local/Dir1/Dir2/download/SomeFile.jpg
|
---|
| 82 | ;" This root path is found in custom field 22701 in file 2005.2
|
---|
| 83 | ;"Returns: A path, that can be passed to KERNEL calls for HFS calls.
|
---|
| 84 | ;" NOTE: Result WILL end with a node divider
|
---|
| 85 | ;
|
---|
| 86 | set FPATH=$GET(FPATH,"/")
|
---|
| 87 | set LOCIEN=+$GET(LOCIEN) if LOCIEN'>0 set LOCIEN=$$GETDEFNL()
|
---|
| 88 |
|
---|
| 89 | ;"NOTE: CUSTOM FIELD
|
---|
| 90 | new PathRoot set PathRoot=$piece($get(^MAG(2005.2,LOCIEN,22700)),"^",1)
|
---|
| 91 |
|
---|
| 92 | ;"default is "/" NOTE: CUSTOM FIELD
|
---|
| 93 | new NodeDiv set NodeDiv=$piece($get(^MAG(2005.2,LOCIEN,22701),"/"),"^",1)
|
---|
| 94 |
|
---|
| 95 | new EndRoot set EndRoot=$extract(PathRoot,$length(PathRoot))
|
---|
| 96 | new StartPath set StartPath=$extract(FPATH,1)
|
---|
| 97 |
|
---|
| 98 | if (EndRoot=NodeDiv)&(StartPath=NodeDiv) do
|
---|
| 99 | . set FPATH=$extract(FPATH,2,1024)
|
---|
| 100 | else if (EndRoot'=NodeDiv)&(StartPath'=NodeDiv) do
|
---|
| 101 | . set PathRoot=PathRoot_NodeDiv
|
---|
| 102 |
|
---|
| 103 | set FPATH=$$ENSUREDIV(PathRoot_FPATH,LOCIEN)
|
---|
| 104 | quit FPATH
|
---|
| 105 | ;
|
---|
| 106 | ;
|
---|
| 107 | GETDROPPATH(LOCIEN,DropBox) ;
|
---|
| 108 | ;"Purpose: return path to local dropbox.
|
---|
| 109 | ;"Input: LOCIEN -- the IEN from file 2005.2 (network location)
|
---|
| 110 | ;" DropBox -- PASS BY REFERENCE. AN OUT PARAMETER.
|
---|
| 111 | ;"Results: 1 if OK, -1 if error
|
---|
| 112 | set LOCIEN=+$GET(LOCIEN)
|
---|
| 113 | if LOCIEN'>0 set LOCIEN=$$GETDEFNL()
|
---|
| 114 | new Result set Result=1
|
---|
| 115 | set DropBox=$piece($get(^MAG(2005.2,LOCIEN,22702)),"^",1)
|
---|
| 116 | if DropBox="" do goto GDPDN
|
---|
| 117 | . set Result=-1
|
---|
| 118 | set DropBox=$$ENSUREDIV(DropBox,LOCIEN)
|
---|
| 119 | GDPDN quit Result
|
---|
| 120 |
|
---|
| 121 |
|
---|
| 122 | DOWNLOAD(GREF,FPATH,FNAME,LOCIEN)
|
---|
| 123 | ;"SCOPE: Public
|
---|
| 124 | ;"Purpose: To provide an entry point for a RPC call from a client. The client
|
---|
| 125 | ;" will ask for a given file, and it will be passed back in the form
|
---|
| 126 | ;" of an array (in BASE64 ascii encoding)
|
---|
| 127 | ;"Input: GREF -- OUT PARAM -- the array to pass the result back in (PASSED BY REFERENCE)
|
---|
| 128 | ;" FPATH -- the file path up to, but not including, the filename
|
---|
| 129 | ;" Use '/' to NOT specify any subdirectory
|
---|
| 130 | ;" [optional] default is '/'
|
---|
| 131 | ;" FNAME -- the name of the file to pass back
|
---|
| 132 | ;" LOCIEN-- [optional] -- the IEN from file 2005.2 (network location) to download from
|
---|
| 133 | ;" NOTE: DEPRECIATED. Should pass "" to allow code to lookup default
|
---|
| 134 | ;" values stored in KERNEL SYSTEM PARAMETERS etc.
|
---|
| 135 | ;" Note: For security reasons, all path requests will be considered relative to a root path.
|
---|
| 136 | ;" e.g. if user asks for /download/SomeFile.jpg, this function will retrieve:
|
---|
| 137 | ;" /var/local/Dir1/Dir2/download/SomeFile.jpg
|
---|
| 138 | ;" This root path is found in custom field 22701 in file 2005.2
|
---|
| 139 | ;"Output: results are passed out in @GREF
|
---|
| 140 | ;" @GREF@(0)=success; 1=success, 0=failure
|
---|
| 141 | ;" @GREF@(1..xxx) = actual data
|
---|
| 142 |
|
---|
| 143 | set FNAME=$get(FNAME)
|
---|
| 144 | set LOCIEN=+$GET(LOCIEN)
|
---|
| 145 | if LOCIEN'>0 set LOCIEN=$$GETDEFNL()
|
---|
| 146 | set FPATH=$$GETLOCFPATH($GET(FPATH),LOCIEN) ;
|
---|
| 147 |
|
---|
| 148 | set GREF="^TMP(""DOWNLOAD^TMGRPC1"","_$J_")"
|
---|
| 149 | kill @GREF
|
---|
| 150 | set @GREF@(0)=$$BFTG^TMGBINF(.FPATH,.FNAME,$name(@GREF@(1)),3)
|
---|
| 151 |
|
---|
| 152 | do ENCODE($name(@GREF@(1)),3)
|
---|
| 153 |
|
---|
| 154 | quit
|
---|
| 155 |
|
---|
| 156 |
|
---|
| 157 | UPLOAD(RESULT,FPATH,FNAME,LOCIEN,ARRAY)
|
---|
| 158 | ;"SCOPE: Public
|
---|
| 159 | ;"RPC That calls this: TMG UPLOAD FILE
|
---|
| 160 | ;"Purpose: To provide an entry point for a RPC call from a client. The client
|
---|
| 161 | ;" will provide a file for upload (in BASE64 ascii encoding)
|
---|
| 162 | ;"Input: GREF -- OUT PARAM -- the array to pass the result back in (PASSED BY REFERENCE)
|
---|
| 163 | ;" FPATH -- the file path up to, but not including, the filename
|
---|
| 164 | ;" Use '/' to NOT specify any subdirectory
|
---|
| 165 | ;" [optional] default is '/'
|
---|
| 166 | ;" FNAME -- the name of the file to pass back
|
---|
| 167 | ;" LOCIEN-- [optional] -- the IEN from file 2005.2 (network location) to upload to
|
---|
| 168 | ;" NOTE: DEPRECIATED. Should pass "" to allow code to lookup default
|
---|
| 169 | ;" Note: For security reasons, all path requests will be considered relative to a root path.
|
---|
| 170 | ;" e.g. if user asks for /download/SomeFile.jpg, this function will retrieve:
|
---|
| 171 | ;" /var/local/Dir1/Dir2/download/SomeFile.jpg
|
---|
| 172 | ;" This root path is found in custom field 22701 in file 2005.2
|
---|
| 173 | ;" ARRAY -- the array that will hold the file, in BASE64 ascii encoding
|
---|
| 174 | ;"Output: results are passed out in RESULT: 1^SuccessMessage or 0^FailureMessage
|
---|
| 175 |
|
---|
| 176 | new result
|
---|
| 177 | new resultMsg set resultMsg="1^Successful Upload"
|
---|
| 178 |
|
---|
| 179 | set ^TMP("UPLOAD^TMGRPC1",$J,"FPATH")=$GET(FPATH)
|
---|
| 180 | set ^TMP("UPLOAD^TMGRPC1",$J,"FNAME")=$GET(FNAME)
|
---|
| 181 | set ^TMP("UPLOAD^TMGRPC1",$J,"LOCIEN")=$GET(LOCIEN)
|
---|
| 182 |
|
---|
| 183 | if $data(ARRAY)=0 set resultMsg="0^No data received to upload" goto UpDone
|
---|
| 184 | set FNAME=$get(FNAME)
|
---|
| 185 | if FNAME="" do goto UpDone
|
---|
| 186 | . set resultMsg="0^No file name received"
|
---|
| 187 |
|
---|
| 188 | set LOCIEN=+$GET(LOCIEN) if LOCIEN'>0 set LOCIEN=$$GETDEFNL()
|
---|
| 189 |
|
---|
| 190 | set FPATH=$$GETLOCFPATH($GET(FPATH),LOCIEN) ;
|
---|
| 191 |
|
---|
| 192 | do DECODE("ARRAY(0)",1)
|
---|
| 193 |
|
---|
| 194 | if $$GTBF^TMGBINF("ARRAY(0)",1,FPATH,FNAME)=0 do
|
---|
| 195 | . set resultMsg="0^Error while saving file"
|
---|
| 196 |
|
---|
| 197 | UpDone set RESULT=resultMsg
|
---|
| 198 | quit
|
---|
| 199 |
|
---|
| 200 |
|
---|
| 201 | DOWNDROP(RESULT,FPATH,FNAME,LOCIEN) ;"i.e. Download drop box file
|
---|
| 202 | ;"SCOPE: Public
|
---|
| 203 | ;"RPC That calls this: TMG DOWNLOAD FILE DROPBOX
|
---|
| 204 | ;"Purpose: To provide an entry point for a RPC call from a client. The client
|
---|
| 205 | ;" will request for the file to be placed into in a 'dropbox' file
|
---|
| 206 | ;" location that both the client and server can access. File may be
|
---|
| 207 | ;" moved from there to its final destination by the client.
|
---|
| 208 | ;" This method alloows file-hiding ability on the server side.
|
---|
| 209 | ;"Input: RESULT -- OUT PARAM -- the array to pass the result back in (PASSED BY REFERENCE)
|
---|
| 210 | ;" FPATH -- the file path up to, but not including, the filename. This
|
---|
| 211 | ;" is the path that the file is stored at (relative to a root path,
|
---|
| 212 | ;" see comments below). It is NOT the path of the dropbox.
|
---|
| 213 | ;" Use '/' to NOT specify any subdirectory
|
---|
| 214 | ;" [optional] default is '/'
|
---|
| 215 | ;" FNAME -- the name of the file to be uploaded. Note: This is also the
|
---|
| 216 | ;" name of the file to be put into the dropbox. It is the
|
---|
| 217 | ;" responsibility of the client to ensure that there is not already
|
---|
| 218 | ;" a similarly named file in the dropbox before requesting a file
|
---|
| 219 | ;" be put there. It is the responsibility of the client to delete
|
---|
| 220 | ;" the file from the drop box.
|
---|
| 221 | ;" LOCIEN-- [optional] -- the IEN from file 2005.2 (network location) to download from
|
---|
| 222 | ;" NOTE: DEPRECIATED. Should pass "" to allow code to lookup default
|
---|
| 223 | ;" Note: For security reasons, all path requests will be considered relative to a root path.
|
---|
| 224 | ;" e.g. if user asks for /download/SomeFile.jpg, this function will retrieve:
|
---|
| 225 | ;" /var/local/Dir1/Dir2/download/SomeFile.jpg
|
---|
| 226 | ;" This root path is found in custom field 22701 in file 2005.2
|
---|
| 227 | ;" Also: dropbox location is obtained from custom field 22702 in file 2005.2
|
---|
| 228 | ;"NOTE RE DROPBOX:
|
---|
| 229 | ;" This system is designed for a system where by the server and the client have a
|
---|
| 230 | ;" shared filesystem, but the directory paths will be different. For example:
|
---|
| 231 | ;" Linux server has dropbox at: /mnt/WinServer/dropbox/
|
---|
| 232 | ;" Windows Client has access to dropbox at: V:\Dropbox\
|
---|
| 233 |
|
---|
| 234 | ;"Output: results are 1^Success^FileSize (in bytes), or 0^Error Message
|
---|
| 235 |
|
---|
| 236 | new DropBox,moveResult,SrcNamePath
|
---|
| 237 |
|
---|
| 238 | new resultMsg set resultMsg="1^Successful Download"
|
---|
| 239 |
|
---|
| 240 | set FNAME=$get(FNAME) if FNAME="" do goto DnDBxDone
|
---|
| 241 | . set resultMsg="0^No file name received"
|
---|
| 242 |
|
---|
| 243 | set FPATH=$$GETLOCFPATH(.FPATH,.LOCIEN) ;
|
---|
| 244 |
|
---|
| 245 | if $$GETDROPPATH(.LOCIEN,.DropBox)=-1 do goto DnDBxDone
|
---|
| 246 | . set resultMsg="0^Dropbox location not configured in file 2005.2, IEN "_LOCIEN_", field 22702"
|
---|
| 247 |
|
---|
| 248 | set SrcNamePath=FPATH_FNAME
|
---|
| 249 |
|
---|
| 250 | set moveResult=$$Copy^TMGKERNL(SrcNamePath,DropBox)
|
---|
| 251 | if moveResult>0 do
|
---|
| 252 | . set resultMsg="0^Move failed, returning OS error code: "_moveResult
|
---|
| 253 | else do
|
---|
| 254 | . set resultMsg=resultMsg_"^"_$$FileSize^TMGKERNL(SrcNamePath)
|
---|
| 255 |
|
---|
| 256 | DnDBxDone
|
---|
| 257 | set RESULT=resultMsg
|
---|
| 258 | quit
|
---|
| 259 |
|
---|
| 260 |
|
---|
| 261 | UPLDDROP(RESULT,FPATH,FNAME,LOCIEN) ;"i.e. Upload Dropbox File
|
---|
| 262 | ;"SCOPE: Public
|
---|
| 263 | ;"RPC That calls this: TMG UPLOAD FILE DROPBOX
|
---|
| 264 | ;"Purpose: To provide an entry point for a RPC call from a client. The client
|
---|
| 265 | ;" will put the file in a 'dropbox' file location that both the client
|
---|
| 266 | ;" and server can access. File will be moved from there to its final
|
---|
| 267 | ;" destination. This will provide file-hiding ability on the server side.
|
---|
| 268 | ;"Input: RESULT -- OUT PARAM -- the array to pass the result back in (PASSED BY REFERENCE)
|
---|
| 269 | ;" FPATH -- the file path up to, but not including, the filename. This
|
---|
| 270 | ;" is the path to store the file at. (relative to a root path,
|
---|
| 271 | ;" see comments below). It is NOT the path of the dropbox.
|
---|
| 272 | ;" Use '/' to NOT specify any subdirectory
|
---|
| 273 | ;" [optional] default is '/'
|
---|
| 274 | ;" FNAME -- the name of the file to be uploaded. Note: This is also the
|
---|
| 275 | ;" name of the file to be pulled from the dropbox. It is the
|
---|
| 276 | ;" responsibility of the client to ensure that there is not already
|
---|
| 277 | ;" a similarly named file in the dropbox before depositing a file there.
|
---|
| 278 | ;" The server will remove the file from the dropbox, unless there is
|
---|
| 279 | ;" an error with the host OS (which will be returned as an error message)
|
---|
| 280 | ;" LOCIEN-- [optional] -- the IEN from file 2005.2 (network location) to upload to
|
---|
| 281 | ;" NOTE: DEPRECIATED. Should pass "" to allow code to lookup default
|
---|
| 282 | ;" Note: For security reasons, all path requests will be considered relative to a root path.
|
---|
| 283 | ;" e.g. if user asks for /download/SomeFile.jpg, this function will retrieve:
|
---|
| 284 | ;" /var/local/Dir1/Dir2/download/SomeFile.jpg
|
---|
| 285 | ;" This root path is found in custom field 22700 in file 2005.2
|
---|
| 286 | ;" Also: dropbox location is obtained from custom field 22702 in file 2005.2
|
---|
| 287 | ;"NOTE RE DROPBOX:
|
---|
| 288 | ;" This system is designed for a system where by the server and the client have a
|
---|
| 289 | ;" shared filesystem, but the directory paths will be different. For example:
|
---|
| 290 | ;" Linux server has dropbox at: /mnt/WinServer/dropbox/
|
---|
| 291 | ;" Windows Client has access to dropbox at: V:\Dropbox\
|
---|
| 292 |
|
---|
| 293 | ;"Output: results are passed out in RESULT:
|
---|
| 294 | ;" 1^SuccessMessage or 0^FailureMessage
|
---|
| 295 |
|
---|
| 296 | new SrcNamePath,DestNamePath,moveResult
|
---|
| 297 | new resultMsg set resultMsg="1^Successful Upload"
|
---|
| 298 |
|
---|
| 299 | set FNAME=$get(FNAME)
|
---|
| 300 | if FNAME="" set resultMsg="0^No file name received" goto UpDBxDone
|
---|
| 301 |
|
---|
| 302 | new DropBox
|
---|
| 303 | if $$GETDROPPATH(.LOCIEN,.DropBox)=-1 do goto UpDBxDone
|
---|
| 304 | . set resultMsg="0^Dropbox location not configured in file 2005.2, IEN "_LOCIEN_", field 22702"
|
---|
| 305 |
|
---|
| 306 | set FPATH=$$GETLOCFPATH($GET(FPATH),LOCIEN) ;
|
---|
| 307 |
|
---|
| 308 | set SrcNamePath=DropBox_FNAME
|
---|
| 309 | set DestNamePath=FPATH_FNAME
|
---|
| 310 |
|
---|
| 311 | set moveResult=$$Move^TMGKERNL(SrcNamePath,DestNamePath)
|
---|
| 312 | if moveResult>0 do
|
---|
| 313 | . set resultMsg="0^Move failed, returning OS error code: "_moveResult
|
---|
| 314 |
|
---|
| 315 | UpDBxDone
|
---|
| 316 | set RESULT=resultMsg
|
---|
| 317 | quit
|
---|
| 318 |
|
---|
| 319 |
|
---|
| 320 | ENCODE(GRef,incSubscr,encodeFn)
|
---|
| 321 | ;"Purpose: ENCODE a BINARY GLOBAL.
|
---|
| 322 | ;"Input:
|
---|
| 323 | ;" GRef-- Global reference of the SOURCE binary global array, in fully resolved
|
---|
| 324 | ;" (closed root) format.
|
---|
| 325 | ;" Note:
|
---|
| 326 | ;" At least one subscript must be numeric. This will be the incrementing
|
---|
| 327 | ;" subscript (i.e. the subscript that $$BIN2WP^TMGBINWP will increment
|
---|
| 328 | ;" to store each new global node). This subscript need not be the final
|
---|
| 329 | ;" subscript. For example, to load into a WORD PROCESSING field, the
|
---|
| 330 | ;" incrementing node is the second-to-last subscript; the final subscript
|
---|
| 331 | ;" is always zero.
|
---|
| 332 | ;" REQUIRED
|
---|
| 333 | ;" incSubscr-- (required) Identifies the incrementing subscript level, for the source global
|
---|
| 334 | ;" For example, if you pass ^TMP(115,1,1,0) as the global_ref parameter and
|
---|
| 335 | ;" pass 3 as the inc_subscr parameter, $$BIN2GBL will increment the third
|
---|
| 336 | ;" subscript, such as ^TMP(115,1,x), but will WRITE notes at the full global
|
---|
| 337 | ;" reference, such as ^TMP(115,1,x,0).
|
---|
| 338 | ;" REQUIRED
|
---|
| 339 | ;" encodeFn- (OPTIONAL) the name of a function that will encode a line of data.
|
---|
| 340 | ;" e.g. "CODER^ZZZCODER" or "LOCALCODER". The function should
|
---|
| 341 | ;" take one input variable (the line of raw binary data), and return a converted
|
---|
| 342 | ;" line. e.g.
|
---|
| 343 | ;" CODER(INPUT)
|
---|
| 344 | ;" ... ;"convert INPUT to RESULT
|
---|
| 345 | ;" QUIT RESULT
|
---|
| 346 | ;" default value is B64CODER^TMGRPC1
|
---|
| 347 | ;"
|
---|
| 348 | ;"Output: @GRef is converted to encoded data
|
---|
| 349 | ;"Result: None
|
---|
| 350 |
|
---|
| 351 | if $get(GRef)="" goto EncodeDone
|
---|
| 352 | if $get(incSubscr)="" goto EncodeDone
|
---|
| 353 |
|
---|
| 354 | set encodeFn=$get(encodeFn,"B64CODER")
|
---|
| 355 |
|
---|
| 356 | new encoder
|
---|
| 357 | set encoder="set temp=$$"_encodeFn_"(.temp)"
|
---|
| 358 |
|
---|
| 359 | for do quit:(GRef="")
|
---|
| 360 | . new temp
|
---|
| 361 | . set temp=$get(@GRef)
|
---|
| 362 | . if temp="" set GRef="" quit
|
---|
| 363 | . xecute encoder ;"i.e. set temp=$$encoderFn(.temp)
|
---|
| 364 | . set @GRef=temp
|
---|
| 365 | . set GRef=$$NEXTNODE^TMGBINF(GRef,incSubscr,1,1)
|
---|
| 366 |
|
---|
| 367 | EncodeDone
|
---|
| 368 | quit
|
---|
| 369 |
|
---|
| 370 |
|
---|
| 371 | HEXCODER(INPUT)
|
---|
| 372 | ;"Purpose: to encode the input string. Currently using simple hex encoding/
|
---|
| 373 | quit $$STRB2H^TMGSTUTL(.INPUT,0,1)
|
---|
| 374 |
|
---|
| 375 |
|
---|
| 376 | B64CODER(INPUT)
|
---|
| 377 | ;"Purpose: to encode the input string via UUENCODE (actually Base64)
|
---|
| 378 | quit $$ENCODE^RGUTUU(.INPUT)
|
---|
| 379 |
|
---|
| 380 | B64DECODER(INPUT)
|
---|
| 381 | ;"Purpose: to encode the input string via UUENCODE (actually Base64)
|
---|
| 382 | quit $$DECODE^RGUTUU(.INPUT)
|
---|
| 383 |
|
---|
| 384 |
|
---|
| 385 | DECODE(GRef,incSubscr,decodeFn)
|
---|
| 386 | ;"Purpose: ENCODE a BINARY GLOBAL.
|
---|
| 387 | ;"Input:
|
---|
| 388 | ;" GRef-- Global reference of the SOURCE binary global array, in fully resolved
|
---|
| 389 | ;" (closed root) format.
|
---|
| 390 | ;" Note:
|
---|
| 391 | ;" At least one subscript must be numeric. This will be the incrementing
|
---|
| 392 | ;" subscript (i.e. the subscript that $$BIN2WP^TMGBINWP will increment
|
---|
| 393 | ;" to store each new global node). This subscript need not be the final
|
---|
| 394 | ;" subscript. For example, to load into a WORD PROCESSING field, the
|
---|
| 395 | ;" incrementing node is the second-to-last subscript; the final subscript
|
---|
| 396 | ;" is always zero.
|
---|
| 397 | ;" REQUIRED
|
---|
| 398 | ;" incSubscr-- (required) Identifies the incrementing subscript level, for the source global
|
---|
| 399 | ;" For example, if you pass ^TMP(115,1,1,0) as the global_ref parameter and
|
---|
| 400 | ;" pass 3 as the inc_subscr parameter, $$BIN2GBL will increment the third
|
---|
| 401 | ;" subscript, such as ^TMP(115,1,x), but will WRITE notes at the full global
|
---|
| 402 | ;" reference, such as ^TMP(115,1,x,0).
|
---|
| 403 | ;" REQUIRED
|
---|
| 404 | ;" decodeFn- (OPTIONAL) the name of a function that will decode a line of data.
|
---|
| 405 | ;" e.g. "DECODER^ZZZCODER" or "DECODER". The function should take
|
---|
| 406 | ;" one input variable (the line of encoded data), and return a decoded line. e.g.
|
---|
| 407 | ;" DECODER(INPUT)
|
---|
| 408 | ;" ... ;"convert INPUT to RESULT
|
---|
| 409 | ;" QUIT RESULT
|
---|
| 410 | ;" default value is B64DECODER^TMGRPC1
|
---|
| 411 | ;"
|
---|
| 412 | ;"Output: @GRef is converted to decoded data
|
---|
| 413 | ;"Result: None
|
---|
| 414 |
|
---|
| 415 | if $get(GRef)="" goto DecodeDone
|
---|
| 416 | if $get(incSubscr)="" goto DecodeDone
|
---|
| 417 | set decodeFn=$get(decodeFn,"B64DECODER")
|
---|
| 418 |
|
---|
| 419 | new decoder
|
---|
| 420 | set decoder="set temp=$$"_decodeFn_"(.temp)"
|
---|
| 421 |
|
---|
| 422 | for do quit:(GRef="")
|
---|
| 423 | . new temp
|
---|
| 424 | . set temp=$get(@GRef)
|
---|
| 425 | . if temp="" set GRef="" quit
|
---|
| 426 | . xecute decoder ;"i.e. set temp=$$decoderFn(.temp)
|
---|
| 427 | . set @GRef=temp
|
---|
| 428 | . set GRef=$$NEXTNODE^TMGBINF(GRef,incSubscr,1,1)
|
---|
| 429 |
|
---|
| 430 | DecodeDone
|
---|
| 431 | quit
|
---|
| 432 | ;
|
---|
| 433 | ;
|
---|
| 434 | DELIMAGE(RESULT,TMGIEN,TMGMODE,TMGREASON) ;
|
---|
| 435 | ;"Purpose: Provide functionality for deleting or retacting an image from CPRS
|
---|
| 436 | ;"NOTE: MAGG IMAGE DELETE is not used because it does things like archive
|
---|
| 437 | ;" the images before deletion. I don't have this system fully integrated
|
---|
| 438 | ;" In the future, that could possibly be used.
|
---|
| 439 | ;"NOTE: This function DOES NOT CHECK PERMISSIONS for deleting the images.
|
---|
| 440 | ;" It is assumed that that has been doine PRIOR to calling this function.
|
---|
| 441 | ;"NOTE: It mode is to retract (see below), then the image will not be
|
---|
| 442 | ;" actually be deleted. It will just be marked as retracted and
|
---|
| 443 | ;" set so that it doesn't appear in CPRS.
|
---|
| 444 | ;" --But if mode is to delete, then the record in the IMAGE file
|
---|
| 445 | ;" will be deleted AND ALSO the actual image (with no backup.) This
|
---|
| 446 | ;" mode is for deletion before signing, and the image has not been
|
---|
| 447 | ;" formally entered into the record.
|
---|
| 448 | ;"Input: RESULT -- an OUT Parameter. (See results below)
|
---|
| 449 | ;" TMGIEN -- the IEN in the IMAGE file (2005) to remove
|
---|
| 450 | ;" TMGMODE -- 0 for NONE <-- just exit and do nothing
|
---|
| 451 | ;" 1 for DELETE <-- delete record and image file
|
---|
| 452 | ;" 2 for RETRACT <-- mark record as retracted, don't delete iamge file.
|
---|
| 453 | ;" TMGREASON -- String (10-60 chars) giving reason for deletion.
|
---|
| 454 | ;" This is only used for mode RETRACT.
|
---|
| 455 | ;"Output: RESULT="1^Success" or "-1^Some Failure Message" <-- set up as SINGLE VALUE type in RPC BROKER
|
---|
| 456 | ;
|
---|
| 457 | SET RESULT="1^Success" ;"Default to success
|
---|
| 458 | SET TMGIEN=$GET(TMGIEN,0)
|
---|
| 459 | IF +TMGIEN'>0 DO GOTO DIDN
|
---|
| 460 | . SET RESULT="-1^Invalid IEN: "_TMGIEN
|
---|
| 461 | SET TMGIEN=+TMGIEN
|
---|
| 462 | SET TMGMODE=+$GET(TMGMODE)
|
---|
| 463 | IF TMGMODE=0 DO GOTO DIDN
|
---|
| 464 | . SET RESULT="1^Delete not done because mode=0"
|
---|
| 465 | SET TMGREASON=$GET(TMGREASON,"(Not Specified)")
|
---|
| 466 | NEW TMGPTR SET TMGPTR=+$PIECE($GET(^MAG(2005,TMGIEN,2)),"^",8) ;"2;8 ==> Field 18 = PARENT DATA FILE IMAGE POINTER
|
---|
| 467 | IF TMGPTR'>0 DO GOTO DIDN
|
---|
| 468 | . SET RESULT="-1^FILE 2005, IEN "_TMGIEN_", Field 18 does not point to valid record in file 8925.91"
|
---|
| 469 | NEW TMGTIUPTR SET TMGTIUPTR=+$PIECE($GET(^TIU(8925.91,TMGPTR,0)),"^",1) ;"0;1 ==> Field .01 = DOCUMENT (ptr to 8925)
|
---|
| 470 | IF TMGMODE=1 DO GOTO:(+RESULT'>0) DIDN ;"Delete mode
|
---|
| 471 | . NEW FNAME SET FNAME=$PIECE($GET(^MAG(2005,TMGIEN,0)),"^",2)
|
---|
| 472 | . NEW TMGPATH SET TMGPATH=$$GETLOCFPATH()
|
---|
| 473 | . NEW TMGARRAY,DELRSLT
|
---|
| 474 | . SET TMGARRAY(FNAME)=""
|
---|
| 475 | . SET DELRSLT=$$DEL^%ZISH(TMGPATH,"TMGARRAY")
|
---|
| 476 | . IF DELRSLT=0 DO QUIT
|
---|
| 477 | . . SET RESULT="-1^Unable to delete file: "_TMGPATH_FNAME
|
---|
| 478 | . KILL TMGARRAY
|
---|
| 479 | . NEW FNAME2 SET FNAME2=FNAME
|
---|
| 480 | . SET $PIECE(FNAME2,",",$LENGTH(FNAME2,"."))="ABS"
|
---|
| 481 | . SET TMGARRAY(FNAME2)=""
|
---|
| 482 | . SET DELRSLT=$$DEL^%ZISH(TMGPATH,"TMGARRAY") ;"Ingnore results. Thumbnail not always present
|
---|
| 483 | . NEW DIK SET DIK="^MAG(2005,"
|
---|
| 484 | . NEW DA SET DA=TMGIEN
|
---|
| 485 | . DO ^DIK ;"Kill Record in 2005
|
---|
| 486 | ELSE IF TMGMODE=2 DO GOTO:(+RESULT'>0) DIDN ;"Retract mode
|
---|
| 487 | . NEW TMGFDA,TMGMSG,TMGIENS
|
---|
| 488 | . SET TMGIENS=TMGIEN_","
|
---|
| 489 | . SET TMGFDA(2005,TMGIENS,30)="`"_+DUZ
|
---|
| 490 | . SET TMGFDA(2005,TMGIENS,30.1)="NOW"
|
---|
| 491 | . SET TMGFDA(2005,TMGIENS,30.2)=TMGREASON
|
---|
| 492 | . SET TMGFDA(2005,TMGIENS,18)="@"
|
---|
| 493 | . ;"NOTE: Fld 17 already holds IEN of linked 8925 document
|
---|
| 494 | . DO FILE^DIE("EKT","TMGFDA","TMGMSG")
|
---|
| 495 | . IF $DATA(TMGMSG("DIERR")) DO
|
---|
| 496 | . . SET RESULT="-1^"_$$GetErrStr^TMGDEBUG(.TMGMSG)
|
---|
| 497 | DO ;"Do this for both DELETE and RETRACT modes.
|
---|
| 498 | . NEW DIK SET DIK="^TIU(8925.91,"
|
---|
| 499 | . NEW DA SET DA=TMGPTR
|
---|
| 500 | . DO ^DIK ;"Kill record in 8925.91
|
---|
| 501 | ;
|
---|
| 502 | DIDN QUIT
|
---|
| 503 | ;
|
---|
| 504 | UNRETRACT(RESULT,TMGIEN) ;
|
---|
| 505 | ;"Purpose: to reverse retraction process from DELIMAGE above.
|
---|
| 506 | ;"Input: RESULT -- an OUT Parameter. (See results below)
|
---|
| 507 | ;" TMGIEN -- the IEN in the IMAGE file (2005) to remove
|
---|
| 508 | ;"Output: RESULT="1^Success" or "-1^Some Failure Message" <-- set up as SINGLE VALUE type in RPC BROKER
|
---|
| 509 | SET TMGIEN=$GET(TMGIEN)
|
---|
| 510 | IF +TMGIEN'>0 DO GOTO URDN
|
---|
| 511 | . SET RESULT="-1^Invalid IEN supplied: "_TMGIEN
|
---|
| 512 | SET TMGIEN=+TMGIEN
|
---|
| 513 | NEW TIUPTR SET TIUPTR=+$PIECE($GET(^MAG(2005,TMGIEN,2)),"^",7)
|
---|
| 514 | IF TIUPTR'>0 DO GOTO URDN
|
---|
| 515 | . SET RESULT="-1^Record 2005 doesn't hold link to TIU DOCUMENT in field 17"
|
---|
| 516 | NEW TMGFDA,TMGFDA,TMGIENS
|
---|
| 517 | ;"-- Recreate TIU EXTERNAL DATA LINK record
|
---|
| 518 | KILL TMGFDA
|
---|
| 519 | SET TMGIENS="+1,"
|
---|
| 520 | SET TMGFDA(8925.91,TMGIENS,.01)=TIUPTR
|
---|
| 521 | SET TMGFDA(8925.91,TMGIENS,.02)=TMGIEN
|
---|
| 522 | DO UPDATE^DIE("","TMGFDA","TMGIEN","TMGMSG")
|
---|
| 523 | IF $DATA(TMGMSG("DIERR")) DO GOTO URDN
|
---|
| 524 | . SET RESULT="-1^"_$$GetErrStr^TMGDEBUG(.TMGMSG)
|
---|
| 525 | NEW TIUIMGPTR SET TIUIMGPTR=+$GET(TMGIEN(1))
|
---|
| 526 | IF TIUIMGPTR'>0 DO GOTO URDN
|
---|
| 527 | . SET RESULT="-1^Unable to locate recreated TIU EXTERNAL DATA LINK record"
|
---|
| 528 | ;"-- remove DELETED info from IMAGE record --
|
---|
| 529 | NEW TMGFDA,TMGFDA,TMGIENS
|
---|
| 530 | SET TMGIENS=TMGIEN_","
|
---|
| 531 | SET TMGFDA(2005,TMGIENS,30)="@"
|
---|
| 532 | SET TMGFDA(2005,TMGIENS,30.1)="@"
|
---|
| 533 | SET TMGFDA(2005,TMGIENS,30.2)="@"
|
---|
| 534 | SET TMGFDA(2005,TMGIENS,18)=TIUIMGPTR
|
---|
| 535 | DO FILE^DIE("EKT","TMGFDA","TMGMSG")
|
---|
| 536 | IF $DATA(TMGMSG("DIERR")) DO GOTO URDN
|
---|
| 537 | . SET RESULT="-1^"_$$GetErrStr^TMGDEBUG(.TMGMSG)
|
---|
| 538 |
|
---|
| 539 | URDN QUIT
|
---|