| 1 | HLEVAPI ;O-OIFO/LJA - Event Monitor APIs ;02/04/2004 14:42
|
---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**109**;Oct 13, 1995
|
---|
| 3 | ;
|
---|
| 4 | ; Routine Supported APIs...
|
---|
| 5 | ; -----------------------------------------------------------------
|
---|
| 6 | ; HLEVAPI START(VAR)
|
---|
| 7 | ; HLEVAPI CHECKIN
|
---|
| 8 | ; HLEVAPI CHECKOUT
|
---|
| 9 | ; HLEVAPI ABORT(STATUS,APPLSTAT)
|
---|
| 10 | ; HLEVAPI MAILIT
|
---|
| 11 | ; HLEVAPI VARIABLE
|
---|
| 12 | ; -----------------------------------------------------------------
|
---|
| 13 | ; HLEVAPI0 ONOFFM(HLEVIENE)
|
---|
| 14 | ; -----------------------------------------------------------------
|
---|
| 15 | ; HLEVAPI1 APPSTAT(STATUS)
|
---|
| 16 | ; HLEVAPI1 MSGTEXT(GBL)
|
---|
| 17 | ; HLEVAPI1 RUNDIARY(GBL)
|
---|
| 18 | ;
|
---|
| 19 | ;
|
---|
| 20 | ; Test server code with TEST^HLEVSRV1 (Also HLEVMNU)
|
---|
| 21 | ; Test monitor code with TEST^HLEVUTI1 (Also HLEVMNU)
|
---|
| 22 | ;
|
---|
| 23 | ;
|
---|
| 24 | ; EVENT CODE
|
---|
| 25 | ;
|
---|
| 26 | VARIABLE(HLEVIENJ,HLVAR) ; Store passed in variables...
|
---|
| 27 | ; HLVAR can be the name of a variable, like "CT", or it can be
|
---|
| 28 | ; a list of variables passed by reference.
|
---|
| 29 | N VAL,VAR
|
---|
| 30 | ;
|
---|
| 31 | D DEBUG^HLEVAPI2("VARIABLE") ; Debug data created conditionally
|
---|
| 32 | ;
|
---|
| 33 | ; Stop all event monitoring to enable on-site debugging...
|
---|
| 34 | QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
|
---|
| 35 | ;
|
---|
| 36 | QUIT:$G(^HLEV(776,+$G(HLEVIENJ),0))']"" ;->
|
---|
| 37 | ;
|
---|
| 38 | ; Loop thru array...
|
---|
| 39 | S VAR=""
|
---|
| 40 | F S VAR=$O(HLVAR(VAR)) Q:VAR']"" D
|
---|
| 41 | . I $E(VAR,$L(VAR))="*" D QUIT ;->
|
---|
| 42 | . . QUIT:VAR="*" ;->
|
---|
| 43 | . . D VARSTAR(HLEVIENJ,VAR)
|
---|
| 44 | . D STOREIT(HLEVIENJ,VAR,$S($D(@VAR):@VAR,1:"---"),$G(HLVAR(VAR)))
|
---|
| 45 | ;
|
---|
| 46 | Q
|
---|
| 47 | ;
|
---|
| 48 | VARSTAR(HLEVIENJ,VAR) ; Store VAR* variables...
|
---|
| 49 | N GBL,LP,REF,ROOT,X,X1
|
---|
| 50 | ;
|
---|
| 51 | KILL ^TMP("HLORDER",$J)
|
---|
| 52 | S GBL=$NA(^TMP("HLORDER",$J)),ROOT=$E(GBL,1,$L(GBL)-1)_","
|
---|
| 53 | S X=ROOT,X1(VAR)="" D ORDER^%ZOSV
|
---|
| 54 | QUIT:'$D(GBL) ;->
|
---|
| 55 | ;
|
---|
| 56 | ; $Q thru global...
|
---|
| 57 | S LP=GBL
|
---|
| 58 | F S LP=$Q(@LP) Q:LP'[ROOT D
|
---|
| 59 | . S REF=$P(LP,ROOT,2) QUIT:REF'[")" ;->
|
---|
| 60 | . S REF=$P($TR(REF,"""",""),")") QUIT:REF']"" ;->
|
---|
| 61 | . I $L(REF)>10 S REF=$E(REF,1,9)_"~"
|
---|
| 62 | . D STOREIT(+HLEVIENJ,REF,@LP)
|
---|
| 63 | ;
|
---|
| 64 | Q
|
---|
| 65 | ;
|
---|
| 66 | STOREIT(HLEVIENJ,VAR,VAL,EXPL) ; Store VAR in 776...
|
---|
| 67 | N MIEN
|
---|
| 68 | S EXPL=$G(EXPL)
|
---|
| 69 | S MIEN=$O(^HLEV(776,+HLEVIENJ,52,"B",VAR,0))
|
---|
| 70 | I MIEN'>0 S MIEN=$O(^HLEV(776,+HLEVIENJ,52,":"),-1)+1
|
---|
| 71 | S ^HLEV(776,+HLEVIENJ,52,+MIEN,0)=VAR_$S(EXPL]"":U_EXPL,1:"")
|
---|
| 72 | S ^HLEV(776,+HLEVIENJ,52,+MIEN,52)=VAL
|
---|
| 73 | S ^HLEV(776,+HLEVIENJ,52,"B",VAR,MIEN)=""
|
---|
| 74 | S MIEN=$O(^HLEV(776,+HLEVIENJ,52,":"),-1)
|
---|
| 75 | I MIEN'>0 KILL ^HLEV(776,+HLEVIENJ,52) QUIT ;->
|
---|
| 76 | S ^HLEV(776,+HLEVIENJ,52,0)="^776.003A^"_MIEN_U_MIEN
|
---|
| 77 | Q
|
---|
| 78 | ;
|
---|
| 79 | STOREVAR ; Update VARIABLE VALUE multiple in 776...
|
---|
| 80 | ; HLEVIENJ -- req
|
---|
| 81 | ;
|
---|
| 82 | ; Stop all event monitoring to enable on-site debugging...
|
---|
| 83 | QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
|
---|
| 84 | ;
|
---|
| 85 | N MIEN,VAL,VAR
|
---|
| 86 | ; Store variable values in 776...
|
---|
| 87 | S VAR=""
|
---|
| 88 | F S VAR=$O(HLEVAR(VAR)) Q:VAR']"" D
|
---|
| 89 | . S VAL=$S($D(@VAR):@VAR,1:"---")
|
---|
| 90 | . S MIEN=$O(^HLEV(776,+HLEVIENJ,52,"B",VAR,0))
|
---|
| 91 | . I MIEN'>0 S MIEN=$O(^HLEV(776,+HLEVIENJ,52,":"),-1)+1
|
---|
| 92 | . S ^HLEV(776,+HLEVIENJ,52,+MIEN,0)=VAR_U_HLEVAR(VAR)
|
---|
| 93 | . S ^HLEV(776,+HLEVIENJ,52,+MIEN,52)=VAL
|
---|
| 94 | . S ^HLEV(776,+HLEVIENJ,52,"B",VAR,MIEN)=""
|
---|
| 95 | S MIEN=$O(^HLEV(776,+HLEVIENJ,52,":"),-1)
|
---|
| 96 | I MIEN'>0 KILL ^HLEV(776,+HLEVIENJ,52) QUIT ;->
|
---|
| 97 | S ^HLEV(776,+HLEVIENJ,52,0)="^776.003A^"_MIEN_U_MIEN
|
---|
| 98 | Q
|
---|
| 99 | ;
|
---|
| 100 | START(VARIABLE) ; Start the whole monitoring process.
|
---|
| 101 | ; HLEVIENE,HLEVIENJ,HLEVIENM -- req --> HLEVAR()
|
---|
| 102 | ;
|
---|
| 103 | ; - Pass in by reference the VARIABLEs being tracked.
|
---|
| 104 | ;
|
---|
| 105 | ; >S VAR("VARNAME")="REPORT-VARNAME"
|
---|
| 106 | ; >D DECLARE("MONITOR-NAME",.VAR)
|
---|
| 107 | ;
|
---|
| 108 | N E,EXPL,I,MIEN,NO,NODE,TXT,VAR
|
---|
| 109 | ;
|
---|
| 110 | D DEBUG^HLEVAPI2("START") ; Debug data created conditionally
|
---|
| 111 | ;
|
---|
| 112 | ; Stop all event monitoring to enable on-site debugging...
|
---|
| 113 | QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
|
---|
| 114 | ;
|
---|
| 115 | ; Check STATUS-EVENT...
|
---|
| 116 | QUIT:$P($G(^HLEV(776.999,1,0)),U,6)'="A" ;->
|
---|
| 117 | ;
|
---|
| 118 | ; Presets...
|
---|
| 119 | S NO=0
|
---|
| 120 | KILL HLEVAR
|
---|
| 121 | ;
|
---|
| 122 | ; If passed in a variable name directly in VARIABLE
|
---|
| 123 | I $G(VARIABLE)]"" F PCE=1:1:$L(VARIABLE,U) D
|
---|
| 124 | . S X=$P(VARIABLE,U,+PCE) I X]"" S NO=NO+1,HLEVAR(X)=X
|
---|
| 125 | ;
|
---|
| 126 | ; Convert passed in variable to format expected by CHECKIN & CHECKOUT
|
---|
| 127 | S VAR=""
|
---|
| 128 | F S VAR=$O(VARIABLE(VAR)) Q:VAR']"" D
|
---|
| 129 | . S EXPL=VARIABLE(VAR) S:EXPL']"" EXPL=VAR
|
---|
| 130 | . S NO=NO+1,HLEVAR(VAR)=EXPL
|
---|
| 131 | ;
|
---|
| 132 | KILL VARIABLE
|
---|
| 133 | ;
|
---|
| 134 | ; Make initial DIARY entry...
|
---|
| 135 | S TXT="DECLARE called - "_$P($G(^HLEV(776.1,+HLEVIENE,0)),U)
|
---|
| 136 | D WPTXT^HLEVUTIL(776,HLEVIENJ,50,776.001,TXT)
|
---|
| 137 | ;
|
---|
| 138 | Q
|
---|
| 139 | ;
|
---|
| 140 | CHECKIN ; Call here to update the EVENT using "your" DECLARE variables...
|
---|
| 141 | N D,D0,DA,DI,DIE,DR,NO
|
---|
| 142 | ;
|
---|
| 143 | D DEBUG^HLEVAPI2("CHECKIN") ; Debug data created conditionally
|
---|
| 144 | ;
|
---|
| 145 | ; Stop all event monitoring to enable on-site debugging...
|
---|
| 146 | QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
|
---|
| 147 | ;
|
---|
| 148 | ; Does entry exist?
|
---|
| 149 | QUIT:$G(^HLEV(776,+$G(HLEVIENJ),0))']"" ;->
|
---|
| 150 | ;
|
---|
| 151 | D STOREVAR
|
---|
| 152 | ;
|
---|
| 153 | ; Fill in zero node...
|
---|
| 154 | S DA=+HLEVIENJ,DIE=776
|
---|
| 155 | S DR="4///R;6////"_$$NOW^XLFDT
|
---|
| 156 | D ^DIE
|
---|
| 157 | ;
|
---|
| 158 | Q
|
---|
| 159 | ;
|
---|
| 160 | ABORT(STATUS,APPLST) ; Call here if job is to be aborted...
|
---|
| 161 | N DA,DIE,DR,NOW
|
---|
| 162 | ;
|
---|
| 163 | D DEBUG^HLEVAPI2("ABORT") ; Debug data created conditionally
|
---|
| 164 | ;
|
---|
| 165 | ; Stop all event monitoring to enable on-site debugging...
|
---|
| 166 | QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
|
---|
| 167 | ;
|
---|
| 168 | ; Does entry exist?
|
---|
| 169 | QUIT:$G(^HLEV(776,+$G(HLEVIENJ),0))']"" ;->
|
---|
| 170 | ;
|
---|
| 171 | D CHECKIN
|
---|
| 172 | ;
|
---|
| 173 | S DA=+HLEVIENJ,DIE=776
|
---|
| 174 | S NOW=$$NOW^XLFDT
|
---|
| 175 | S STATUS=$E($$UP^XLFSTR($G(STATUS)_" "))
|
---|
| 176 | S STATUS=$S("EFQR"[STATUS:STATUS,1:"E")
|
---|
| 177 | S DR="2////"_NOW_";4///"_STATUS_";6////"_NOW
|
---|
| 178 | S:$G(APPLST)]"" DR=DR_";5///"_$TR($E(APPLST,1,10),U,"~")
|
---|
| 179 | D ^DIE
|
---|
| 180 | ;
|
---|
| 181 | D EVCHKD^HLEVAPI2($G(HLEVIENM),$G(HLEVIENE),$G(HLEVIENJ),STATUS)
|
---|
| 182 | ;
|
---|
| 183 | KILL HLEVAR ; Passed-in user variables...
|
---|
| 184 | ;
|
---|
| 185 | Q
|
---|
| 186 | ;
|
---|
| 187 | CHECKOUT ; Call here to end EVENT using "your" DECLARE variables...
|
---|
| 188 | N DA,DIE,DR,NOW
|
---|
| 189 | ;
|
---|
| 190 | D DEBUG^HLEVAPI2("CHECKOUT") ; Debug data created conditionally
|
---|
| 191 | ;
|
---|
| 192 | ; Stop all event monitoring to enable on-site debugging...
|
---|
| 193 | QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
|
---|
| 194 | ;
|
---|
| 195 | ; Does entry exist?
|
---|
| 196 | QUIT:$G(^HLEV(776,+$G(HLEVIENJ),0))']"" ;->
|
---|
| 197 | ;
|
---|
| 198 | D CHECKIN
|
---|
| 199 | ;
|
---|
| 200 | S DA=+HLEVIENJ,DIE=776
|
---|
| 201 | S NOW=$$NOW^XLFDT
|
---|
| 202 | S DR="2////"_NOW_";4///F;6////"_NOW
|
---|
| 203 | D ^DIE
|
---|
| 204 | ;
|
---|
| 205 | D EVCHKD^HLEVAPI2($G(HLEVIENM),$G(HLEVIENE),$G(HLEVIENJ))
|
---|
| 206 | ;
|
---|
| 207 | KILL HLEVAR ; Passed-in user variables...
|
---|
| 208 | ;
|
---|
| 209 | Q
|
---|
| 210 | ;
|
---|
| 211 | MAILIT D MAILIT^HLEVAPI3
|
---|
| 212 | Q
|
---|
| 213 | ;
|
---|
| 214 | SENDMAIL(HLEVIENE,HLEVIENJ,XMY) ; Mail info in 776 event monitor's ^(51)...
|
---|
| 215 | ;
|
---|
| 216 | ; PARAMETER NOTES
|
---|
| 217 | ; ---------------------------------------------------------------------
|
---|
| 218 | ; XMY Pass in XMY by reference.
|
---|
| 219 | ; XMSUB If XMSUB pre-exists, it will be used.
|
---|
| 220 | ; XMTEXT The text for the mailman message will come from one of
|
---|
| 221 | ; three sources:
|
---|
| 222 | ; (1) If XMTEXT is pre-set, it will be used.
|
---|
| 223 | ; (2) If XMTEXT is not passed in, then the MAILMAN MESSAGE
|
---|
| 224 | ; TEXT global ^HLEV(776,IEN,51,#,0) will be used, if it
|
---|
| 225 | ; exits.
|
---|
| 226 | ; (3) Otherwise, a generic "message is completed" message
|
---|
| 227 | ; will be sent.
|
---|
| 228 | ;
|
---|
| 229 | N MGRP,NO,SITE,TEXT,XMDUZ,X,XMZ
|
---|
| 230 | ;
|
---|
| 231 | ; If no recipients passed in and no mail group exists, quit...
|
---|
| 232 | QUIT:$O(XMY(""))']"" ;->
|
---|
| 233 | ;
|
---|
| 234 | QUIT:$P($G(^HLEV(776.1,+$G(HLEVIENE),0)),U)']"" ;->
|
---|
| 235 | QUIT:$P($G(^HLEV(776,+$G(HLEVIENJ),0)),U)']"" ;->
|
---|
| 236 | ;
|
---|
| 237 | ; Set up sending...
|
---|
| 238 | S XMDUZ=.5
|
---|
| 239 | ;
|
---|
| 240 | ; Subject...
|
---|
| 241 | S X=$$SITE^VASITE,SITE="HL7 Monitor - "_$P(X,U,2)_"["_$P(X,U,3)_"]"
|
---|
| 242 | S XMSUB=$S($G(XMSUB)]"":XMSUB,1:SITE_" - "_$P($G(^HLEV(776.1,+HLEVIENE,0)),U))
|
---|
| 243 | ;
|
---|
| 244 | ; Load generic message text...
|
---|
| 245 | I $G(XMTEXT)']"" D
|
---|
| 246 | . KILL ^TMP($J,"HLMAILMSG")
|
---|
| 247 | . D LOADALL^HLEVAPI1(+HLEVIENJ,"HLMAILMSG")
|
---|
| 248 | ;
|
---|
| 249 | ; Declare where message is stored...
|
---|
| 250 | S XMTEXT=$S($G(XMTEXT)]"":XMTEXT,1:"^TMP("_$J_",""HLMAILMSG"",")
|
---|
| 251 | ;
|
---|
| 252 | D ^XMD
|
---|
| 253 | ;
|
---|
| 254 | I '$D(ZTQUEUED) W !!,"Mail message #",$G(XMZ),"..."
|
---|
| 255 | ;
|
---|
| 256 | I $G(XMZ)>0 D UPDFLDE(+HLEVIENJ,7,XMZ)
|
---|
| 257 | ;
|
---|
| 258 | Q
|
---|
| 259 | ;
|
---|
| 260 | NEWEVENT(HLEVIENE,QTIME) ; Create a new EVENT and pass back IEN...
|
---|
| 261 | N DIC,DD,DO,X,Y
|
---|
| 262 | ;
|
---|
| 263 | ; Check STATUS-EVENT...
|
---|
| 264 | QUIT:$P($G(^HLEV(776.999,1,0)),U,6)'="A" ;->
|
---|
| 265 | ;
|
---|
| 266 | S X=$$NOW^XLFDT,DIC="^HLEV(776,",DIC(0)="L"
|
---|
| 267 | S DIC("DR")="3////"_HLEVIENE_";4///Q"
|
---|
| 268 | I $G(HLEVIENM)>0 S DIC("DR")=DIC("DR")_";9////"_HLEVIENM
|
---|
| 269 | I $G(QTIME)]"" S DIC("DR")=DIC("DR")_";10////"_QTIME
|
---|
| 270 | D FILE^DICN
|
---|
| 271 | ;
|
---|
| 272 | Q $S(+Y>0:+Y,1:"")
|
---|
| 273 | ;
|
---|
| 274 | UPDFLDE(HLEVIENJ,FLD,VAL) ; Update a specific piece in 776...
|
---|
| 275 | N DA,DIE,DR
|
---|
| 276 | ;
|
---|
| 277 | QUIT:$G(^HLEV(776,+$G(HLEVIENJ),0))']"" ;->
|
---|
| 278 | ;
|
---|
| 279 | ; Field 50, RUN DIARY...
|
---|
| 280 | I FLD=50 D QUIT ;->
|
---|
| 281 | . N DIFF,NO,NOW,TIME
|
---|
| 282 | . S NO=$O(^HLEV(776,+HLEVIENJ,50,":"),-1)+1
|
---|
| 283 | . S ^HLEV(776,+HLEVIENJ,50,0)="^776.001^"_NO_U_NO
|
---|
| 284 | . S ^HLEV(776,+HLEVIENJ,50,+NO,0)=$G(VAL)
|
---|
| 285 | . ; If FLD=50, update timestamp every 30 seconds...
|
---|
| 286 | . ; (This is because many 50 nodes might be updated, one after the
|
---|
| 287 | . ; other in a very disk-intensive way.)
|
---|
| 288 | . S TIME=$P($G(^HLEV(776,+HLEVIENJ,0)),U,6) ; FM format
|
---|
| 289 | . S NOW=$$NOW^XLFDT
|
---|
| 290 | . S DIFF=$$FMDIFF^XLFDT(NOW,TIME,2) S:DIFF<0 DIFF=-DIFF
|
---|
| 291 | . QUIT:DIFF<30 ;->
|
---|
| 292 | . S DA=+HLEVIENJ,DIE=776,DR="6////"_NOW
|
---|
| 293 | ;
|
---|
| 294 | ; Fields 401-408...
|
---|
| 295 | I FLD?3N&(FLD>400)&(FLD<409) D QUIT ;->
|
---|
| 296 | . S ^HLEV(776,+HLEVIENJ,FLD)=VAL
|
---|
| 297 | ;
|
---|
| 298 | ; Zero node data...
|
---|
| 299 | QUIT:$G(VAL)']"" ;->
|
---|
| 300 | S DA=+HLEVIENJ,DIE=776,DR=FLD_"///"_VAL_";6////"_$$NOW^XLFDT
|
---|
| 301 | D ^DIE
|
---|
| 302 | ;
|
---|
| 303 | I FLD=2 D EVCHKD^HLEVAPI2($G(HLEVIENM),$G(HLEVIENE),$G(HLEVIENJ))
|
---|
| 304 | ;
|
---|
| 305 | Q
|
---|
| 306 | ;
|
---|
| 307 | EOR ;HLEVAPI - Event Monitor APIs ;5/16/03 14:42
|
---|