1 | RORTSK02 ;HCIOFO/SG - TASK MANAGER UTILITIES ; 1/23/06 8:11am
|
---|
2 | ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006
|
---|
3 | ;
|
---|
4 | Q
|
---|
5 | ;
|
---|
6 | ;***** RETURNS A LIST OF USER'S TASKS
|
---|
7 | ;
|
---|
8 | ; .TASKLIST Reference to a local array that the task
|
---|
9 | ; list is returned to
|
---|
10 | ;
|
---|
11 | ; [REGIEN] Registry IEN
|
---|
12 | ;
|
---|
13 | ; [TYPE] Type of the task (1 - Generic, 2 - Report)
|
---|
14 | ;
|
---|
15 | ; [.FROM] Where to start/continue the list generation.
|
---|
16 | ; By defualt (if $G(FROM)'>0), the extraction starts
|
---|
17 | ; from the beginning of the user's task list.
|
---|
18 | ;
|
---|
19 | ; NOTE: The task, which number is passed via this
|
---|
20 | ; parameter, is not included in the report.
|
---|
21 | ;
|
---|
22 | ; After the call, this parameter contains the last
|
---|
23 | ; extracted task number or an empty string if there
|
---|
24 | ; are no more tasks.
|
---|
25 | ;
|
---|
26 | ; [NUMBER] Maximum number of tasks returned by the function.
|
---|
27 | ; By default (if $G(NUMBER)'>0), all task numbers
|
---|
28 | ; (starting from the point indicated by the FROM
|
---|
29 | ; parameter if it is defined) are retrieved.
|
---|
30 | ;
|
---|
31 | ; [USER] A user IEN (DUZ). By default (if $G(USER)'>0),
|
---|
32 | ; the curent user's DUZ is used.
|
---|
33 | ;
|
---|
34 | ; Return values:
|
---|
35 | ; <0 Error code
|
---|
36 | ; 0 No tasks have been found
|
---|
37 | ; >0 Number of tasks
|
---|
38 | ;
|
---|
39 | LIST(TASKLIST,REGIEN,TYPE,FROM,NUMBER,USER) ;
|
---|
40 | N DIR,NTSK,RC,ROOT,RORBUF,SCR,TASK K TASKLIST
|
---|
41 | S ROOT=$$ROOT^DILFD(798.8,,1)
|
---|
42 | S USER=$S($G(USER)>0:+USER,1:+$G(DUZ))
|
---|
43 | S DIR=$S($$UP^XLFSTR($G(NUMBER))["B":-1,1:1)
|
---|
44 | S NUMBER=$S($G(NUMBER)>0:+NUMBER,1:999999)
|
---|
45 | ;--- Generate a screen logic
|
---|
46 | S SCR="I 1"
|
---|
47 | S:$G(REGIEN)>0 SCR=SCR_","_"$P(RORBUF,U,3)="_(+REGIEN)
|
---|
48 | S:$G(TYPE)>0 SCR=SCR_","_"$P(RORBUF,U,2)="_(+TYPE)
|
---|
49 | ;--- Generate the output list
|
---|
50 | S TASK=$S($G(FROM)>0:FROM,1:""),NTSK=0
|
---|
51 | F S TASK=$O(@ROOT@("U",USER,TASK),DIR) Q:TASK="" D Q:NTSK'<NUMBER
|
---|
52 | . S RORBUF=$G(@ROOT@(TASK,0)) X SCR E Q
|
---|
53 | . S NTSK=NTSK+1,TASKLIST(TASK)=""
|
---|
54 | S FROM=TASK
|
---|
55 | Q NTSK
|
---|
56 | ;
|
---|
57 | ;***** PURGES THE OLD TASKS
|
---|
58 | ;
|
---|
59 | ; [DKEEP] Days to keep the old tasks (by default = 15)
|
---|
60 | ;
|
---|
61 | ; Return Values:
|
---|
62 | ; <0 Error code
|
---|
63 | ; 0 Ok
|
---|
64 | ;
|
---|
65 | PURGE(DKEEP) ;
|
---|
66 | N DA,DATE,DIK,FROM,RC,STATUS,TASK,TASKINFO
|
---|
67 | S ROOT=$$ROOT^DILFD(798.8,,1),DIK=$$OREF^DILF(ROOT)
|
---|
68 | S FROM=$$FMADD^XLFDT($$DT^XLFDT,1-$G(DKEEP,15))
|
---|
69 | ;---
|
---|
70 | S DATE=FROM,RC=0
|
---|
71 | F S DATE=$O(@ROOT@("ACDT",DATE),-1) Q:DATE="" D
|
---|
72 | . S TASK=""
|
---|
73 | . F S TASK=$O(@ROOT@("ACDT",DATE,TASK),-1) Q:TASK="" D
|
---|
74 | . . Q:$$TASKINFO(TASK,.TASKINFO)<0
|
---|
75 | . . S STATUS=+TASKINFO(6)
|
---|
76 | . . ;--- Do not delete pending, running and suspended tasks
|
---|
77 | . . Q:(STATUS=1)!(STATUS=2)!(STATUS=102)
|
---|
78 | . . ;--- If task is completed, use its completion
|
---|
79 | . . ;--- date instead of the creation date
|
---|
80 | . . I TASKINFO(9)>DATE Q:TASKINFO(9)'<FROM
|
---|
81 | . . ;--- Delete the record
|
---|
82 | . . S DA=TASK D ^DIK
|
---|
83 | ;---
|
---|
84 | Q $S(RC<0:RC,1:0)
|
---|
85 | ;
|
---|
86 | ;***** RETURNS STATUS OF THE TASK
|
---|
87 | ;
|
---|
88 | ; TASK Task number
|
---|
89 | ; [LTO] LOCK timeout (0 by default)
|
---|
90 | ; [UNDEF83] Return the error -83 if there is no task record.
|
---|
91 | ; By default (if +$G(UNDEF83)=0), zero is returned.
|
---|
92 | ;
|
---|
93 | ; Return Values:
|
---|
94 | ; <0 Error code
|
---|
95 | ; 0 Undefined task/Unknown Status
|
---|
96 | ; >0 Status (Code^Description)
|
---|
97 | ;
|
---|
98 | ; 1 Active: Pending
|
---|
99 | ; 2 Active: Running
|
---|
100 | ; 3 Inactive: Finished
|
---|
101 | ; 4 Inactive: Available
|
---|
102 | ; 5 Inactive: Interrupted
|
---|
103 | ;
|
---|
104 | ; 100 Inactive: Crashed
|
---|
105 | ; 101 Inactive: Errors
|
---|
106 | ; 102 Active: Suspended
|
---|
107 | ; 103 Active: Stopping
|
---|
108 | ;
|
---|
109 | STATUS(TASK,LTO,UNDEF83) ;
|
---|
110 | N ACTION,IENS,RORBUF,RORMSG,STATUS,TASKNODE,TMS,ZTSK
|
---|
111 | Q:TASK'>0 $$ERROR^RORERR(-85,,,,TASK)
|
---|
112 | S TASKNODE=$NA(^RORDATA(798.8,TASK))
|
---|
113 | Q:'$D(@TASKNODE) $S($G(UNDEF83):-83,1:0)
|
---|
114 | ;--- Get internal value of the STATUS field (2.01)
|
---|
115 | S STATUS=+$G(@TASKNODE@(2))
|
---|
116 | ;--- Lock the record and check if the task is running
|
---|
117 | L +@TASKNODE@("T",0):$G(LTO,0)
|
---|
118 | E S TMS="" D Q:TMS'="" TMS
|
---|
119 | . S ACTION=+$G(@TASKNODE@("A"))
|
---|
120 | . I ACTION=2 S TMS="103^Active: Stopping" Q
|
---|
121 | . I STATUS=100 S TMS="2^Active: Running" Q
|
---|
122 | . I STATUS=102 S TMS="102^Active: Suspended" Q
|
---|
123 | D
|
---|
124 | . ;--- Try to get status from the Taskman
|
---|
125 | . S ZTSK=TASK D STAT^%ZTLOAD
|
---|
126 | . S TMS=$S($G(ZTSK(0)):+$G(ZTSK(1)),1:0)
|
---|
127 | . ;--- Pending or Available
|
---|
128 | . I (TMS=1)!(TMS=4) S STATUS=TMS_U_$G(ZTSK(2)) Q
|
---|
129 | . ;--- Running (actually, crashed ;-)
|
---|
130 | . I TMS=2 S STATUS=100 Q
|
---|
131 | . ;--- Finished, Interrupted or Undefined
|
---|
132 | . I 'STATUS S:TMS STATUS=TMS_U_$G(ZTSK(2)) Q
|
---|
133 | . ;--- If the task record is not locked and the STATUS field shows
|
---|
134 | . ; 'Suspended' (102) then the task probably crashed while it
|
---|
135 | . ;--- was in the suspended state
|
---|
136 | . S:STATUS=102 STATUS=100
|
---|
137 | ;--- Get the external value of the STATUS field (if necessary)
|
---|
138 | I STATUS>0 D:$P(STATUS,U,2)=""
|
---|
139 | . S $P(STATUS,U,2)=$$EXTERNAL^DILFD(798.8,2.01,,STATUS,"RORMSG")
|
---|
140 | . S:$G(DIERR) STATUS=$$DBS^RORERR("RORMSG",-9,,,798.8)
|
---|
141 | ;
|
---|
142 | ;--- Unlock the task record
|
---|
143 | L -@TASKNODE@("T",0)
|
---|
144 | Q $TR(STATUS,">",":")
|
---|
145 | ;
|
---|
146 | ;***** RETURNS THE TASK INFORMATION
|
---|
147 | ;
|
---|
148 | ; TASK Task number
|
---|
149 | ;
|
---|
150 | ; .INFO Reference to a local variable (output):
|
---|
151 | ;
|
---|
152 | ; INFO(
|
---|
153 | ; OFFSET+1) Task Number
|
---|
154 | ; OFFSET+2) Task Type (internal^external)
|
---|
155 | ; OFFSET+3) Registry (IEN^Name)
|
---|
156 | ; OFFSET+4) Report (Code^Name)
|
---|
157 | ; OFFSET+5) Description
|
---|
158 | ; OFFSET+6) Task Status (internal^external)
|
---|
159 | ; OFFSET+7) Creation Time (internal)
|
---|
160 | ; OFFSET+8) User (DUZ^Name)
|
---|
161 | ; OFFSET+9) Completion Time (internal)
|
---|
162 | ; OFFSET+10) Progress Percentage
|
---|
163 | ; OFFSET+11) Scheduled to Run at (internal)
|
---|
164 | ; OFFSET+12) Task Log IEN
|
---|
165 | ; OFFSET+13) Job Number
|
---|
166 | ; OFFSET+14) User Comment
|
---|
167 | ;
|
---|
168 | ; [FLAGS] Characters controlling behavior of the function
|
---|
169 | ; (they can be combined):
|
---|
170 | ; E Return external values also (when applicable)
|
---|
171 | ;
|
---|
172 | ; [OFFSET] A number that is added to all subscripts in the
|
---|
173 | ; destination array (by default, it is zero).
|
---|
174 | ;
|
---|
175 | ; Return Values:
|
---|
176 | ; <0 Error code
|
---|
177 | ; 0 Ok
|
---|
178 | ;
|
---|
179 | TASKINFO(TASK,INFO,FLAGS,OFFSET) ;
|
---|
180 | N I,IENS,RORBUF,RORMSG,TMP
|
---|
181 | S FLAGS=$$UP^XLFSTR($G(FLAGS))
|
---|
182 | S OFFSET=$S($G(OFFSET)>0:+OFFSET,1:0)
|
---|
183 | ;--- Clear the output array
|
---|
184 | K:'OFFSET INFO S TMP=$$TIN
|
---|
185 | F I=1:1:TMP S INFO(OFFSET+I)=""
|
---|
186 | ;--- Get the task status
|
---|
187 | S TMP=$$STATUS(TASK,,1) Q:TMP<0 TMP
|
---|
188 | S INFO(OFFSET+1)=TASK
|
---|
189 | S INFO(OFFSET+6)=$S(FLAGS["E":TMP,1:+TMP)
|
---|
190 | ;--- Load the task record
|
---|
191 | S IENS=TASK_",",I=$S(FLAGS["E":"EIN",1:"IN")
|
---|
192 | S TMP=".02;.03;.04;.05;.07;.08;1.01;2.02;2.03;2.04;4"
|
---|
193 | D GETS^DIQ(798.8,IENS,TMP,I,"RORBUF","RORMSG")
|
---|
194 | I $G(DIERR) D Q RC
|
---|
195 | . S RC=$$DBS^RORERR("RORMSG",-9,,,798.8,IENS)
|
---|
196 | ;--- Format the output array
|
---|
197 | Q $$FRMTI^RORTSK03(OFFSET,.INFO,IENS,.RORBUF,FLAGS)
|
---|
198 | ;
|
---|
199 | ;***** RETURNS NUMBER OF NODES IN THE TASK INFORMATION ARRAY
|
---|
200 | TIN() Q 14
|
---|