1 | HLOPROC ;ALB/CJM- Generic HL7 Process - 10/4/94 1pm ;03/26/2007
|
---|
2 | ;;1.6;HEALTH LEVEL SEVEN;**126,134**;Oct 13, 1995;Build 30
|
---|
3 | ;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | PROCESS ;queued entry point
|
---|
6 | ;
|
---|
7 | ;insure just one process manager
|
---|
8 | I PROCNAME="PROCESS MANAGER" N RUNNING L +^HLTMP(PROCNAME):1 S RUNNING='$T D Q:RUNNING
|
---|
9 | .I 'RUNNING D
|
---|
10 | ..D SETNM^%ZOSV($E("HLOmgr:"_$J,1,17))
|
---|
11 | .E D
|
---|
12 | ..L +HL7("COUNTING PROCESSES"):20
|
---|
13 | ..K:$D(ZTSK) ^HLTMP("HL7 QUEUED PROCESSES",ZTSK)
|
---|
14 | ..S ^HLC("HL7 PROCESS COUNTS","RUNNING","PROCESS MANAGER")=1
|
---|
15 | ..S ^HLC("HL7 PROCESS COUNTS","QUEUED","PROCESS MANAGER")=0
|
---|
16 | ..L -HL7("COUNTING PROCESSES")
|
---|
17 | ..S ZTREQ="@"
|
---|
18 | ;
|
---|
19 | ;invoke the framework process
|
---|
20 | D HL7PROC(PROCNAME)
|
---|
21 | ;
|
---|
22 | I PROCNAME="PROCESS MANAGER" L -^HLTMP(PROCNAME)
|
---|
23 | S ZTREQ="@"
|
---|
24 | Q
|
---|
25 | ;
|
---|
26 | HL7PROC(PROCNAME) ;
|
---|
27 | ;This is the generic HL7 process used by all processes started under the HL7 Process Manager
|
---|
28 | ;Input:
|
---|
29 | ; PROCNAME - the name of a process found in the HL7 Process Registry
|
---|
30 | ; OUTPUT - none
|
---|
31 | ;
|
---|
32 | N PROCESS,HL7STOP,WORK
|
---|
33 | ;
|
---|
34 | S ^HL7TMP("HL7 PROCESS NAME",$J)=PROCNAME
|
---|
35 | ;
|
---|
36 | L +HL7("COUNTING PROCESSES"):20
|
---|
37 | I $D(ZTQUEUED) D
|
---|
38 | .K:$D(ZTSK) ^HLTMP("HL7 QUEUED PROCESSES",ZTSK)
|
---|
39 | .I $$INC^HLOSITE($NA(^HLC("HL7 PROCESS COUNTS","QUEUED",PROCNAME)),-1)<0,$$INC^HLOSITE($NA(^HLC("HL7 PROCESS COUNTS","QUEUED",PROCNAME)))
|
---|
40 | L +^HLTMP("HL7 RUNNING PROCESSES",$J):0
|
---|
41 | I $$INC^HLOSITE($NA(^HLC("HL7 PROCESS COUNTS","RUNNING",PROCNAME)))
|
---|
42 | S ^HLTMP("HL7 RUNNING PROCESSES",$J)=$H_"^"_$G(ZTSK)_"^"_PROCNAME
|
---|
43 | L -HL7("COUNTING PROCESSES")
|
---|
44 | ;
|
---|
45 | ;
|
---|
46 | I $$GETPROC(PROCNAME,.PROCESS),'$$CHK4STOP(.PROCESS) D
|
---|
47 | .S $P(^HLD(779.3,PROCESS("IEN"),0),"^",6)=$$NOW^XLFDT
|
---|
48 | .;
|
---|
49 | .;should this task be made persistent?
|
---|
50 | .I PROCESS("PERSISTENT"),$G(ZTQUEUED),$$PSET^%ZTLOAD(ZTQUEUED)
|
---|
51 | .;
|
---|
52 | .S HL7STOP=0
|
---|
53 | .F D Q:HL7STOP
|
---|
54 | ..N $ETRAP,$ESTACK S $ETRAP="G ERROR^HLOPROC"
|
---|
55 | ..N HL7TRIES,GOTWORK
|
---|
56 | ..F HL7TRIES=1:1 D Q:GOTWORK Q:$G(HL7STOP)
|
---|
57 | ...S GOTWORK=$$GETWORK(.PROCESS,.WORK)
|
---|
58 | ...Q:GOTWORK
|
---|
59 | ...;since there is no work, don't want another process starting
|
---|
60 | ...S $P(^HLD(779.3,PROCESS("IEN"),0),"^",6)=$$NOW^XLFDT
|
---|
61 | ...H PROCESS("HANG")
|
---|
62 | ...S HL7STOP=$$CHK4STOP(.PROCESS,HL7TRIES)
|
---|
63 | ..Q:$G(HL7STOP)
|
---|
64 | ..I GOTWORK D DOWORK(.PROCESS,.WORK) S HL7TRIES=0
|
---|
65 | ..S:'$G(HL7STOP) HL7STOP=$$CHK4STOP(.PROCESS,.HL7TRIES)
|
---|
66 | ;
|
---|
67 | S $P(^HLD(779.3,PROCESS("IEN"),0),"^",6)=$$NOW^XLFDT
|
---|
68 | ;
|
---|
69 | END ;
|
---|
70 | S HL7STOP=1
|
---|
71 | K ^HL7TMP("HL7 PROCESS NAME",$J)
|
---|
72 | L +HL7("COUNTING PROCESSES"):20
|
---|
73 | K ^HLTMP("HL7 RUNNING PROCESSES",$J)
|
---|
74 | I $$INC^HLOSITE($NA(^HLC("HL7 PROCESS COUNTS","RUNNING",PROCNAME)),-1)<0,$$INC^HLOSITE($NA(^HLC("HL7 PROCESS COUNTS","RUNNING",PROCNAME)),1)
|
---|
75 | L -^HLTMP("HL7 RUNNING PROCESSES",$J)
|
---|
76 | L -HL7("COUNTING PROCESSES")
|
---|
77 | K ^TMP("HL7 ERRORS",$J)
|
---|
78 | ;
|
---|
79 | Q
|
---|
80 | ;
|
---|
81 | ERROR ;error trap
|
---|
82 | ;
|
---|
83 | S $ETRAP="Q:$QUIT """" Q"
|
---|
84 | ;
|
---|
85 | ;while debugging always quit on error
|
---|
86 | I $G(^HLTMP("LOG ALL ERRORS"))!($ECODE["TOOMANYFILES")!($ECODE["EDITED") D Q:$QUIT "" Q
|
---|
87 | .D ^%ZTER
|
---|
88 | .S:'$D(PROCNAME) PROCNAME=$G(^HL7TMP("HL7 PROCESS NAME",$J))
|
---|
89 | .D END
|
---|
90 | ;
|
---|
91 | ;a lot of errors of the same type may indicate an endless loop, so quit
|
---|
92 | ;to be on the safe side. Decrement the process count.
|
---|
93 | N HOUR
|
---|
94 | S HOUR=$E($$NOW^XLFDT,1,10)
|
---|
95 | I $G(^TMP("HL7 ERRORS",$J,HOUR,$P($ECODE,",",2)))>30 D Q:$QUIT "" Q
|
---|
96 | .;D ^%ZTER
|
---|
97 | .S:'$D(PROCNAME) PROCNAME=$G(^HL7TMP("HL7 PROCESS NAME",$J))
|
---|
98 | .D END
|
---|
99 | ;
|
---|
100 | ;can continue processing after logging the error
|
---|
101 | S ^TMP("HL7 ERRORS",$J,HOUR,$P($ECODE,",",2))=$G(^TMP("HL7 ERRORS",$J,HOUR,$P($ECODE,",",2)))+1
|
---|
102 | D ^%ZTER
|
---|
103 | D UNWIND^%ZTER
|
---|
104 | Q
|
---|
105 | ;
|
---|
106 | GETPROC(PROCNAME,PROCESS) ;
|
---|
107 | ;using PROCNAME to find the entry in the HL7 Process Registry, returns the entry as a subscripted array in .PROCESS
|
---|
108 | ;
|
---|
109 | ;Output: Function returns 0 on failure, 1 on success
|
---|
110 | ;
|
---|
111 | N IEN,NODE
|
---|
112 | S IEN=$O(^HLD(779.3,"B",PROCNAME,0))
|
---|
113 | Q:'IEN 0
|
---|
114 | S PROCESS("NAME")=PROCNAME
|
---|
115 | S PROCESS("IEN")=IEN
|
---|
116 | S NODE=$G(^HLD(779.3,IEN,0))
|
---|
117 | S PROCESS("MINIMUM")=+$P(NODE,"^",3)
|
---|
118 | S PROCESS("MAXIMUM")=+$P(NODE,"^",4)
|
---|
119 | S PROCESS("HANG")=+$P(NODE,"^",7)
|
---|
120 | I 'PROCESS("HANG") S PROCESS("HANG")=1
|
---|
121 | S PROCESS("GET WORK")=$P(NODE,"^",8,9)
|
---|
122 | S PROCESS("DO WORK")=$P(NODE,"^",10,11)
|
---|
123 | S PROCESS("MAX TRIES")=$P(NODE,"^",12)
|
---|
124 | I 'PROCESS("MAX TRIES") S PROCESS("MAX TRIES")=999
|
---|
125 | S PROCESS("PERSISTENT")=+$P(NODE,"^",13)
|
---|
126 | S PROCESS("LINK")=$P(NODE,"^",14)
|
---|
127 | Q 1
|
---|
128 | ;
|
---|
129 | GETWORK(PROCESS,WORK) ;
|
---|
130 | N RETURN,XECUTE
|
---|
131 | I PROCESS("LINK")]"" S WORK("LINK")=PROCESS("LINK")
|
---|
132 | S XECUTE="S RETURN=$$"_PROCESS("GET WORK")_"(.WORK)"
|
---|
133 | D
|
---|
134 | .N PROCESS
|
---|
135 | .X XECUTE
|
---|
136 | Q RETURN
|
---|
137 | ;
|
---|
138 | DOWORK(PROCESS,WORK) ;
|
---|
139 | N XECUTE
|
---|
140 | M PARMS=WORK
|
---|
141 | S XECUTE="D "_PROCESS("DO WORK")_"(.WORK)"
|
---|
142 | D
|
---|
143 | .N PROCESS,HL7TRIES,PARMS,PROCNAME
|
---|
144 | .X XECUTE
|
---|
145 | M WORK=PARMS
|
---|
146 | Q
|
---|
147 | ;
|
---|
148 | CHK4STOP(PROCESS,HL7TRIES) ;
|
---|
149 | ;Determines if the process should stop, returns 1 if yes, 0 if no
|
---|
150 | ;
|
---|
151 | Q:$$CHKSTOP 1
|
---|
152 | Q:'$P($G(^HLD(779.3,PROCESS("IEN"),0)),"^",2) 1
|
---|
153 | I $G(HL7TRIES)>(PROCESS("MAX TRIES")-1),PROCESS("MINIMUM")<$G(^HLC("HL7 PROCESS COUNTS","RUNNING",PROCESS("NAME"))) Q 1
|
---|
154 | Q:$G(^HLC("HL7 PROCESS COUNTS","RUNNING",PROCESS("NAME")))>PROCESS("MAXIMUM") 1
|
---|
155 | Q 0
|
---|
156 | ;
|
---|
157 | CHKSTOP() ;has HL7 been requested to stop?
|
---|
158 | Q '$P($G(^HLD(779.1,1,0)),"^",9)
|
---|