| 1 | TMGSRCH2 ;TMG/kst/Search API ; 6/19/10
 | 
|---|
| 2 |         ;;1.0;TMG-LIB;**1**;06/19/10
 | 
|---|
| 3 |         ;
 | 
|---|
| 4 |  ;"TMG Search only in TIU documents for 1 patient
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;"Copyright Kevin Toppenberg MD 6/19/10
 | 
|---|
| 7 |  ;"Released under GNU General Public License (GPL)
 | 
|---|
| 8 |  ;"
 | 
|---|
| 9 |  ;"=======================================================================
 | 
|---|
| 10 |  ;" RPC -- Public Functions.
 | 
|---|
| 11 |  ;"=======================================================================
 | 
|---|
| 12 |  ;"LAUNCHSR(DFN,TMGSRCH) --Launch background task to achieve search
 | 
|---|
| 13 |  ;"STATUS() -- Get status of background searching task
 | 
|---|
| 14 |  ;"RESULTS(OUT) -- get result from background search
 | 
|---|
| 15 |  ;"CLEAR -- Tell background task to stop, and clear data array
 | 
|---|
| 16 |  ;"STOP --Tell background task to stop searching
 | 
|---|
| 17 |  ;"=======================================================================
 | 
|---|
| 18 |  ;"PRIVATE API FUNCTIONS
 | 
|---|
| 19 |  ;"=======================================================================
 | 
|---|
| 20 |  ;"CHANGESRCH(BKJOB,DFN,TMGSRCH) -- tell background task to change search parameters
 | 
|---|
| 21 |  ;"MSG(BKJOB,MSG) -- Purpose to message background task
 | 
|---|
| 22 |  ;"SRCHTIU(DFN,TMGSRCH,PARENTJOB) -- search all of one patient's documents for requested words
 | 
|---|
| 23 |  ;"PREPSRCH(PARENTJOB,DFN,TMGSRCH,WORDS,IENLIST) -- Parse search phrase, user prior runs if possible.
 | 
|---|
| 24 |  ;"PARSSRCH(TMGSRCH,WORDS) -- Separate search phrase out into array of words
 | 
|---|
| 25 |  ;"SRCH1TIU(PARENTJOB,IEN,TERM) -- Search TIU DOCUMENT report text for TERM
 | 
|---|
| 26 |  ;"=======================================================================
 | 
|---|
| 27 |  ;"=======================================================================
 | 
|---|
| 28 |  ;"Dependencies:
 | 
|---|
| 29 |  ;"=======================================================================
 | 
|---|
| 30 |  ;"=======================================================================
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 | LAUNCHSR(DFN,TMGSRCH) ;
 | 
|---|
| 33 |         ;"Purpose: Launch background task to achieve search
 | 
|---|
| 34 |         ;"Input: DFN -- The patient IEN to look up.
 | 
|---|
| 35 |         ;"       TMGSRCH -- Search string.  Notes:
 | 
|---|
| 36 |         ;"             Each word (or partial word) to look up is separated by spaces
 | 
|---|
| 37 |         ;"             All words are combined in AND fashion
 | 
|---|
| 38 |         ;"             Search is NOT case sensitive.
 | 
|---|
| 39 |         ;"             Exact pharases can be specified by quotes.
 | 
|---|
| 40 |         ;"             Example: 'dog cat monkey "in a barrel"
 | 
|---|
| 41 |         NEW THISJOB SET THISJOB=$J
 | 
|---|
| 42 |         NEW STATUS SET STATUS=$GET(^TMG("TMP","SEARCH","SRCHTIU",THISJOB,"MSG"))
 | 
|---|
| 43 |         IF STATUS="BKGND RUNNING" DO
 | 
|---|
| 44 |         . DO CHANGESRCH(DFN,TMGSRCH)
 | 
|---|
| 45 |         ELSE  DO
 | 
|---|
| 46 |         . NEW DEBUG SET DEBUG=0
 | 
|---|
| 47 |         . IF DEBUG=0 DO   ;"Can be changed when stepping through code.
 | 
|---|
| 48 |         . . KILL ^TMG("TMP","SEARCH","SRCHTIU",THISJOB)
 | 
|---|
| 49 |         . . JOB SRCHTIU(DFN,TMGSRCH,THISJOB)
 | 
|---|
| 50 |         . . SET ^TMG("TMP","SEARCH","SRCHTIU",THISJOB,"BACKGROUND")=$ZJOB
 | 
|---|
| 51 |         . ELSE  DO 
 | 
|---|
| 52 |         . . DO SRCHTIU(DFN,TMGSRCH,THISJOB)
 | 
|---|
| 53 |         QUIT
 | 
|---|
| 54 |         ;
 | 
|---|
| 55 |         ;
 | 
|---|
| 56 | STATUS() ;
 | 
|---|
| 57 |         ;"Purpose: To check status of background searching task
 | 
|---|
| 58 |         ;"Input: none
 | 
|---|
| 59 |         ;"Output: returns 1^status string, or "1^" if none
 | 
|---|
| 60 |         NEW RESULT
 | 
|---|
| 61 |         SET RESULT=$GET(^TMG("TMP","SEARCH","SRCHTIU",$J,"MSG"))
 | 
|---|
| 62 |         IF +$PIECE(RESULT,"^",1)'=$PIECE(RESULT,"^",1) SET RESULT="1^"_RESULT
 | 
|---|
| 63 | STATDN  QUIT RESULT       
 | 
|---|
| 64 |         ;
 | 
|---|
| 65 |         ;
 | 
|---|
| 66 | RESULTS(OUT) ;
 | 
|---|
| 67 |         ;"Purpose: To get result from background search
 | 
|---|
| 68 |         ;"Input: OUT -- PASS BY REFERENCE.  An OUT PARAMETER.  Format 
 | 
|---|
| 69 |         ;"              OUT(0)=FoundCount^Success, or -1^Message
 | 
|---|
| 70 |         ;"              OUT(1)=IEN1
 | 
|---|
| 71 |         ;"              OUT(2)=IEN2 ... etc.
 | 
|---|
| 72 |         NEW STATUS SET STATUS=$$STATUS()
 | 
|---|
| 73 |         IF +STATUS=-1 SET OUT(0)=STATUS GOTO RSLTDN
 | 
|---|
| 74 |         ;"IF STATUS'="DONE" SET OUT(0)="-1^Search not completed"
 | 
|---|
| 75 |         NEW IENLIST MERGE IENLIST=^TMG("TMP","SEARCH","SRCHTIU",$J,"IEN LIST")
 | 
|---|
| 76 |         NEW CT SET CT=0
 | 
|---|
| 77 |         NEW IEN SET IEN=0
 | 
|---|
| 78 |         FOR  SET IEN=$ORDER(IENLIST(IEN)) QUIT:(+IEN'>0)  DO
 | 
|---|
| 79 |         . SET CT=CT+1
 | 
|---|
| 80 |         . SET OUT(CT)=IEN
 | 
|---|
| 81 |         IF $DATA(OUT)=0 SET OUT(0)="-1^No results found"
 | 
|---|
| 82 |         ELSE  SET OUT(0)=(CT-1)_"^Success" 
 | 
|---|
| 83 | RSLTDN  QUIT        
 | 
|---|
| 84 |         ;
 | 
|---|
| 85 |         ;
 | 
|---|
| 86 | CLEAR   ;"Purpose: Tell background task to stop, and clear data array
 | 
|---|
| 87 |         DO STOP
 | 
|---|
| 88 |         KILL ^TMG("TMP","SEARCH","SRCHTIU",$J)
 | 
|---|
| 89 |         QUIT
 | 
|---|
| 90 |         ;
 | 
|---|
| 91 |         ;
 | 
|---|
| 92 | STOP    ;"Purpose: Tell background task to stop searching
 | 
|---|
| 93 |         DO MSG("STOP")
 | 
|---|
| 94 |         QUIT
 | 
|---|
| 95 |         ;
 | 
|---|
| 96 |         ;
 | 
|---|
| 97 | CHANGESRCH(DFN,TMGSRCH) ;
 | 
|---|
| 98 |         ;"Purpose: to tell background task to change search parameters
 | 
|---|
| 99 |         DO MSG("RESTART^"_DFN_"^"_TMGSRCH)
 | 
|---|
| 100 |         QUIT
 | 
|---|
| 101 |         ;
 | 
|---|
| 102 |         ;
 | 
|---|
| 103 | MSG(MSG) ;        
 | 
|---|
| 104 |         ;"Purpose to message background task
 | 
|---|
| 105 |         SET ^TMG("TMP","SEARCH","SRCHTIU",$J,"MSG")=MSG
 | 
|---|
| 106 |         QUIT
 | 
|---|
| 107 |         ;
 | 
|---|
| 108 |         ;
 | 
|---|
| 109 |  ;"==========================================================================       
 | 
|---|
| 110 | SRCHTIU(DFN,TMGSRCH,PARENTJOB) ;
 | 
|---|
| 111 |         ;"Purpose: To search all of one patient's documents for requested words
 | 
|---|
| 112 |         ;"Input: DFN -- The patient IEN to look up.
 | 
|---|
| 113 |         ;"       TMGSRCH -- Search string.  Notes:
 | 
|---|
| 114 |         ;"             Each word (or partial word) to look up is separated by spaces
 | 
|---|
| 115 |         ;"             All words are combined in AND fashion
 | 
|---|
| 116 |         ;"             Search is NOT case sensitive.
 | 
|---|
| 117 |         ;"             Exact pharases can be specified by quotes.
 | 
|---|
| 118 |         ;"             Example: 'dog cat monkey "in a barrel"
 | 
|---|
| 119 |         ;"       PARENTJOB -- the job of the RPCBroker task that called this.
 | 
|---|
| 120 |         ;"NOTE:  this routine will monitor global for messages:
 | 
|---|
| 121 |         ;"             ^TMG("TMP","SEARCH","SRCHTIU",PARENTJOB,"MSG")=message
 | 
|---|
| 122 |         ;"             If message of "STOP" is found, then search will be stopped.
 | 
|---|
| 123 |         ;"Output: Matching documents will be stored at:
 | 
|---|
| 124 |         ;"             ^TMG("TMP","SEARCH","SRCHTIU",PARENTJOB,"IEN LIST",IEN)=""
 | 
|---|
| 125 |         ;"             ^TMG("TMP","SEARCH","SRCHTIU",PARENTJOB,"IEN LIST",IEN)=""
 | 
|---|
| 126 |         ;"             ^TMG("TMP","SEARCH","SRCHTIU",PARENTJOB,"DFN")=DFN
 | 
|---|
| 127 |         ;"             ^TMG("TMP","SEARCH","SRCHTIU",PARENTJOB,"FILTER",FilterValue)=""
 | 
|---|
| 128 |         ;"             ^TMG("TMP","SEARCH","SRCHTIU",PARENTJOB,"FILTER",FilterValue)=""
 | 
|---|
| 129 |         ;"        When search is done, then message will be stored as
 | 
|---|
| 130 |         ;"             ^TMG("TMP","SEARCH","SRCHTIU",PARENTJOB,"MSG")="DONE"
 | 
|---|
| 131 |         ;"Results: none
 | 
|---|
| 132 |         ;"NOTE: This function is designed so that it can do searching on the fly,
 | 
|---|
| 133 |         ;"      as the user is typing in additional terms.  Thus, if a prior
 | 
|---|
| 134 |         ;"      search is found, and the prior search doesn't contain any terms
 | 
|---|
| 135 |         ;"      that are not in the current search, then this search cycle will
 | 
|---|
| 136 |         ;"      start with the results of the prior search.
 | 
|---|
| 137 |         ;"      --A consequence of this is that a search of all the documents
 | 
|---|
| 138 |         ;"      will be done first for search term #1, and then term #2, RATHER
 | 
|---|
| 139 |         ;"      THAN searching 1 document for all the search terms.  This should
 | 
|---|
| 140 |         ;"      not cause too much of a performace hit because searches for other 
 | 
|---|
| 141 |         ;"      terms will be limited to matches for earlier terms
 | 
|---|
| 142 |         ;
 | 
|---|
| 143 |         NEW ABORT,IEN,IENLIST
 | 
|---|
| 144 |         NEW DEBUGI SET DEBUGI=0
 | 
|---|
| 145 |         SET DFN=+$GET(DFN)
 | 
|---|
| 146 |         SET TMGSRCH=$GET(TMGSRCH)
 | 
|---|
| 147 |         NEW REF SET REF=$NAME(^TMG("TMP","SEARCH","SRCHTIU",PARENTJOB))
 | 
|---|
| 148 | L1      SET @REF@("MSG")="BKGND RUNNING"
 | 
|---|
| 149 |         DO PREPSRCH(PARENTJOB,DFN,TMGSRCH,.WORDS,.IENLIST)
 | 
|---|
| 150 |         SET ABORT=0
 | 
|---|
| 151 |         NEW TERMCT,TERM
 | 
|---|
| 152 |         FOR TERMCT=1:1 SET TERM=$GET(WORDS(TERMCT)) QUIT:(TERM="")!ABORT  DO
 | 
|---|
| 153 |         . ;"SET @REF@("DEBUG",DEBUGI)="TERM="_TERM,DEBUGI=DEBUGI+1
 | 
|---|
| 154 |         . KILL @REF@("IEN LIST") ;"List will get progressively smaller.  So kill and reset each cycle.
 | 
|---|
| 155 |         . ;"SET @REF@("DEBUG",DEBUGI)="@REF@('IENLIST') killed",DEBUGI=DEBUGI+1
 | 
|---|
| 156 |         . SET IEN=0
 | 
|---|
| 157 |         . FOR  SET IEN=$ORDER(IENLIST(IEN)) QUIT:(+IEN'>0)!(ABORT)  DO
 | 
|---|
| 158 |         . . ;"SET @REF@("DEBUG",DEBUGI)="IEN="_IEN,DEBUGI=DEBUGI+1
 | 
|---|
| 159 |         . . NEW MSG SET MSG=@REF@("MSG")
 | 
|---|
| 160 |         . . IF MSG="STOP" SET ABORT=1 QUIT
 | 
|---|
| 161 |         . . IF MSG="RESTART" SET ABORT=2 QUIT
 | 
|---|
| 162 |         . . NEW SRCHRSLT SET SRCHRSLT=$$SRCH1TIU(PARENTJOB,IEN,TERM)
 | 
|---|
| 163 |         . . ;"SET @REF@("DEBUG",DEBUGI)="Search 1 result="_SRCHRSLT,DEBUGI=DEBUGI+1
 | 
|---|
| 164 |         . . IF SRCHRSLT=0 KILL IENLIST(IEN)
 | 
|---|
| 165 |         . . ELSE  IF (SRCHRSLT<0) SET ABORT=-SRCHRSLT
 | 
|---|
| 166 |         . . ;"SET @REF@("DEBUG",DEBUGI)="IENList count="_$$ListCt^TMGMISC("IENLIST"),DEBUGI=DEBUGI+1
 | 
|---|
| 167 |         . IF ABORT=0 DO
 | 
|---|
| 168 |         . . ;"SET @REF@("DEBUG",DEBUGI)="ABOUT TO MERGE00IENList count="_$$ListCt^TMGMISC("IENLIST"),DEBUGI=DEBUGI+1
 | 
|---|
| 169 |         . . ;"SET @REF@("DEBUG",DEBUGI)="merging",DEBUGI=DEBUGI+1
 | 
|---|
| 170 |         . . MERGE @REF@("IEN LIST")=IENLIST
 | 
|---|
| 171 |         . . ;"SET @REF@("DEBUG",DEBUGI)="@REF@(IENList count="_$$ListCt^TMGMISC($name(@REF@("IEN LIST"))),DEBUGI=DEBUGI+1
 | 
|---|
| 172 |         . . ;"SET @REF@("DEBUG",DEBUGI)="REF="_REF,DEBUGI=DEBUGI+1
 | 
|---|
| 173 |         . . SET @REF@("FILTER",TERM)=""
 | 
|---|
| 174 |         ;"SET @REF@("DEBUG",DEBUGI)="ABORT="_ABORT,DEBUGI=DEBUGI+1
 | 
|---|
| 175 |         IF ABORT=2 GOTO L1 ;"Restart
 | 
|---|
| 176 |         ;"SET @REF@("DEBUG",DEBUGI)="@REF@(IENList count="_$$ListCt^TMGMISC($name(@REF@("IEN LIST"))),DEBUGI=DEBUGI+1
 | 
|---|
| 177 |         SET @REF@("MSG")="DONE"
 | 
|---|
| 178 |         KILL @REF@("BACKGROUND")
 | 
|---|
| 179 |         ;"SET @REF@("DEBUG",DEBUGI)="@REF@(IENList count="_$$ListCt^TMGMISC($name(@REF@("IEN LIST"))),DEBUGI=DEBUGI+1
 | 
|---|
| 180 |         QUIT ;"This will cause thie JOB'd task to exit and stop execution
 | 
|---|
| 181 |         ;
 | 
|---|
| 182 |         ;
 | 
|---|
| 183 | PREPSRCH(PARENTJOB,DFN,TMGSRCH,WORDS,IENLIST) ;
 | 
|---|
| 184 |         ;"Purpose: To Parse the search phrase, and look for prior runs, and use
 | 
|---|
| 185 |         ;"         that work if possible.
 | 
|---|
| 186 |         ;"Input: PARENTJOB -- the job of the RPCBroker task that called this.
 | 
|---|
| 187 |         ;"       DFN -- The patient IEN to look up.
 | 
|---|
| 188 |         ;"       TMGSRCH -- The Search Phrase.  See docs in SRCHTIU
 | 
|---|
| 189 |         ;"            e.g: 'dog cat monkey "in a barrel"
 | 
|---|
| 190 |         ;"       WORDS -- PASS BY REFERENCE.  An OUT PARAMETER.  Format:
 | 
|---|
| 191 |         ;"             WORDS(WordOrPhrase)=""
 | 
|---|
| 192 |         ;"             e.g. WORDS(1)="DOG"
 | 
|---|
| 193 |         ;"                  WORDS(2)="CAT"
 | 
|---|
| 194 |         ;"                  WORDS(3)="MONKEY"
 | 
|---|
| 195 |         ;"                  WORDS(4)="IN A BARREL"
 | 
|---|
| 196 |         ;"             Note: If prior run is being built upon, then entries that
 | 
|---|
| 197 |         ;"                   have already been searched for will be removed.
 | 
|---|
| 198 |         ;"Results: none
 | 
|---|
| 199 |         DO PARSSRCH(TMGSRCH,.WORDS)
 | 
|---|
| 200 |         NEW REF SET REF=$NAME(^TMG("TMP","SEARCH","SRCHTIU",PARENTJOB))
 | 
|---|
| 201 |         KILL IENLIST
 | 
|---|
| 202 |         NEW NEWSRCH SET NEWSRCH=0  ;"Boolean for need to start over a new search        
 | 
|---|
| 203 |         IF $GET(@REF@("DFN"))'=DFN SET NEWSRCH=1 GOTO NS        
 | 
|---|
| 204 |         ;"Look through all prior filters and see if any filters applied that
 | 
|---|
| 205 |         ;"   are not in current search
 | 
|---|
| 206 |         NEW FILTERS,CT
 | 
|---|
| 207 |         FOR CT=1:1 QUIT:$DATA(WORDS(CT))=0  SET FILTERS($GET(WORDS(CT)))=1
 | 
|---|
| 208 |         NEW OLDFILTER MERGE OLDFILTER=@REF@("FILTER")
 | 
|---|
| 209 |         NEW OFLTR SET OFLTR=""
 | 
|---|
| 210 |         FOR  SET OFLTR=$ORDER(OLDFILTER(OFLTR)) QUIT:(OFLTR="")!NEWSRCH  DO
 | 
|---|
| 211 |         . IF $GET(FILTERS(OFLTR))=1 KILL FILTERS(OFLTR) QUIT ;"filter term used before, so delete from use again        
 | 
|---|
| 212 |         . ;"Now check if new filters contain a longer verson of old term.  I.e. prior 
 | 
|---|
| 213 |         . ;"  filter term was 'kitt' and now it is 'kitten'
 | 
|---|
| 214 |         . NEW FOUND SET FOUND=0 
 | 
|---|
| 215 |         . NEW F SET F=""
 | 
|---|
| 216 |         . FOR  SET F=$ORDER(FILTERS(F)) QUIT:(F="")!FOUND  DO
 | 
|---|
| 217 |         . . IF $EXTRACT(F,1,$LENGTH(OFLTR))'=OFLTR QUIT
 | 
|---|
| 218 |         . . SET FOUND=1
 | 
|---|
| 219 |         . . KILL @REF@("FILTER",OFLTR) ;"Remove old partial term from history
 | 
|---|
| 220 |         . IF FOUND=0 SET NEWSRCH=1 ;"A filter was put on old set that is not in new set, so start over
 | 
|---|
| 221 | NS      IF NEWSRCH=1 DO
 | 
|---|
| 222 |         . MERGE IENLIST=^TIU(8925,"C",DFN)
 | 
|---|
| 223 |         . KILL @REF@("IEN LIST")
 | 
|---|
| 224 |         . KILL @REF@("FILTER")        
 | 
|---|
| 225 |         ELSE  DO
 | 
|---|
| 226 |         . MERGE IENLIST=^TMG("TMP","SEARCH","SRCHTIU",$J,"IEN LIST")
 | 
|---|
| 227 |         . ;"Recreate WORDS array as numbered list with just desired entries
 | 
|---|
| 228 |         . SET CT=0 FOR  SET CT=$ORDER(WORDS(CT)) QUIT:(CT="")  DO
 | 
|---|
| 229 |         . . IF $DATA(FILTERS(WORDS(CT)))=0 KILL WORDS(CT) ;"Kill all entries in WORDS not in FILTERS
 | 
|---|
| 230 |         . NEW I SET I=1
 | 
|---|
| 231 |         . NEW TEMP
 | 
|---|
| 232 |         . SET CT=0 FOR  SET CT=$ORDER(WORDS(CT)) QUIT:(CT="")  DO
 | 
|---|
| 233 |         . . SET TEMP(I)=$GET(WORDS(CT)),I=I+1
 | 
|---|
| 234 |         . KILL WORDS MERGE WORDS=TEMP
 | 
|---|
| 235 |         SET @REF@("DFN")=DFN
 | 
|---|
| 236 |         QUIT        
 | 
|---|
| 237 |         ;
 | 
|---|
| 238 |         ; 
 | 
|---|
| 239 | PARSSRCH(TMGSRCH,WORDS) ;
 | 
|---|
| 240 |         ;"Purpose: Separate search phrase out into array of words
 | 
|---|
| 241 |         ;"Input: TMGSRCH -- The Search Phrase.  See docs in SRCHTIU
 | 
|---|
| 242 |         ;"            e.g: 'dog cat monkey "in a barrel"
 | 
|---|
| 243 |         ;"       WORDS -- PASS BY REFERENCE.  An OUT PARAMETER.  Format:
 | 
|---|
| 244 |         ;"             WORDS(WordOrPhrase)=""
 | 
|---|
| 245 |         ;"             e.g. WORDS(1)="DOG"
 | 
|---|
| 246 |         ;"                  WORDS(2)="CAT"
 | 
|---|
| 247 |         ;"                  WORDS(3)="MONKEY"
 | 
|---|
| 248 |         ;"                  WORDS(4)="IN A BARREL"
 | 
|---|
| 249 |         ;"Results: none
 | 
|---|
| 250 |         KILL WORDS
 | 
|---|
| 251 |         SET TMGSRCH=$GET(TMGSRCH)
 | 
|---|
| 252 |         NEW CT SET CT=0
 | 
|---|
| 253 |         NEW ENTRY,POS
 | 
|---|
| 254 |         FOR  QUIT:(TMGSRCH="")  DO
 | 
|---|
| 255 |         . SET TMGSRCH=$$TRIM^XLFSTR(TMGSRCH)
 | 
|---|
| 256 |         . IF $EXTRACT(TMGSRCH,1)="""" DO
 | 
|---|
| 257 |         . . SET ENTRY=$$GetWord^TMGSTUTL(TMGSRCH,2,"""","""")
 | 
|---|
| 258 |         . . IF ENTRY'="" DO
 | 
|---|
| 259 |         . . . SET CT=CT+1
 | 
|---|
| 260 |         . . . SET WORDS(CT)=$$UP^XLFSTR(ENTRY)
 | 
|---|
| 261 |         . . SET ENTRY=""""_ENTRY
 | 
|---|
| 262 |         . . IF $FIND(TMGSRCH,ENTRY_"""")>0 SET ENTRY=ENTRY_""""
 | 
|---|
| 263 |         . . NEW SPEC
 | 
|---|
| 264 |         . . SET SPEC(ENTRY)=""
 | 
|---|
| 265 |         . . SET SPEC("  ")=" "
 | 
|---|
| 266 |         . . SET TMGSRCH=$$REPLACE^XLFSTR(TMGSRCH,.SPEC)
 | 
|---|
| 267 |         . SET ENTRY=$PIECE(TMGSRCH," ",1)
 | 
|---|
| 268 |         . SET $PIECE(TMGSRCH," ",1)=""
 | 
|---|
| 269 |         . IF ENTRY'="" DO
 | 
|---|
| 270 |         . . SET CT=CT+1
 | 
|---|
| 271 |         . . SET WORDS(CT)=$$UP^XLFSTR(ENTRY)
 | 
|---|
| 272 |         QUIT
 | 
|---|
| 273 |         ;
 | 
|---|
| 274 |         ;
 | 
|---|
| 275 | SRCH1TIU(PARENTJOB,IEN,TERM) ;
 | 
|---|
| 276 |         ;"Purpose: Search TIU DOCUMENT report text for TERM
 | 
|---|
| 277 |         ;"Input: IEN -- IEN in 8925
 | 
|---|
| 278 |         ;"       TERM -- a word, or phrase, to search for in report text
 | 
|---|
| 279 |         ;"NOTE: Not case sensitive
 | 
|---|
| 280 |         ;"Result: 1 if found, 0 if not found, -1 if Abort signal found, -2 if RESTART signal
 | 
|---|
| 281 |         NEW REF SET REF=$NAME(^TMG("TMP","SEARCH","SRCHTIU",PARENTJOB))
 | 
|---|
| 282 |         NEW FOUND SET FOUND=0 ;"default to not found
 | 
|---|
| 283 |         NEW LINE SET LINE=0
 | 
|---|
| 284 |         NEW CT SET CT=0
 | 
|---|
| 285 |         NEW ABORT SET ABORT=0
 | 
|---|
| 286 |         FOR  SET LINE=$ORDER(^TIU(8925,IEN,"TEXT",LINE)) QUIT:(+LINE'>0)!FOUND!ABORT  DO
 | 
|---|
| 287 |         . SET CT=CT+1
 | 
|---|
| 288 |         . IF CT#5=0 DO  QUIT:ABORT  ;"Check messages every 5 lines or so
 | 
|---|
| 289 |         . . SET CT=0
 | 
|---|
| 290 |         . . NEW MSG SET MSG=@REF@("MSG")
 | 
|---|
| 291 |         . . IF MSG="STOP" SET ABORT=1 QUIT
 | 
|---|
| 292 |         . . IF MSG="RESTART" SET ABORT=2 QUIT 
 | 
|---|
| 293 |         . NEW ONELINE SET ONELINE=$$UP^XLFSTR($GET(^TIU(8925,IEN,"TEXT",LINE,0)))
 | 
|---|
| 294 |         . IF ONELINE[TERM SET FOUND=1
 | 
|---|
| 295 |         IF ABORT SET FOUND=-ABORT
 | 
|---|
| 296 |         QUIT FOUND
 | 
|---|
| 297 |   ;
 | 
|---|