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