| 1 | HLEVAPI0 ;O-OIFO/LJA - Event Monitor APIs ;02/04/2004 14:42 | 
|---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**109**;Oct 13, 1995 | 
|---|
| 3 | ; | 
|---|
| 4 | ONOFFM(HLEVIENE,STATUS) ;Turn on/off event monitor... | 
|---|
| 5 | D DEBUG^HLEVAPI2("ONOFFM") ; Debug data created conditionally | 
|---|
| 6 | ; | 
|---|
| 7 | ; Stop all event monitoring to enable on-site debugging... | 
|---|
| 8 | QUIT:$G(^TMP("HLEVFLAG",$J))["STOP"  ;-> | 
|---|
| 9 | ; | 
|---|
| 10 | QUIT $$ONOFF(776.1,+HLEVIENE,STATUS) | 
|---|
| 11 | ; | 
|---|
| 12 | ONOFFS(HLEVIEN,STATUS) ; Turn on/off system... | 
|---|
| 13 | QUIT $$ONOFF(776.999,+HLEVIEN,STATUS) | 
|---|
| 14 | ; | 
|---|
| 15 | ONOFF(FILE,HLEVIENE,STATUS) ; Turn on/off event monitor or system... | 
|---|
| 16 | ; FILE can = 776.1 or 776.999 | 
|---|
| 17 | ; Actually, HLEVIENE can be the IEN of the monitor, or the system. | 
|---|
| 18 | ; If STATUS="A", sets status to ACTIVE. | 
|---|
| 19 | ; If STATUS="I", sets status to INACTIVE. | 
|---|
| 20 | ; If STATUS=null or undefined (not passed), present status returned... | 
|---|
| 21 | ; | 
|---|
| 22 | N DA,DATA,DIE,DR,STAT,X,Y | 
|---|
| 23 | ; | 
|---|
| 24 | ; Find entry and IEN and zero node data... | 
|---|
| 25 | S FILE=+$G(FILE) I FILE'=776.1&(FILE'=776.999) QUIT "^Invalid file number" ;-> | 
|---|
| 26 | S HLEVIENE=$G(HLEVIENE) | 
|---|
| 27 | S:FILE=776.999 HLEVIENE=1 ; Just overwrite anything passed by user... | 
|---|
| 28 | I $L($G(STATUS))>1 QUIT "^Invalid STATUS passed" ;-> | 
|---|
| 29 | S STATUS=$$UP^XLFSTR($E($G(STATUS)_" ")) | 
|---|
| 30 | I " AI"'[STATUS QUIT "^Invalid STATUS passed" ;-> | 
|---|
| 31 | ; | 
|---|
| 32 | ; If they passed the name of the entry... | 
|---|
| 33 | I HLEVIENE'=+HLEVIENE D  QUIT:HLEVIENE'>0 "^Couldn't find entry" ;-> | 
|---|
| 34 | .  I $TR(HLEVIENE," ","")']"" QUIT  ;-> | 
|---|
| 35 | .  S HLEVIENE(1)=$O(^HLEV(FILE,"B",HLEVIENE,0)) ; Must have passed in name | 
|---|
| 36 | .  I HLEVIENE(1)'>0 D | 
|---|
| 37 | .  .  S HLEVIENE(1)=$O(^HLEV(FILE,"B",$$UP^XLFSTR(HLEVIENE),0)) | 
|---|
| 38 | .  S HLEVIENE=HLEVIENE(1) | 
|---|
| 39 | ; | 
|---|
| 40 | ; Get zero node... | 
|---|
| 41 | S DATA=$G(^HLEV(FILE,+HLEVIENE,0)) QUIT:DATA']"" "^Couldn't find entry" ;-> | 
|---|
| 42 | ; | 
|---|
| 43 | ; Get current status... | 
|---|
| 44 | S STAT=$E($P(DATA,U,2)_" ") | 
|---|
| 45 | ; | 
|---|
| 46 | ; If current status not yet entered in field... | 
|---|
| 47 | I " AI"'[STAT D  QUIT STAT ;-> | 
|---|
| 48 | .  ; Passed-in STATUS not A or I, so just tell them value of status... | 
|---|
| 49 | .  I "AI"'[STATUS S STAT="^Status not entered yet" QUIT  ;-> | 
|---|
| 50 | .  ; User passed in a value to set the status to, so set it for them... | 
|---|
| 51 | .  S DA=+HLEVIENE,DIE=FILE,DR="2///"_STATUS | 
|---|
| 52 | .  D ^DIE | 
|---|
| 53 | .  S STAT=STATUS | 
|---|
| 54 | ; | 
|---|
| 55 | ; If all they want is the status... | 
|---|
| 56 | I STATUS=" " QUIT STAT ;-> | 
|---|
| 57 | ; | 
|---|
| 58 | ; Status entered in field before call... | 
|---|
| 59 | ; | 
|---|
| 60 | ; If passed-in status is the same as the current status in entry... | 
|---|
| 61 | I STAT=STATUS QUIT STATUS ;-> Already set... | 
|---|
| 62 | ; | 
|---|
| 63 | ; Change status of field to passed-in value... | 
|---|
| 64 | S DA=+HLEVIENE,DIE=FILE,DR="2///"_STATUS | 
|---|
| 65 | D ^DIE | 
|---|
| 66 | ; | 
|---|
| 67 | Q STATUS | 
|---|
| 68 | ; | 
|---|
| 69 | ONOFFEV ; Turn on/off event monitor | 
|---|
| 70 | N CHG | 
|---|
| 71 | ; | 
|---|
| 72 | N DATA,DIC,IEN,IENR | 
|---|
| 73 | D HDR^HLEVREP("Turn on/off Event Monitors") | 
|---|
| 74 | ; | 
|---|
| 75 | S7761 KILL DATA,DIC,IEN,IENR | 
|---|
| 76 | W ! | 
|---|
| 77 | S IEN=$$ASKIEN^HLEVREP(776.1) QUIT:IEN'>0  ;-> | 
|---|
| 78 | D HDR^HLEVREP("Turn on/off Event Monitors",IEN) | 
|---|
| 79 | D VIEW7761(+IEN) | 
|---|
| 80 | D RUNS7761^HLEVREP(+IEN) | 
|---|
| 81 | I $D(^TMP($J,"HLRUNS")) D | 
|---|
| 82 | .  W !!,"Recent Checks of the Monitor by Master Job" | 
|---|
| 83 | .  W !,$$REPEAT^XLFSTR("-",IOM) | 
|---|
| 84 | .  W !,"Check-time",?18,"Results" | 
|---|
| 85 | .  W !,$$REPEAT^XLFSTR("-",IOM) | 
|---|
| 86 | .  S IENR=0 | 
|---|
| 87 | .  F  S IENR=$O(^TMP($J,"HLRUNS",IENR)) Q:IENR'>0  D | 
|---|
| 88 | .  .  S DATA=$G(^TMP($J,"HLRUNS",IENR)) QUIT:DATA']""  ;-> | 
|---|
| 89 | .  .  W !,$$SDT^HLEVX001($P(DATA,U,2)),?18,$$STAT2M^HLEVX001($P(DATA,U)) | 
|---|
| 90 | W ! | 
|---|
| 91 | S CHG=$$ACTINACT(776.1,+IEN,2,"Event monitor status") | 
|---|
| 92 | I CHG D | 
|---|
| 93 | .  D HDR^HLEVREP("Turn on/off Event Monitors",IEN) | 
|---|
| 94 | .  D VIEW7761(+IEN) | 
|---|
| 95 | F  Q:(IOSL-$Y)<4  W ! | 
|---|
| 96 | ;S X=$$BTE^HLCSMON("Press RETURN to continue... ") | 
|---|
| 97 | G S7761 ;-> | 
|---|
| 98 | ; | 
|---|
| 99 | VIEW7761(IEN) ; Actual display code for entry... | 
|---|
| 100 | N NODE,P1,P2,P3,P4,P5,P6,PAR,PCE | 
|---|
| 101 | ; | 
|---|
| 102 | S NODE=$G(^HLEV(776.1,+IEN,0)) | 
|---|
| 103 | F PCE=1:1:6 S @("P"_PCE)=$P(NODE,U,PCE) | 
|---|
| 104 | ; | 
|---|
| 105 | ; Store under field number... | 
|---|
| 106 | F PCE=1:1:8 S PAR(PCE)=$P($G(^HLEV(776.1,+IEN,40)),U,PCE) | 
|---|
| 107 | ; | 
|---|
| 108 | D SH7761("Description",$S(P3]"":P3,1:"---")) | 
|---|
| 109 | D SH7761("Status",$S(P2="A":"ACTIVE",1:"INACTIVE")) | 
|---|
| 110 | D SH7761("Requeue minutes",$S(P4:P4_"min",P4=0:"0 [Immediate Run]",1:"---")) | 
|---|
| 111 | D SH7761("Notification mail group",$S(P5:$P($G(^XMB(3.8,+P5,0)),U),1:"---")) | 
|---|
| 112 | D SH7761("M startup",$S(P6]"":P6,1:"---")) | 
|---|
| 113 | W !,$$CJ^XLFSTR(" Parameter ""Variable"" Descriptors ",IOM,"-") | 
|---|
| 114 | F PCE=1:1:8 I PAR(PCE)]"" D | 
|---|
| 115 | .  W !,?25,"Parameter - "_PCE_" = ",PAR(PCE) | 
|---|
| 116 | ; | 
|---|
| 117 | Q | 
|---|
| 118 | ; | 
|---|
| 119 | SH7761(TAG,VAL) ; | 
|---|
| 120 | W !,?(35-$L(TAG)-2),TAG,":",?45,VAL | 
|---|
| 121 | Q | 
|---|
| 122 | ; | 
|---|
| 123 | ONOFFPAR ; Turn on/off parameters... | 
|---|
| 124 | N CHG | 
|---|
| 125 | ; | 
|---|
| 126 | D VIEW7769^HLEVREP(0) | 
|---|
| 127 | ; | 
|---|
| 128 | W ! | 
|---|
| 129 | ; | 
|---|
| 130 | S CHG=0 | 
|---|
| 131 | S X=$$ACTINACT(776.999,1,2,"STATUS-MASTER JOB") I X=1 S CHG=1 | 
|---|
| 132 | S X=$$ACTINACT(776.999,1,6,"STATUS-EVENT MONITORING") I X=1 S CHG=1 | 
|---|
| 133 | ; | 
|---|
| 134 | I CHG D VIEW7769^HLEVREP(0) | 
|---|
| 135 | ; | 
|---|
| 136 | W ! | 
|---|
| 137 | F  Q:(IOSL-$Y)<3  W ! | 
|---|
| 138 | S X=$$BTE^HLCSMON("Press RETURN to exit... ") | 
|---|
| 139 | ; | 
|---|
| 140 | Q | 
|---|
| 141 | ; | 
|---|
| 142 | ACTINACT(FILE,IEN,FLD,TAG) ; Turn on/off status fields... | 
|---|
| 143 | N DA,DIE,DR,STAT,X,Y | 
|---|
| 144 | S STAT=$P($G(^HLEV(FILE,IEN,0)),U,+FLD) | 
|---|
| 145 | S X=$$YN^HLCSRPT4("Change '"_TAG_"' to "_$S(STAT="A":"INACTIVE",1:"ACTIVE"),"No") I X'=1 D  QUIT "" ;-> | 
|---|
| 146 | .  W "  ... nothing changed ..." | 
|---|
| 147 | S DA=IEN,DIE=FILE,DR=FLD_"///"_$S(STAT="A":"I",1:"A") | 
|---|
| 148 | D ^DIE | 
|---|
| 149 | W "     changed!" | 
|---|
| 150 | Q 1 | 
|---|
| 151 | ; | 
|---|
| 152 | EVENTCHK(HLEVIENM) ; Loop thru all MONITORs... | 
|---|
| 153 | ; NOEVCHK,ZTSKMST -- req | 
|---|
| 154 | N HLEVIENE,HLEVNM | 
|---|
| 155 | ; | 
|---|
| 156 | ; Check STATUS-EVENT... | 
|---|
| 157 | S NO=$O(^HLEV(776.999,":"),-1) QUIT:$P($G(^HLEV(776.999,+NO,0)),U,6)'="A"  ;-> | 
|---|
| 158 | ; | 
|---|
| 159 | S HLEVNM=0 | 
|---|
| 160 | F  S HLEVNM=$O(^HLEV(776.1,"B",HLEVNM)) Q:HLEVNM']""  D | 
|---|
| 161 | .  S HLEVIENE=0 | 
|---|
| 162 | .  F  S HLEVIENE=$O(^HLEV(776.1,"B",HLEVNM,HLEVIENE)) Q:'HLEVIENE  D | 
|---|
| 163 | .  .  D EVENTONE^HLEVAPI3(HLEVIENM,HLEVNM,HLEVIENE) | 
|---|
| 164 | .  .  S NOEVCHK=$G(NOEVCHK)+1 | 
|---|
| 165 | ; | 
|---|
| 166 | Q | 
|---|
| 167 | ; | 
|---|
| 168 | EVRES(HLEVIENM,HLEVIENE,RES,HLEVIENJ) ; Record result of queued task... | 
|---|
| 169 | ; ZTSK -- req | 
|---|
| 170 | N MIEN,NODE,STATUS | 
|---|
| 171 | ; | 
|---|
| 172 | ; Initial sets... | 
|---|
| 173 | S STATUS=$P($G(^HLEV(776,+$G(HLEVIENJ),0)),U,4) | 
|---|
| 174 | S RES=$E($$UP^XLFSTR($G(RES))) | 
|---|
| 175 | ; | 
|---|
| 176 | ; If any call made here, the job is running by definition... | 
|---|
| 177 | I $G(^HLEV(776,+$G(HLEVIENJ),0))]"" D | 
|---|
| 178 | .  ; ABORT^HLEVAPI might have set status to ERROR.  Don't override! | 
|---|
| 179 | .  S $P(^HLEV(776,+$G(HLEVIENJ),0),U,4)=$S(STATUS="E":"E",RES="X":"E",RES="F":"F",1:"R") | 
|---|
| 180 | ; | 
|---|
| 181 | ; If no master job, or RUNNING, quit... | 
|---|
| 182 | I HLEVIENM=9999999!(RES="R") QUIT  ;-> | 
|---|
| 183 | ; | 
|---|
| 184 | ; Store results in 776.2... | 
|---|
| 185 | S MIEN=$O(^HLEV(776.2,+HLEVIENM,51,"B",+HLEVIENE,0)) QUIT:MIEN'>0  ;-> | 
|---|
| 186 | S NODE=$G(^HLEV(776.2,+HLEVIENM,51,+MIEN,0)) QUIT:NODE']""  ;-> | 
|---|
| 187 | ; Various jobs will set... QUIT:$P(NODE,U,4)'=$G(ZTSK)  ;-> | 
|---|
| 188 | S $P(NODE,U,5)=$G(RES),$P(NODE,U,6)=$$NOW^XLFDT | 
|---|
| 189 | S ^HLEV(776.2,+HLEVIENM,51,+MIEN,0)=NODE | 
|---|
| 190 | ; | 
|---|
| 191 | Q | 
|---|
| 192 | ; | 
|---|
| 193 | RUNEV(LASTRUN,LAPSE) ; Is LASTRUN (FM) LAPSE(min) before NOW? | 
|---|
| 194 | N WHENRUN | 
|---|
| 195 | QUIT:LASTRUN']"" "" ;-> | 
|---|
| 196 | S WHENRUN=$$FMADD^XLFDT($$NOW^XLFDT,0,0,-LAPSE) | 
|---|
| 197 | Q $S(WHENRUN>LASTRUN:1,1:"") | 
|---|
| 198 | ; | 
|---|
| 199 | OKMCODE(MREF) ; Is this a valid M subrtn^rtn reference? | 
|---|
| 200 | N TXT | 
|---|
| 201 | QUIT:MREF'?1.8E1"^"1.8E "" ;-> | 
|---|
| 202 | S TXT=$T(@MREF) | 
|---|
| 203 | Q $S(TXT]"":1,1:"") | 
|---|
| 204 | ; | 
|---|
| 205 | Q1TIME(HLEVIENE,OVERRIDE,QTIME,XTMP) ; Start a one-time run of event monitor (w/no master job) | 
|---|
| 206 | N DATA,HLEVIENJ,HLEVNM,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE,ZTSK | 
|---|
| 207 | ; | 
|---|
| 208 | ; Override inactive entry? | 
|---|
| 209 | S OVERRIDE=$S($G(OVERRIDE):1,1:0) | 
|---|
| 210 | ; | 
|---|
| 211 | ; Queue to future time? | 
|---|
| 212 | S QTIME=$G(QTIME) | 
|---|
| 213 | ; | 
|---|
| 214 | ; Is event active? | 
|---|
| 215 | S DATA=$G(^HLEV(776.1,+$G(HLEVIENE),0)) QUIT:DATA']"" "^Entry not found" ;-> | 
|---|
| 216 | I $P(DATA,U,2)'="A",'OVERRIDE QUIT "^Event not active" ;-> | 
|---|
| 217 | ; | 
|---|
| 218 | ; More variable sets... | 
|---|
| 219 | S HLEVNM=$P(DATA,U) | 
|---|
| 220 | S HLEVIENM=9999999 ; A one-time, no master job, run... | 
|---|
| 221 | ; | 
|---|
| 222 | ; Create a monitor stub entry... | 
|---|
| 223 | S HLEVIENJ=$$NEWEVENT^HLEVAPI(HLEVIENE,QTIME) | 
|---|
| 224 | I HLEVIENJ'>0 QUIT "^Entry creation failure" ;-> | 
|---|
| 225 | ; | 
|---|
| 226 | ; Queue a new job w/stub entry's IEN... | 
|---|
| 227 | S ZTIO="",ZTDTH=$S(QTIME?7N1"."1.N:$$FMTH^XLFDT(QTIME),1:$H) | 
|---|
| 228 | S ZTDESC="HL Event Monitor - #"_HLEVIENE | 
|---|
| 229 | S ZTRTN="QUEUEV^HLEVAPI3" | 
|---|
| 230 | S ZTSAVE("HLEVIENJ")="",ZTSAVE("HLEVIENE")="" | 
|---|
| 231 | S ZTSAVE("HLEVNM")="",ZTSAVE("HLEVIENM")="" | 
|---|
| 232 | I $G(XTMP)]"" S ZTSAVE("XTMP")="" | 
|---|
| 233 | D ^%ZTLOAD | 
|---|
| 234 | ; | 
|---|
| 235 | I $G(^HLEV(776,+$G(HLEVIENJ),0))]"",$G(ZTSK)>0 D | 
|---|
| 236 | .  N DA,DIE,DR | 
|---|
| 237 | .  S DA=+HLEVIENJ,DIE=776,DR="8///"_ZTSK | 
|---|
| 238 | .  D ^DIE | 
|---|
| 239 | ; | 
|---|
| 240 | Q $G(ZTSK)_U_$G(HLEVIENJ) | 
|---|
| 241 | ; | 
|---|
| 242 | EOR ;HLEVAPI0 - Event Monitor APIs ;5/16/03 14:42 | 
|---|