source: WorldVistAEHR/trunk/r/CLINICAL_CASE_REGISTRIES-ROR/RORTSK01.m@ 1096

Last change on this file since 1096 was 613, checked in by George Lilly, 15 years ago

initial load of WorldVistAEHR

File size: 7.6 KB
Line 
1RORTSK01 ;HCIOFO/SG - (SUB)TASK UTILITIES ; 1/22/06 8:05pm
2 ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006
3 ;
4 ; These utilities should be called only from the tasks and subtasks
5 ; that are created and scheduled by the RORTSK API.
6 ;
7 ; The RORTSK local array is passed to the task. If the proxy task
8 ; is used then it passes this array by reference into the entry
9 ; point that implements the generic task or report.
10 ;
11 ; RORTSK( Task Number
12 ;
13 ; "PARAMS",...) Report Parameters
14 ; "TPP-PREV") Previous value of task progress percentage
15 ;
16 ; If the proxy task is used, additional nodes are created:
17 ;
18 ; "EP") Entry Point
19 ; "TYPE") Type of the Task
20 ; "REGIEN") Registry IEN
21 ; "REPORT") Code of the Report
22 ; "SCHCODE") Rescheduling Code
23 ;
24 ; See descriptions of the REPORT BUILDER field (10.01) of the
25 ; ROR REPORT PARAMETERS file (#799.34) and the ROR REPORT SCHEDULE
26 ; remote procedure for more details.
27 ;
28 Q
29 ;
30 ;***** DUMMY ENTRY POINT (TO AVOID CRASH DURING ALERT PROCESSING)
31ALERTRTN Q
32 ;
33 ;***** (SUB)TASK CLEANUP
34 ;
35 ; ERRCODE Error code of the task
36 ; [PARENT] Parent task for the subtask
37 ;
38 ; Return Values:
39 ; <0 Error code
40 ; 0 Ok
41 ;
42EXIT(ERRCODE,PARENT) ;
43 N IENS,RC,RORFDA,RORMSG,STATUS,TASKINFO,TASKNODE,TMP
44 S RC=0,STATUS=$S(ERRCODE=-42:5,ERRCODE<0:101,1:3),ZTREQ="@"
45 ;=== SUBTASK
46 I $G(PARENT) D Q RC
47 . ;--- Not implemented
48 ;=== TASK
49 S TASKNODE=$NA(^RORDATA(798.8,RORTSK))
50 S TMP=$$TASKINFO^RORTSK02(RORTSK,.TASKINFO)
51 ;--- Report statistics
52 D:+$G(TASKINFO(2))=2
53 . S TMP=+$G(TASKINFO(3)) ; Registry IEN
54 . D:TMP>0 INC^RORTSK12(TMP,+$G(TASKINFO(4)))
55 ;--- Send an alert to the user who has started the task
56 S TMP=$G(TASKINFO(5)) ; Task Description
57 D ORALERT^RORUTL18($$MSG^RORERR20(-101,,,RORTSK,TMP))
58 ;--- Update the task record
59 S IENS=RORTSK_","
60 S RORFDA(798.8,IENS,2.01)=STATUS ; Status
61 S RORFDA(798.8,IENS,2.02)=$$NOW^XLFDT ; Completion Time
62 S RORFDA(798.8,IENS,2.04)="@" ; Job Number
63 S RORFDA(798.8,IENS,4)="@" ; Progress
64 D FILE^DIE(,"RORFDA","RORMSG")
65 S:$G(DIERR) RC=$$DBS^RORERR("RORMSG",-9,,,798.8,IENS)
66 ;--- Cleanup
67 K @TASKNODE@("A"),@TASKNODE@("T")
68 L -@TASKNODE@("T",0)
69 Q RC
70 ;
71 ;***** INITIALIZES THE (SUB)TASK
72 ;
73 ; TASK Task number
74 ; [LOG] Log IEN (returned by the $$LOGIEN^RORLOG function)
75 ; [PARENT] Parent task for the subtask
76 ;
77 ; Return Values:
78 ; <0 Error code
79 ; 0 Ok
80 ;
81INIT(TASK,LOG,PARENT) ;
82 N I,RC,RORDTH,RORFDA,RORMSG,TASKNODE
83 S RORDTH=$G(ZTDTH) S:RORDTH'>0 RORDTH=$$NOW^XLFDT
84 S RC=0,RORTSK=+TASK K RORTSK("PREVTPP")
85 ;=== SUBTASK
86 I $G(PARENT) S RC=0 D Q RC
87 . ;--- Not implemented
88 ;=== TASK
89 S TASKNODE=$NA(^RORDATA(798.8,RORTSK))
90 ;--- Schedule the next instance of the task (if requested)
91 D:$G(RORTSK("SCHCODE"))'=""
92 . N EP,TYPE,REGIEN,REPORT,SCHCODE
93 . N ZTCPU,ZTDTH,ZTIO,ZTKIL,ZTPRI,ZTSAVE,ZTSYNC,ZTUCI
94 . F I="EP","TYPE","REGIEN","REPORT","SCHCODE" S @I=$G(RORTSK(I))
95 . Q:(TYPE'>0)!(EP="")
96 . S ZTDTH=$$SCH^XLFDT(SCHCODE,RORDTH,1)
97 . S TMP=$$CREATE^RORTSK(TYPE,EP,,REGIEN,REPORT,SCHCODE,.RORTSK)
98 ;--- Wait until the task record is created
99 S RC=$$TRWAIT(RORTSK) Q:RC<0 RC
100 ;--- Lock the task record
101 L +@TASKNODE@("T",0):5
102 E Q $$ERROR^RORERR(-11,,,,"the ROR TASK file")
103 ;--- Clear the list of subtasks
104 K @TASKNODE@("T")
105 ;--- Update the task record
106 S IENS=RORTSK_","
107 S RORFDA(798.8,IENS,2.01)=100 ; STATUS = 'Crashed'
108 S RORFDA(798.8,IENS,2.03)=$G(LOG) ; Log IEN
109 S RORFDA(798.8,IENS,2.04)=$J ; Job Number
110 D FILE^DIE(,"RORFDA","RORMSG")
111 S:$G(DIERR) RC=$$DBS^RORERR("RORMSG",-9,,,798.8,IENS)
112 Q RC
113 ;
114 ;***** TASK CONTROL FUNCTION
115 ;
116 ; [TPP] Task/Section progress (0-1)
117 ;
118 ; Return Values:
119 ; <0 Error code
120 ; 0 Ok
121 ;
122LOOP(TPP) ;
123 N ACTION,OFFSET,RC
124 ;--- Update the task progress percentage
125 D:$G(TPP)'=""
126 . I TPP'<0,TPP'>1 D S TPP=+$J(TPP,0,2)
127 . . S TPP=TPP*$G(RORTSK("TPP-BASE"),100)+$G(RORTSK("TPP-OFFS"))
128 . E S TPP=""
129 . Q:TPP=$G(RORTSK("TPP-PREV"))
130 . S (^RORDATA(798.8,RORTSK,"P"),RORTSK("TPP-PREV"))=TPP
131 ;--- Requested action
132 S ACTION=$S($$S^%ZTLOAD:2,1:+$G(^RORDATA(798.8,RORTSK,"A")))
133 Q:'ACTION 0
134 ;=== SUSPEND THE TASK
135 I ACTION=1 S RC=0 D Q RC
136 . N IENS,RORFDA,RORMSG
137 . S IENS=RORTSK_","
138 . ;--- Update the task status
139 . S RORFDA(798.8,IENS,2.01)=102 ; STATUS = 'Suspended'
140 . D FILE^DIE(,"RORFDA","RORMSG")
141 . S:$G(DIERR) RC=$$DBS^RORERR("RORMSG",-9,,,798.8,IENS)
142 . ;--- Suspension cycle
143 . F H 60 D Q:ACTION'=1
144 . . S ACTION=$S($$S^%ZTLOAD:2,1:+$G(^RORDATA(798.8,RORTSK,"A")))
145 . ;--- Restore the default task status
146 . S RORFDA(798.8,IENS,2.01)=100 ; STATUS = 'Crashed'
147 . D FILE^DIE(,"RORFDA","RORMSG")
148 . S:$G(DIERR) RC=$$DBS^RORERR("RORMSG",-9,,,798.8,IENS)
149 ;=== STOP THE TASK
150 I ACTION=2 D Q $$ERROR^RORERR(-42)
151 . S ZTSTOP=1
152 Q 0
153 ;
154 ;***** RETURNS THE VALUE/ATTRIBUTE OF THE TASK PARAMETER
155PARAM(NAME,ATTR) ;
156 Q:$G(ATTR)'="" $G(RORTSK("PARAMS",NAME,"A",ATTR))
157 Q $G(RORTSK("PARAMS",NAME))
158 ;
159 ;***** TASK PROXY
160 ;
161 ; RORTSK("EP") This node must contain name of the task entry point
162 ; ($$TAG^ROUTINE). The function should return either
163 ; a negative error code or zero.
164 ;
165TASK ;
166 N RORCACHE ; Cache of element and attribute names
167 N RORLOG ; Log subsystem constants & variables
168 N RORPARM ; Application parameters
169 ;
170 N ACTIVITY,I,INFO,RC,REGLST,RORERRDL,TASKINFO,TMP,TRC
171 S RORTSK=ZTSK
172 ;--- Initialize constants and variables
173 D INIT^RORUTL01("ROR")
174 ;S RORPARM("DEBUG")=1 ; Remove the first ';' to start in debug mode
175 S RORPARM("ERR")=1 ; Enable enhanced error processing
176 S RORPARM("LOG")=1 ; Enable error recording
177 ;--- Wait until the task record is created
178 S TMP=$$TRWAIT(RORTSK)
179 ;--- Get the task information
180 S TRC=$$TASKINFO^RORTSK02(RORTSK,.TASKINFO,"E")
181 ;--- Open a task log
182 S TMP=$P($G(TASKINFO(3)),U,2) S:TMP'="" REGLST(TMP)=""
183 S ACTIVITY=$S(+$G(TASKINFO(2))=2:5,1:0)
184 S TMP=$$SETUP^RORLOG(.REGLST)
185 S RC=$$OPEN^RORLOG(.REGLST,ACTIVITY,"TASK #"_RORTSK_" STARTED")
186 ;--- Abort the task if task information was not available
187 I TRC<0 D:RC'<0 Q
188 . S TMP=$$ERROR^RORERR(-56,,,,TRC,"$$TASKINFO^RORTSK02")
189 . D CLOSE^RORLOG("TASK #"_RORTSK_" ABORTED")
190 D
191 . ;--- Record the task information (if available)
192 . S I=0,TMP=$G(TASKINFO(5))
193 . S:TMP'="" I=I+1,INFO(I)="Description: '"_TMP_"'"
194 . S TMP=$P($G(TASKINFO(8)),U,2)
195 . S:TMP'="" I=I+1,INFO(I)="User: '"_TMP_"'"
196 . S TMP=$G(TASKINFO(14))
197 . S:TMP'="" I=I+1,INFO(I)="Comment: '"_TMP_"'"
198 . D:I LOG^RORLOG(2,"Task Information",,.INFO)
199 . ;--- Verify the entry point
200 . S RC=$$VERIFYEP^RORUTL01($G(RORTSK("EP")),1) Q:RC<0
201 . ;--- Initialize the task
202 . S RC=$$INIT(RORTSK,$$LOGIEN^RORLOG) Q:RC<0
203 . K ACTIVITY,INFO,REGLST,TASKINFO,TMP
204 . ;--- Call the entry point
205 . X "S TRC="_RORTSK("EP")_"(.RORTSK)"
206 ;
207 ;--- Post-processing
208 S TMP=$$EXIT(TRC)
209 ;--- Close the log
210 S TMP="TASK #"_RORTSK_$S(TRC<0:" ABORTED",1:" COMPLETED")
211 D CLOSE^RORLOG(TMP)
212 Q
213 ;
214 ;***** SETS THE BASE VALUE FOR THE PROGRESS INDICATOR
215 ;
216 ; BASE Base value for the progress indicator (0-100)
217 ;
218TPPSETUP(BASE) ;
219 I $G(BASE)'>0 K RORTSK("TPP-BASE"),RORTSK("TPP-OFFS") Q
220 N TMP
221 S RORTSK("TPP-OFFS")=$G(RORTSK("TPP-OFFS"))+$G(RORTSK("TPP-BASE"))
222 S TMP=100-$G(RORTSK("TPP-OFFS"))
223 S RORTSK("TPP-BASE")=$S(BASE<TMP:BASE,1:TMP)
224 S TMP=$$LOOP(0)
225 Q
226 ;
227 ;***** WAITS UNTIL THE TASK RECORD IS CREATED
228 ;
229 ; TASK Task number
230 ;
231 ; Return Values:
232 ; <0 Error code
233 ; 0 Ok
234 ;
235TRWAIT(TASK) ;
236 N I F I=1:1:5 Q:$D(^RORDATA(798.8,TASK,0)) H 1
237 Q $S($D(^RORDATA(798.8,TASK,0)):0,1:$$ERROR^RORERR(-83,,,,TASK))
Note: See TracBrowser for help on using the repository browser.