[796] | 1 | TMGTIU02 ;TMG/TIU Text Object Expansion Fns;04/15/10
|
---|
| 2 | ;;1.0;TMG-LIB;**1**;04/15/10
|
---|
| 3 | ;
|
---|
| 4 | ;"Kevin Toppenberg MD
|
---|
| 5 | ;"GNU General Public License (GPL) applies
|
---|
| 6 | ;"04/15/10
|
---|
| 7 | ;
|
---|
| 8 | ;"=======================================================================
|
---|
| 9 | ;"PUBLIC FUNCTIONS
|
---|
| 10 | ;"=======================================================================
|
---|
| 11 | ;
|
---|
| 12 | ;"=======================================================================
|
---|
| 13 | ;"PRIVATE FUNCTIONS
|
---|
| 14 | ;"=======================================================================
|
---|
| 15 | ;
|
---|
| 16 | ;"=======================================================================
|
---|
| 17 | ;
|
---|
| 18 | GETPTFLD(DFN,PARAM) ;
|
---|
| 19 | ;"Purpose: This is the server-side code for the TIU TEXT OBJECT, which
|
---|
| 20 | ;" will allow the user to retrieve a field from the PATIENT file.
|
---|
| 21 | ;"NOTE: This requires that patch TMG-CPRS-TEXTOBJ-PARAM*1.0*1 or later
|
---|
| 22 | ;" be installed, to allow passing in of parameters from the CPRS client.
|
---|
| 23 | ;"Input: DFN -- This should be the IEN of the currently open patient
|
---|
| 24 | ;" Param -- Field(s)^Flags^FormatString. Details below
|
---|
| 25 | ;" Field(s) -- required. Options for input:
|
---|
| 26 | ;" - A single field number or name
|
---|
| 27 | ;" - A list of field numbers (or names), separated by semicolons
|
---|
| 28 | ;" - A range of field numbers (or names), in the form M:N,
|
---|
| 29 | ;" where M and N are the end points of the inclusive range.
|
---|
| 30 | ;" All field numbers within this range are retrieved.
|
---|
| 31 | ;" - A '*' for all fields at the top level (no sub-multiple record).
|
---|
| 32 | ;" - A '**' for all fields including all fields and data in sub-multiple fields.
|
---|
| 33 | ;" - Field number (or name) of a multiple followed by an * to indicate all
|
---|
| 34 | ;" fields and records in the sub-multiple for that field.
|
---|
| 35 | ;" Invalid field names will be ignored
|
---|
| 36 | ;" Flags -- Optional.
|
---|
| 37 | ;" - 'F' -- include field name in results with value. e.g. "AGE: 43" instead of just "43"
|
---|
| 38 | ;" - This flag is ignored if a FormatString is provided (see below)
|
---|
| 39 | ;" - 'S' -- Keep all data values on a single line, separated by ';'.
|
---|
| 40 | ;" - If flag not provided, and multiple data fields are requested,
|
---|
| 41 | ;" - then the default is that each data value will be separated by a
|
---|
| 42 | ;" - CRLF [$C(13)_$C(10)]
|
---|
| 43 | ;" - This flag is ignored if a FormatString is provided (see below)
|
---|
| 44 | ;" - 'R' -- Resolve fields to NAMES, even if a field NUMBER was used for input request
|
---|
| 45 | ;" - Note: this will affect the sorting order of the output (see FormatString
|
---|
| 46 | ;" - info below). I.e. if R not specified, and field NUMBERS are used for input,
|
---|
| 47 | ;" - then results will be returned in numerical field number order by default.
|
---|
| 48 | ;" - If R is specified, then field numbers are converted to field NAMES, and that
|
---|
| 49 | ;" - is used to determine the order of output.
|
---|
| 50 | ;" - 'N' -- Don't return values for empty fields. This is helpful if ALL fields
|
---|
| 51 | ;" - were requested via '*'
|
---|
| 52 | ;" FormatString -- A string to determine how results are passed back....
|
---|
| 53 | ;" NOTE: without a format string, results will be passed back in the order returned
|
---|
| 54 | ;" by fileman. I.e. if user requested fields "SEX;.01;AGE", then Fileman will
|
---|
| 55 | ;" place results into an array, which MUMPS will sort alphabetically, e.g.
|
---|
| 56 | ;" .01, then AGE, then SEX. If "*" fields are requested, it would be even
|
---|
| 57 | ;" more complex. A format string will allow the user to specify ORDER.
|
---|
| 58 | ;" Format: e.g. "Any arbitrary text %FieldNameOrNum% more text %FieldNameOrNum% ..."
|
---|
| 59 | ;" (The goal was to follow the method used by printf in the c language.)
|
---|
| 60 | ;" - Any arbitrary text can be included.
|
---|
| 61 | ;" - Field numbers or names should be enclosed by the '%' character
|
---|
| 62 | ;" These will be replaced with actual data values.
|
---|
| 63 | ;" - '\n' can be included to specify line breaks
|
---|
| 64 | ;" - '%%' will be used to show a '%' in the output text
|
---|
| 65 | ;" - Invalid, or non-matching, field names/numbers will be ignored.
|
---|
| 66 | ;"
|
---|
| 67 | ;"Results: returns a string that will be sent back to CPRS, to be included in a text note
|
---|
| 68 | ;"NOTE: I have chosen to make this function work with only file 2 (PATIENT FILE). I think
|
---|
| 69 | ;" it could be a security violation if any CPRS user was able to look at any arbitrary file.
|
---|
| 70 | ;"
|
---|
| 71 | ;"Examples of PARAM inputs:
|
---|
| 72 | ;" '.01' -- returns .01 field, which is the patients NAME, e.g. "SMITH,JOHN A"
|
---|
| 73 | ;" 'NAME' -- returns same value as above, e.g. "SMITH,JOHN A"
|
---|
| 74 | ;" 'NAME^F' -- e.g result "NAME: SMITH,JOHN A"
|
---|
| 75 | ;" 'NAME;SEX;AGE^F' --> "AGE: 34"_$C(13)_$C(10)_"NAME: SMITH,JOHN A"_$C(13)_$C(10)_"SEX: MALE"
|
---|
| 76 | ;" 'NAME;SEX;AGE^S' --> "34; SMITH,JOHN A; MALE"
|
---|
| 77 | ;" 'NAME;SEX;AGE^^"NAME: %NAME%, %AGE% yrs., %SEX%"' --> "NAME: SMITH,JOHN A, 34 YRS., MALE"
|
---|
| 78 | ;"
|
---|
| 79 | NEW TMGFLDS,TMGFLAGS
|
---|
| 80 | NEW TMGFILE SET TMGFILE=2
|
---|
| 81 | NEW RESULT SET RESULT=""
|
---|
| 82 | SET PARAM=$GET(PARAM)
|
---|
| 83 | SET TMGFLDS=$PIECE(PARAM,"^",1)
|
---|
| 84 | IF TMGFLDS="" DO GOTO GPDN
|
---|
| 85 | . SET RESULT="ERROR: No input parameter. Example of use: |TMG PATIENT FLD{AGE}|"
|
---|
| 86 | SET DFN=$GET(DFN)
|
---|
| 87 | IF +DFN'>0 DO GOTO GPDN
|
---|
| 88 | . SET RESULT="ERROR: Internal patient value DFN not defined. Contact IRM"
|
---|
| 89 | NEW TMGIENS SET TMGIENS=DFN_","
|
---|
| 90 | SET TMGFLAGS=""
|
---|
| 91 | NEW TMGTEMP SET TMGTEMP=$$UP^XLFSTR($PIECE(PARAM,"^",2))
|
---|
| 92 | IF TMGTEMP["N" SET TMGFLAGS=TMGFLAGS_"N"
|
---|
| 93 | IF TMGTEMP["F" SET TMGFLAGS=TMGFLAGS_"R"
|
---|
| 94 | NEW TMGFORMAT SET TMGFORMAT=$PIECE(PARAM,"^",3)
|
---|
| 95 | NEW TMGOUT,TMGMSG
|
---|
| 96 | DO GETS^DIQ(TMGFILE,TMGIENS,TMGFLDS,TMGFLAGS,"TMGOUT","TMGMSG")
|
---|
| 97 | IF $DATA(TMGMSG("DIERR")) DO GOTO GPDN
|
---|
| 98 | . SET RESULT=$$GetErrStr^TMGDEBUG(.TMGMSG)
|
---|
| 99 | NEW FLD,FLDNAME
|
---|
| 100 | SET FLD=""
|
---|
| 101 | IF TMGFORMAT="" DO
|
---|
| 102 | . FOR SET FLD=$ORDER(TMGOUT(TMGFILE,TMGIENS,FLD)) QUIT:(FLD="") DO
|
---|
| 103 | . . IF $DATA(TMGOUT(TMGFILE,TMGIENS,FLD,0)) QUIT ;"For now, WP fields are not supported. Could add later if needed.
|
---|
| 104 | . . NEW VALUE SET VALUE=$GET(TMGOUT(TMGFILE,TMGIENS,FLD))
|
---|
| 105 | . . IF VALUE="",TMGTEMP["N" QUIT
|
---|
| 106 | . . IF RESULT'="" DO
|
---|
| 107 | . . . IF TMGTEMP["S" SET RESULT=RESULT_"; "
|
---|
| 108 | . . . ELSE SET RESULT=RESULT_$CHAR(13)_$CHAR(10)
|
---|
| 109 | . . IF TMGTEMP["F" DO
|
---|
| 110 | . . . IF FLD'=+FLD SET FLDNAME=FLD
|
---|
| 111 | . . . ELSE SET FLDNAME=$PIECE($GET(^DD(TMGFILE,FLD,0)),"^",1)
|
---|
| 112 | . . . SET RESULT=RESULT_FLDNAME_": "
|
---|
| 113 | . . SET RESULT=RESULT_VALUE
|
---|
| 114 | ELSE DO ;"Handle format strings.
|
---|
| 115 | . SET RESULT=TMGFORMAT
|
---|
| 116 | . FOR QUIT:(RESULT'["%") DO
|
---|
| 117 | . . NEW SUBA,SUBB
|
---|
| 118 | . . SET SUBA=$PIECE(RESULT,"%",1)
|
---|
| 119 | . . SET FLD=$PIECE(RESULT,"%",2)
|
---|
| 120 | . . SET SUBB=$PIECE(RESULT,"%",3,999)
|
---|
| 121 | . . NEW VALUE
|
---|
| 122 | . . IF FLD="" SET VALUE="<@!@>" ;"protect %%, later convert back to '%'
|
---|
| 123 | . . ELSE SET VALUE=$GET(TMGOUT(TMGFILE,TMGIENS,FLD))
|
---|
| 124 | . . IF VALUE="" DO
|
---|
| 125 | . . . IF FLD=+FLD DO
|
---|
| 126 | . . . . SET FLD=$PIECE($GET(^DD(TMGFILE,FLD,0)),"^",1) ;"Convert # to name
|
---|
| 127 | . . . ELSE DO
|
---|
| 128 | . . . . SET FLD=$ORDER(^DD(TMGFILE,"B",FLD,"")) ;"Convert name to #
|
---|
| 129 | . . . IF FLD'="" SET VALUE=$GET(TMGOUT(TMGFILE,TMGIENS,FLD))
|
---|
| 130 | . . . IF VALUE="" SET VALUE="??"
|
---|
| 131 | . . SET RESULT=SUBA_VALUE_SUBB
|
---|
| 132 | . NEW TMGALT
|
---|
| 133 | . SET TMGALT("<@!@>")="%"
|
---|
| 134 | . SET TMGALT("\n")=$CHAR(13)_$CHAR(10)
|
---|
| 135 | . SET RESULT=$$REPLACE^XLFSTR(RESULT,.TMGALT)
|
---|
| 136 | ;
|
---|
| 137 | GPDN QUIT RESULT |
---|