Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: HLEVAPI

HLEVAPI.m

Go to the documentation of this file.
  1. HLEVAPI ;O-OIFO/LJA - Event Monitor APIs ;02/04/2004 14:42
  1. ;;1.6;HEALTH LEVEL SEVEN;**109,161**;Oct 13, 1995;Build 6
  1. ;
  1. ; Routine Supported APIs...
  1. ; -----------------------------------------------------------------
  1. ; HLEVAPI START(VAR)
  1. ; HLEVAPI CHECKIN
  1. ; HLEVAPI CHECKOUT
  1. ; HLEVAPI ABORT(STATUS,APPLSTAT)
  1. ; HLEVAPI MAILIT
  1. ; HLEVAPI VARIABLE
  1. ; -----------------------------------------------------------------
  1. ; HLEVAPI0 ONOFFM(HLEVIENE)
  1. ; -----------------------------------------------------------------
  1. ; HLEVAPI1 APPSTAT(STATUS)
  1. ; HLEVAPI1 MSGTEXT(GBL)
  1. ; HLEVAPI1 RUNDIARY(GBL)
  1. ;
  1. ;
  1. ; Test server code with TEST^HLEVSRV1 (Also HLEVMNU)
  1. ; Test monitor code with TEST^HLEVUTI1 (Also HLEVMNU)
  1. ;
  1. ;
  1. ; EVENT CODE
  1. ;
  1. VARIABLE(HLEVIENJ,HLVAR) ; Store passed in variables...
  1. ; HLVAR can be the name of a variable, like "CT", or it can be
  1. ; a list of variables passed by reference.
  1. N VAL,VAR
  1. ;
  1. D DEBUG^HLEVAPI2("VARIABLE") ; Debug data created conditionally
  1. ;
  1. ; Stop all event monitoring to enable on-site debugging...
  1. QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
  1. ;
  1. QUIT:$G(^HLEV(776,+$G(HLEVIENJ),0))']"" ;->
  1. ;
  1. ; Loop thru array...
  1. S VAR=""
  1. F S VAR=$O(HLVAR(VAR)) Q:VAR']"" D
  1. . I $E(VAR,$L(VAR))="*" D QUIT ;->
  1. . . QUIT:VAR="*" ;->
  1. . . D VARSTAR(HLEVIENJ,VAR)
  1. . D STOREIT(HLEVIENJ,VAR,$S($D(@VAR):@VAR,1:"---"),$G(HLVAR(VAR)))
  1. ;
  1. Q
  1. ;
  1. VARSTAR(HLEVIENJ,VAR) ; Store VAR* variables...
  1. N GBL,LP,REF,ROOT,X,X1
  1. ;
  1. KILL ^TMP("HLORDER",$J)
  1. S GBL=$NA(^TMP("HLORDER",$J)),ROOT=$E(GBL,1,$L(GBL)-1)_","
  1. S X=ROOT,X1(VAR)="" D ORDER^%ZOSV
  1. QUIT:'$D(GBL) ;->
  1. ;
  1. ; $Q thru global...
  1. S LP=GBL
  1. F S LP=$Q(@LP) Q:LP'[ROOT D
  1. . S REF=$P(LP,ROOT,2) QUIT:REF'[")" ;->
  1. . S REF=$P($TR(REF,"""",""),")") QUIT:REF']"" ;->
  1. . I $L(REF)>10 S REF=$E(REF,1,9)_"~"
  1. . D STOREIT(+HLEVIENJ,REF,@LP)
  1. ;
  1. Q
  1. ;
  1. STOREIT(HLEVIENJ,VAR,VAL,EXPL) ; Store VAR in 776...
  1. N MIEN
  1. S EXPL=$G(EXPL)
  1. S MIEN=$O(^HLEV(776,+HLEVIENJ,52,"B",VAR,0))
  1. I MIEN'>0 S MIEN=$O(^HLEV(776,+HLEVIENJ,52,":"),-1)+1
  1. S ^HLEV(776,+HLEVIENJ,52,+MIEN,0)=VAR_$S(EXPL]"":U_EXPL,1:"")
  1. S ^HLEV(776,+HLEVIENJ,52,+MIEN,52)=VAL
  1. S ^HLEV(776,+HLEVIENJ,52,"B",VAR,MIEN)=""
  1. S MIEN=$O(^HLEV(776,+HLEVIENJ,52,":"),-1)
  1. I MIEN'>0 KILL ^HLEV(776,+HLEVIENJ,52) QUIT ;->
  1. S ^HLEV(776,+HLEVIENJ,52,0)="^776.003A^"_MIEN_U_MIEN
  1. Q
  1. ;
  1. STOREVAR ; Update VARIABLE VALUE multiple in 776...
  1. ; HLEVIENJ -- req
  1. ;
  1. ; Stop all event monitoring to enable on-site debugging...
  1. QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
  1. ;
  1. N MIEN,VAL,VAR
  1. ; Store variable values in 776...
  1. S VAR=""
  1. F S VAR=$O(HLEVAR(VAR)) Q:VAR']"" D
  1. . S VAL=$S($D(@VAR):@VAR,1:"---")
  1. . S MIEN=$O(^HLEV(776,+HLEVIENJ,52,"B",VAR,0))
  1. . I MIEN'>0 S MIEN=$O(^HLEV(776,+HLEVIENJ,52,":"),-1)+1
  1. . S ^HLEV(776,+HLEVIENJ,52,+MIEN,0)=VAR_U_HLEVAR(VAR)
  1. . S ^HLEV(776,+HLEVIENJ,52,+MIEN,52)=VAL
  1. . S ^HLEV(776,+HLEVIENJ,52,"B",VAR,MIEN)=""
  1. S MIEN=$O(^HLEV(776,+HLEVIENJ,52,":"),-1)
  1. I MIEN'>0 KILL ^HLEV(776,+HLEVIENJ,52) QUIT ;->
  1. S ^HLEV(776,+HLEVIENJ,52,0)="^776.003A^"_MIEN_U_MIEN
  1. Q
  1. ;
  1. START(VARIABLE) ; Start the whole monitoring process.
  1. ; HLEVIENE,HLEVIENJ,HLEVIENM -- req --> HLEVAR()
  1. ;
  1. ; - Pass in by reference the VARIABLEs being tracked.
  1. ;
  1. ; >S VAR("VARNAME")="REPORT-VARNAME"
  1. ; >D DECLARE("MONITOR-NAME",.VAR)
  1. ;
  1. N E,EXPL,I,MIEN,NO,NODE,TXT,VAR
  1. ;
  1. D DEBUG^HLEVAPI2("START") ; Debug data created conditionally
  1. ;
  1. ; Stop all event monitoring to enable on-site debugging...
  1. QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
  1. ;
  1. ; Check STATUS-EVENT...
  1. QUIT:$P($G(^HLEV(776.999,1,0)),U,6)'="A" ;->
  1. ;
  1. ; Presets...
  1. S NO=0
  1. KILL HLEVAR
  1. ;
  1. ; If passed in a variable name directly in VARIABLE
  1. I $G(VARIABLE)]"" F PCE=1:1:$L(VARIABLE,U) D
  1. . S X=$P(VARIABLE,U,+PCE) I X]"" S NO=NO+1,HLEVAR(X)=X
  1. ;
  1. ; Convert passed in variable to format expected by CHECKIN & CHECKOUT
  1. S VAR=""
  1. F S VAR=$O(VARIABLE(VAR)) Q:VAR']"" D
  1. . S EXPL=VARIABLE(VAR) S:EXPL']"" EXPL=VAR
  1. . S NO=NO+1,HLEVAR(VAR)=EXPL
  1. ;
  1. KILL VARIABLE
  1. ;
  1. ; Make initial DIARY entry...
  1. S TXT="DECLARE called - "_$P($G(^HLEV(776.1,+HLEVIENE,0)),U)
  1. D WPTXT^HLEVUTIL(776,HLEVIENJ,50,776.001,TXT)
  1. ;
  1. Q
  1. ;
  1. CHECKIN ; Call here to update the EVENT using "your" DECLARE variables...
  1. N D,D0,DA,DI,DIE,DR,NO
  1. ;
  1. D DEBUG^HLEVAPI2("CHECKIN") ; Debug data created conditionally
  1. ;
  1. ; Stop all event monitoring to enable on-site debugging...
  1. QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
  1. ;
  1. ; Does entry exist?
  1. QUIT:$G(^HLEV(776,+$G(HLEVIENJ),0))']"" ;->
  1. ;
  1. D STOREVAR
  1. ;
  1. ; Fill in zero node...
  1. S DA=+HLEVIENJ,DIE=776
  1. S DR="4///R;6////"_$$NOW^XLFDT
  1. D ^DIE
  1. ;
  1. Q
  1. ;
  1. ABORT(STATUS,APPLST) ; Call here if job is to be aborted...
  1. N DA,DIE,DR,NOW
  1. ;
  1. D DEBUG^HLEVAPI2("ABORT") ; Debug data created conditionally
  1. ;
  1. ; Stop all event monitoring to enable on-site debugging...
  1. QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
  1. ;
  1. ; Does entry exist?
  1. QUIT:$G(^HLEV(776,+$G(HLEVIENJ),0))']"" ;->
  1. ;
  1. D CHECKIN
  1. ;
  1. S DA=+HLEVIENJ,DIE=776
  1. S NOW=$$NOW^XLFDT
  1. S STATUS=$E($$UP^XLFSTR($G(STATUS)_" "))
  1. S STATUS=$S("EFQR"[STATUS:STATUS,1:"E")
  1. S DR="2////"_NOW_";4///"_STATUS_";6////"_NOW
  1. S:$G(APPLST)]"" DR=DR_";5///"_$TR($E(APPLST,1,10),U,"~")
  1. D ^DIE
  1. ;
  1. D EVCHKD^HLEVAPI2($G(HLEVIENM),$G(HLEVIENE),$G(HLEVIENJ),STATUS)
  1. ;
  1. KILL HLEVAR ; Passed-in user variables...
  1. ;
  1. Q
  1. ;
  1. CHECKOUT ; Call here to end EVENT using "your" DECLARE variables...
  1. N DA,DIE,DR,NOW
  1. ;
  1. D DEBUG^HLEVAPI2("CHECKOUT") ; Debug data created conditionally
  1. ;
  1. ; Stop all event monitoring to enable on-site debugging...
  1. QUIT:$G(^TMP("HLEVFLAG",$J))["STOP" ;->
  1. ;
  1. ; Does entry exist?
  1. QUIT:$G(^HLEV(776,+$G(HLEVIENJ),0))']"" ;->
  1. ;
  1. D CHECKIN
  1. ;
  1. S DA=+HLEVIENJ,DIE=776
  1. S NOW=$$NOW^XLFDT
  1. S DR="2////"_NOW_";4///F;6////"_NOW
  1. D ^DIE
  1. ;
  1. D EVCHKD^HLEVAPI2($G(HLEVIENM),$G(HLEVIENE),$G(HLEVIENJ))
  1. ;
  1. KILL HLEVAR ; Passed-in user variables...
  1. ;
  1. Q
  1. ;
  1. MAILIT D MAILIT^HLEVAPI3
  1. Q
  1. ;
  1. SENDMAIL(HLEVIENE,HLEVIENJ,XMY) ; Mail info in 776 event monitor's ^(51)...
  1. ;
  1. ; PARAMETER NOTES
  1. ; ---------------------------------------------------------------------
  1. ; XMY Pass in XMY by reference.
  1. ; XMSUB If XMSUB pre-exists, it will be used.
  1. ; XMTEXT The text for the mailman message will come from one of
  1. ; three sources:
  1. ; (1) If XMTEXT is pre-set, it will be used.
  1. ; (2) If XMTEXT is not passed in, then the MAILMAN MESSAGE
  1. ; TEXT global ^HLEV(776,IEN,51,#,0) will be used, if it
  1. ; exits.
  1. ; (3) Otherwise, a generic "message is completed" message
  1. ; will be sent.
  1. ;
  1. N MGRP,NO,SITE,TEXT,XMDUZ,X,XMZ
  1. ;
  1. ; If no recipients passed in and no mail group exists, quit...
  1. QUIT:$O(XMY(""))']"" ;->
  1. ;
  1. QUIT:$P($G(^HLEV(776.1,+$G(HLEVIENE),0)),U)']"" ;->
  1. QUIT:$P($G(^HLEV(776,+$G(HLEVIENJ),0)),U)']"" ;->
  1. ;
  1. ; Set up sending...
  1. S XMDUZ=.5
  1. ;
  1. ; Subject...
  1. S X=$$SITE^VASITE,SITE="HL7 Monitor - "_$P(X,U,2)_"["_$P(X,U,3)_"]"
  1. S XMSUB=$S($G(XMSUB)]"":XMSUB,1:SITE_" - "_$P($G(^HLEV(776.1,+HLEVIENE,0)),U))
  1. ;
  1. ; Load generic message text...
  1. I $G(XMTEXT)']"" D
  1. . KILL ^TMP($J,"HLMAILMSG")
  1. . D LOADALL^HLEVAPI1(+HLEVIENJ,"HLMAILMSG")
  1. ;
  1. ; Declare where message is stored...
  1. S XMTEXT=$S($G(XMTEXT)]"":XMTEXT,1:"^TMP("_$J_",""HLMAILMSG"",")
  1. ;
  1. D ^XMD
  1. ;
  1. I '$D(ZTQUEUED) W !!,"Mail message #",$G(XMZ),"..."
  1. ;
  1. I $G(XMZ)>0 D UPDFLDE(+HLEVIENJ,7,XMZ)
  1. ;
  1. Q
  1. ;
  1. NEWEVENT(HLEVIENE,QTIME) ; Create a new EVENT and pass back IEN...
  1. N DIC,DD,DO,X,Y
  1. ;
  1. ; Check STATUS-EVENT...return null("") if inactive HL*161
  1. QUIT:$P($G(^HLEV(776.999,1,0)),U,6)'="A" "" ;->
  1. ;
  1. S X=$$NOW^XLFDT,DIC="^HLEV(776,",DIC(0)="L"
  1. S DIC("DR")="3////"_HLEVIENE_";4///Q"
  1. I $G(HLEVIENM)>0 S DIC("DR")=DIC("DR")_";9////"_HLEVIENM
  1. I $G(QTIME)]"" S DIC("DR")=DIC("DR")_";10////"_QTIME
  1. D FILE^DICN
  1. ;
  1. Q $S(+Y>0:+Y,1:"")
  1. ;
  1. UPDFLDE(HLEVIENJ,FLD,VAL) ; Update a specific piece in 776...
  1. N DA,DIE,DR
  1. ;
  1. QUIT:$G(^HLEV(776,+$G(HLEVIENJ),0))']"" ;->
  1. ;
  1. ; Field 50, RUN DIARY...
  1. I FLD=50 D QUIT ;->
  1. . N DIFF,NO,NOW,TIME
  1. . S NO=$O(^HLEV(776,+HLEVIENJ,50,":"),-1)+1
  1. . S ^HLEV(776,+HLEVIENJ,50,0)="^776.001^"_NO_U_NO
  1. . S ^HLEV(776,+HLEVIENJ,50,+NO,0)=$G(VAL)
  1. . ; If FLD=50, update timestamp every 30 seconds...
  1. . ; (This is because many 50 nodes might be updated, one after the
  1. . ; other in a very disk-intensive way.)
  1. . S TIME=$P($G(^HLEV(776,+HLEVIENJ,0)),U,6) ; FM format
  1. . S NOW=$$NOW^XLFDT
  1. . S DIFF=$$FMDIFF^XLFDT(NOW,TIME,2) S:DIFF<0 DIFF=-DIFF
  1. . QUIT:DIFF<30 ;->
  1. . S DA=+HLEVIENJ,DIE=776,DR="6////"_NOW
  1. ;
  1. ; Fields 401-408...
  1. I FLD?3N&(FLD>400)&(FLD<409) D QUIT ;->
  1. . S ^HLEV(776,+HLEVIENJ,FLD)=VAL
  1. ;
  1. ; Zero node data...
  1. QUIT:$G(VAL)']"" ;->
  1. S DA=+HLEVIENJ,DIE=776,DR=FLD_"///"_VAL_";6////"_$$NOW^XLFDT
  1. D ^DIE
  1. ;
  1. I FLD=2 D EVCHKD^HLEVAPI2($G(HLEVIENM),$G(HLEVIENE),$G(HLEVIENJ))
  1. ;
  1. Q
  1. ;
  1. EOR ;HLEVAPI - Event Monitor APIs ;5/16/03 14:42