[613] | 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
|
---|