- ECXDTASK ;ALB/TJL - Option, ECX KILL TASK ;3/19/24 14:35
- ;;3.0;DSS EXTRACTS;**190**;Dec 22, 1997;Build 36
- ;
- ; Reference to $$PRDEA^XUSER supported by DBIA #2343.
- ; Reference to ^%ZTLOAD:ASKSTOP,KILL,S, supported by ICR # 10063
- ;
- ENV ;Establish Routine Environment
- N DIR,XUTMT,ZTSK
- K DIRUT,DTOUT,DUOUT ;Clean-up for so we can use them too.
- N U,LN,DTOUT,DUOUT,X,Y,ZT,ZTOUT,ZTS
- S U="^" S $P(LN,"-",80)=""
- START ;
- K ^TMP($J)
- N ABBR,STAT,FOUND,QCOUNT,TASKNO,LISTNO,QREC,DA7271,VERB,PRINTNM,JOBNO
- N STARTDT,ENDDT,SCHED,DTCREATE,HSEC,SECNODE
- W @IOF ;,"Please wait while I find the DSS Extract tasks...searching..."
- S (FOUND,QCOUNT,ZTOUT)=0 S $P(LN,"-",80)=""
- S ABBR="" F S ABBR=$O(^XTMP("ECX EXTRACT",ABBR)) Q:ABBR="" D
- . S QREC=^XTMP("ECX EXTRACT",ABBR) Q:QREC=""
- . S ZTSK=$P(QREC,U,1) D STAT^%ZTLOAD
- . I ZTSK(0) D
- . . S JOBNO=$P(QREC,U,6)
- . . I ZTSK(1)=1,ZTSK(2)="Active: Pending" S STAT="P" D VALID Q
- . . I ZTSK(1)=2,ZTSK(2)="Active: Running" S STAT="R" D VALID
- . . Q
- . Q
- W ! ;"finished!!",!
- I 'FOUND W !,"There are no extract-related tasks queued.",! Q
- E S SECNODE=0,LISTNO=0 F S SECNODE=$O(^TMP($J,SECNODE)) Q:SECNODE'>0 D I ZTOUT Q
- . S TASKNO=0 F S TASKNO=$O(^TMP($J,SECNODE,TASKNO)) Q:TASKNO="" D I ZTOUT Q
- . . S LISTNO=LISTNO+1
- . . S ^TMP($J,0,LISTNO)=TASKNO
- . . S QREC=^TMP($J,SECNODE,TASKNO,0)
- . . S DA7271=$O(^ECX(727.1,"C",$P(QREC,U,1),0))
- . . S PRINTNM=$P(^ECX(727.1,DA7271,0),U,7)
- . . S Y=$P(QREC,U,5) D DD^%DT S STARTDT=Y
- . . S Y=$P(QREC,U,6) D DD^%DT S ENDDT=Y
- . . S SCHED=$P(QREC,U,4)
- . . S JOBNO=$P(QREC,U,7)
- . . S DTCREATE=$P(QREC,U,9)
- . . S DTCREATE=$$HTE^XLFDT(DTCREATE,"M")
- . . S VERB="Queued to start" S:$P(QREC,U,8)="R" VERB="Running since"
- . . S SCHED=$$HTE^XLFDT(SCHED,"M")
- . . W !,LISTNO_": (Task #"_TASKNO_")"
- . . W:$L($G(JOBNO))>0 ?32,"DSS Extract Log Record Number: "_JOBNO
- . . W !?3,PRINTNM_" Extract from "_STARTDT_" to "_ENDDT_"."
- . . W !?5,"Task created at "_$P(DTCREATE,"@",2)_" on "_$P(DTCREATE,"@",1)_" by "_$$NAME^XUSER($P(QREC,U,3),"F")
- . . W !?5,"Scheduled to start at "_$P(SCHED,"@",2)_" on "_$P(SCHED,"@",1)
- . . W !,LN
- . . I $Y>18 D EOP S ZTOUT=$D(DTOUT)!$D(DUOUT) Q:ZTOUT W @IOF
- I 'ZTOUT D EOL W !
- D PROMPT
- I $L(XUTMT)=0 W !?7,"No task selected. Returning to the DSS Extracts Transmission",!?7,"Management menu." Q
- D STOPTASK
- Q
- VALID ; Task is either running or scheduled - add to list
- N TASKDA S QCOUNT=QCOUNT+1,FOUND=1
- S TASKDA=$P(QREC,U,1)
- S HSEC=$$H3^%ZTM($P(QREC,U,3))
- S ^TMP($J,HSEC,TASKDA)=QCOUNT
- S ^TMP($J,HSEC,TASKDA,0)=ABBR_U_QREC
- S $P(^TMP($J,HSEC,TASKDA,0),U,8,9)=STAT_U_$P(^%ZTSK(ZTSK,0),U,5)
- Q
- ;
- EOP ;Simulate DIR(0)="E" Call To DIR (For Use Within DIR calls)
- S Y="" F ZT=0:0 R !,"Press RETURN to continue or '^' to exit: ",Y:$S($D(DTIME)#2:DTIME,1:60) S:'$T DTOUT="" S:Y="^" DUOUT="" Q:Y=""!(Y="^") W !!,"Enter either RETURN or '^'",! W:Y'["?" $C(7)
- Q
- ;
- EOL ;Simulate DIR(0)="E" call to DIR for end of listings
- S Y="" F ZT=0:0 R !,"End of listing. Press RETURN to continue: ",Y:$S($D(DTIME)#2:DTIME,1:60) S:'$T DTOUT="" S:Y="^" DUOUT="" Q:Y=""!(Y="^") W !!,"Enter either RETURN or '^'",! W:Y'["?" $C(7)
- Q
- ;
- PROMPT ; Prompt the user for a task number
- N DIRUT,X,Y,ZT
- F D SETPARAM,^DIR Q:+Y=Y!$D(DIRUT)
- S ZTSK=$S($D(DIRUT):"",'$D(^%ZTSK(Y,0))&$D(^TMP($J,0,Y)):$G(^TMP($J,0,Y)),1:Y)
- S XUTMT=ZTSK
- Q
- ;
- SETPARAM ;
- S DIR(0)="NAO^1:9999999999:0^D XFORM^ECXDTASK"
- S DIR("A")="Select Extract Task to Stop: "
- S DIR("?")="^D HELP1^ECXDTASK"
- S DIR("??")="^D HELP2^ECXDTASK" I DIR("??")="@" K DIR("??")
- ;I $D(XUTMT("B"))#2 S DIR("B")=XUTMT("B")
- I $D(DTIME)[0 S DIR("T")=60
- Q
- ;
- XFORM ; XFORM--Does task have an intact ^%ZTSK(#,0)
- I '$D(^%ZTSK(X)),$D(^TMP($J,0,X)) S X=$G(^TMP($J,0,X)) ;Use index to get task number.
- Q
- ;
- HELP1 ;SELECT--Default Help For '?'
- W !?5,"Select an extract task by its Task # (an integer between 1 and 999999999)"
- I $D(^TMP($J,0)) W ",",!?5,"or by its index number from the list."
- Q
- ;
- HELP2 ;SELECT--Default Help For '??'
- N DIR,DIRUT,X,Y D START
- Q
- ;
- STOPTASK ;Lookup Task File Data And Set Stop Flag
- N DA,RET
- S (DA,FOUND)=0
- F S DA=$O(^TMP($J,DA)) Q:FOUND!(DA="") D
- . I $G(^TMP($J,DA,XUTMT)) S FOUND=1
- I 'FOUND W !!,"Only tasks for DSS Extracts that are running or queued can be stopped." Q
- S RET=$$ASKSTOP^%ZTLOAD(XUTMT)
- D REPORT
- Q
- REPORT ;Report Results Of Lookup And Stop
- I $O(ZTSK(.3))]"" W !!?5,"Task unscheduled and stopped." K XUTMT Q
- I "1356ABCDEFGIL"[$P(ZTSK(.1),U) W !,"This task was already stopped." K XUTMT Q
- W !!?5,"Task stopped!" K XUTMT Q
- ;
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HECXDTASK 4652 printed Apr 23, 2025@18:06:58 Page 2
- ECXDTASK ;ALB/TJL - Option, ECX KILL TASK ;3/19/24 14:35
- +1 ;;3.0;DSS EXTRACTS;**190**;Dec 22, 1997;Build 36
- +2 ;
- +3 ; Reference to $$PRDEA^XUSER supported by DBIA #2343.
- +4 ; Reference to ^%ZTLOAD:ASKSTOP,KILL,S, supported by ICR # 10063
- +5 ;
- ENV ;Establish Routine Environment
- +1 NEW DIR,XUTMT,ZTSK
- +2 ;Clean-up for so we can use them too.
- KILL DIRUT,DTOUT,DUOUT
- +3 NEW U,LN,DTOUT,DUOUT,X,Y,ZT,ZTOUT,ZTS
- +4 SET U="^"
- SET $PIECE(LN,"-",80)=""
- START ;
- +1 KILL ^TMP($JOB)
- +2 NEW ABBR,STAT,FOUND,QCOUNT,TASKNO,LISTNO,QREC,DA7271,VERB,PRINTNM,JOBNO
- +3 NEW STARTDT,ENDDT,SCHED,DTCREATE,HSEC,SECNODE
- +4 ;,"Please wait while I find the DSS Extract tasks...searching..."
- WRITE @IOF
- +5 SET (FOUND,QCOUNT,ZTOUT)=0
- SET $PIECE(LN,"-",80)=""
- +6 SET ABBR=""
- FOR
- SET ABBR=$ORDER(^XTMP("ECX EXTRACT",ABBR))
- if ABBR=""
- QUIT
- Begin DoDot:1
- +7 SET QREC=^XTMP("ECX EXTRACT",ABBR)
- if QREC=""
- QUIT
- +8 SET ZTSK=$PIECE(QREC,U,1)
- DO STAT^%ZTLOAD
- +9 IF ZTSK(0)
- Begin DoDot:2
- +10 SET JOBNO=$PIECE(QREC,U,6)
- +11 IF ZTSK(1)=1
- IF ZTSK(2)="Active: Pending"
- SET STAT="P"
- DO VALID
- QUIT
- +12 IF ZTSK(1)=2
- IF ZTSK(2)="Active: Running"
- SET STAT="R"
- DO VALID
- +13 QUIT
- End DoDot:2
- +14 QUIT
- End DoDot:1
- +15 ;"finished!!",!
- WRITE !
- +16 IF 'FOUND
- WRITE !,"There are no extract-related tasks queued.",!
- QUIT
- +17 IF '$TEST
- SET SECNODE=0
- SET LISTNO=0
- FOR
- SET SECNODE=$ORDER(^TMP($JOB,SECNODE))
- if SECNODE'>0
- QUIT
- Begin DoDot:1
- +18 SET TASKNO=0
- FOR
- SET TASKNO=$ORDER(^TMP($JOB,SECNODE,TASKNO))
- if TASKNO=""
- QUIT
- Begin DoDot:2
- +19 SET LISTNO=LISTNO+1
- +20 SET ^TMP($JOB,0,LISTNO)=TASKNO
- +21 SET QREC=^TMP($JOB,SECNODE,TASKNO,0)
- +22 SET DA7271=$ORDER(^ECX(727.1,"C",$PIECE(QREC,U,1),0))
- +23 SET PRINTNM=$PIECE(^ECX(727.1,DA7271,0),U,7)
- +24 SET Y=$PIECE(QREC,U,5)
- DO DD^%DT
- SET STARTDT=Y
- +25 SET Y=$PIECE(QREC,U,6)
- DO DD^%DT
- SET ENDDT=Y
- +26 SET SCHED=$PIECE(QREC,U,4)
- +27 SET JOBNO=$PIECE(QREC,U,7)
- +28 SET DTCREATE=$PIECE(QREC,U,9)
- +29 SET DTCREATE=$$HTE^XLFDT(DTCREATE,"M")
- +30 SET VERB="Queued to start"
- if $PIECE(QREC,U,8)="R"
- SET VERB="Running since"
- +31 SET SCHED=$$HTE^XLFDT(SCHED,"M")
- +32 WRITE !,LISTNO_": (Task #"_TASKNO_")"
- +33 if $LENGTH($GET(JOBNO))>0
- WRITE ?32,"DSS Extract Log Record Number: "_JOBNO
- +34 WRITE !?3,PRINTNM_" Extract from "_STARTDT_" to "_ENDDT_"."
- +35 WRITE !?5,"Task created at "_$PIECE(DTCREATE,"@",2)_" on "_$PIECE(DTCREATE,"@",1)_" by "_$$NAME^XUSER($PIECE(QREC,U,3),"F")
- +36 WRITE !?5,"Scheduled to start at "_$PIECE(SCHED,"@",2)_" on "_$PIECE(SCHED,"@",1)
- +37 WRITE !,LN
- +38 IF $Y>18
- DO EOP
- SET ZTOUT=$DATA(DTOUT)!$DATA(DUOUT)
- if ZTOUT
- QUIT
- WRITE @IOF
- End DoDot:2
- IF ZTOUT
- QUIT
- End DoDot:1
- IF ZTOUT
- QUIT
- +39 IF 'ZTOUT
- DO EOL
- WRITE !
- +40 DO PROMPT
- +41 IF $LENGTH(XUTMT)=0
- WRITE !?7,"No task selected. Returning to the DSS Extracts Transmission",!?7,"Management menu."
- QUIT
- +42 DO STOPTASK
- +43 QUIT
- VALID ; Task is either running or scheduled - add to list
- +1 NEW TASKDA
- SET QCOUNT=QCOUNT+1
- SET FOUND=1
- +2 SET TASKDA=$PIECE(QREC,U,1)
- +3 SET HSEC=$$H3^%ZTM($PIECE(QREC,U,3))
- +4 SET ^TMP($JOB,HSEC,TASKDA)=QCOUNT
- +5 SET ^TMP($JOB,HSEC,TASKDA,0)=ABBR_U_QREC
- +6 SET $PIECE(^TMP($JOB,HSEC,TASKDA,0),U,8,9)=STAT_U_$PIECE(^%ZTSK(ZTSK,0),U,5)
- +7 QUIT
- +8 ;
- EOP ;Simulate DIR(0)="E" Call To DIR (For Use Within DIR calls)
- +1 SET Y=""
- FOR ZT=0:0
- READ !,"Press RETURN to continue or '^' to exit: ",Y:$SELECT($DATA(DTIME)#2:DTIME,1:60)
- if '$TEST
- SET DTOUT=""
- if Y="^"
- SET DUOUT=""
- if Y=""!(Y="^")
- QUIT
- WRITE !!,"Enter either RETURN or '^'",!
- if Y'["?"
- WRITE $CHAR(7)
- +2 QUIT
- +3 ;
- EOL ;Simulate DIR(0)="E" call to DIR for end of listings
- +1 SET Y=""
- FOR ZT=0:0
- READ !,"End of listing. Press RETURN to continue: ",Y:$SELECT($DATA(DTIME)#2:DTIME,1:60)
- if '$TEST
- SET DTOUT=""
- if Y="^"
- SET DUOUT=""
- if Y=""!(Y="^")
- QUIT
- WRITE !!,"Enter either RETURN or '^'",!
- if Y'["?"
- WRITE $CHAR(7)
- +2 QUIT
- +3 ;
- PROMPT ; Prompt the user for a task number
- +1 NEW DIRUT,X,Y,ZT
- +2 FOR
- DO SETPARAM
- DO ^DIR
- if +Y=Y!$DATA(DIRUT)
- QUIT
- +3 SET ZTSK=$SELECT($DATA(DIRUT):"",'$DATA(^%ZTSK(Y,0))&$DATA(^TMP($JOB,0,Y)):$GET(^TMP($JOB,0,Y)),1:Y)
- +4 SET XUTMT=ZTSK
- +5 QUIT
- +6 ;
- SETPARAM ;
- +1 SET DIR(0)="NAO^1:9999999999:0^D XFORM^ECXDTASK"
- +2 SET DIR("A")="Select Extract Task to Stop: "
- +3 SET DIR("?")="^D HELP1^ECXDTASK"
- +4 SET DIR("??")="^D HELP2^ECXDTASK"
- IF DIR("??")="@"
- KILL DIR("??")
- +5 ;I $D(XUTMT("B"))#2 S DIR("B")=XUTMT("B")
- +6 IF $DATA(DTIME)[0
- SET DIR("T")=60
- +7 QUIT
- +8 ;
- XFORM ; XFORM--Does task have an intact ^%ZTSK(#,0)
- +1 ;Use index to get task number.
- IF '$DATA(^%ZTSK(X))
- IF $DATA(^TMP($JOB,0,X))
- SET X=$GET(^TMP($JOB,0,X))
- +2 QUIT
- +3 ;
- HELP1 ;SELECT--Default Help For '?'
- +1 WRITE !?5,"Select an extract task by its Task # (an integer between 1 and 999999999)"
- +2 IF $DATA(^TMP($JOB,0))
- WRITE ",",!?5,"or by its index number from the list."
- +3 QUIT
- +4 ;
- HELP2 ;SELECT--Default Help For '??'
- +1 NEW DIR,DIRUT,X,Y
- DO START
- +2 QUIT
- +3 ;
- STOPTASK ;Lookup Task File Data And Set Stop Flag
- +1 NEW DA,RET
- +2 SET (DA,FOUND)=0
- +3 FOR
- SET DA=$ORDER(^TMP($JOB,DA))
- if FOUND!(DA="")
- QUIT
- Begin DoDot:1
- +4 IF $GET(^TMP($JOB,DA,XUTMT))
- SET FOUND=1
- End DoDot:1
- +5 IF 'FOUND
- WRITE !!,"Only tasks for DSS Extracts that are running or queued can be stopped."
- QUIT
- +6 SET RET=$$ASKSTOP^%ZTLOAD(XUTMT)
- +7 DO REPORT
- +8 QUIT
- REPORT ;Report Results Of Lookup And Stop
- +1 IF $ORDER(ZTSK(.3))]""
- WRITE !!?5,"Task unscheduled and stopped."
- KILL XUTMT
- QUIT
- +2 IF "1356ABCDEFGIL"[$PIECE(ZTSK(.1),U)
- WRITE !,"This task was already stopped."
- KILL XUTMT
- QUIT
- +3 WRITE !!?5,"Task stopped!"
- KILL XUTMT
- QUIT
- +4 ;