Ignore:
Timestamp:
Dec 8, 2010, 1:44:40 AM (13 years ago)
Author:
Sam Habiel
Message:

Refactoring and txn restart fix to routines 26,29,31

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Scheduling/trunk/m/BSDX29.m

    r968 r1036  
    1 BSDX29  ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 7/18/10 2:03pm
    2         ;;1.41;BSDX;;Sep 29, 2010
    3            ;
    4            ; Change Log:
    5            ; v1.3 by WV/SMH on 3100713
     1BSDX29  ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 12/6/10 6:05am
     2        ;;1.42;BSDX;;Sep 29, 2010
     3        ;
     4        ; Change Log:
     5        ; v1.3 by WV/SMH on 3100713
    66        ; - Beginning and Ending dates passed as FM Dates
     7    ; v1.42 by WV/SMH on 3101023
     8    ; - Transaction moved; now restartable too.
     9    ; --> Thanks to Zach Gonzalez and Rick Marshall.
     10    ; - Refactoring of major portions of routine
    711        ;
    812BSDXCPD(BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND)   ;EP
    913        ;Entry point for debugging
    1014        ;
    11         ;D DEBUG^%Serenji("BSDXCP^BSDX29(.BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND)")
     15        D DEBUG^%Serenji("BSDXCP^BSDX29(.BSDXY,BSDXRES,BSDX44,BSDXBEG,BSDXEND)")
    1216        Q
    1317        ;
     
    1519        ;Copy appointments from HOSPITAL LOCATION entry BSDX44 to BSDX RESOURCE entry BSDXRES
    1620        ;Beginning with appointments on day BSDXBEG and ending on BSDXEND, inclusive
    17         ;
    18         ;Returns ADO Recordset formatted fields containing count of records copied and error message:
    19            ;
    20            ; July 13 2010: D dates (BEG and END) from US format to FM Dates for i18n
    21         ;
    22         ;
    23         S BSDXY="^BSDXTMP("_$J_")"
    24         N BSDXI,BSDXST,ZTSK
    25         S BSDXI=0
    26         S X="ETRAP^BSDX29",@^%ZOSF("TRAP")
     21    ;Called by RPC: BSDX COPY APPOINTMENTS
     22        ;
     23    ; Parameters:
     24    ; - BSDXY: Global Return
     25    ; - BSDXRES: BSDX RESOURCE to copy appointments to
     26    ; - BSDX44: Hospital Location IEN to copy appointments from
     27    ; - BSDXBEG: Beginning Date in FM Format
     28    ; - BSDXEND: End Date in FM Format
     29    ;
     30        ;Returns ADO Recordset containing TASK_NUMBER and ERRORID
     31        ;
     32    ; Return Array
     33        S BSDXY=$NA(^BSDXTMP($J))
     34    K ^BSDXTMP($J)
     35    ; $ET
     36    N $ET S $ET="G ETRAP^BSDX29"
     37        ; Counter
     38    N BSDXI S BSDXI=0
     39    ; Header Node
    2740        S ^BSDXTMP($J,0)="T00010TASK_NUMBER^T00020ERRORID"_$C(30)
    2841        ;
    29         ;Convert beginning and ending dates
    30            ;
    31            ;TODO:Validate FM Dates coming through
    32         ;
    33         S BSDXBEG=BSDXBEG-1
     42    ; Make dates inclusive; add 1 to FM dates
     43    S BSDXBEG=BSDXBEG-1
    3444        S BSDXEND=BSDXEND+1
    3545        ;
     46    ; Taskman variables
     47    N ZTSK,ZTRTN,ZTDTH,ZTDESC,ZTSAVE
     48        ; Task Load
    3649        S ZTRTN="ZTM^BSDX29",ZTDTH=$H,ZTDESC="COPY PATIENT APPTS"
    3750        S ZTSAVE("BSDXBEG")="",ZTSAVE("BSDXEND")="",ZTSAVE("BSDX44")="",ZTSAVE("BSDXRES")=""
    3851        D ^%ZTLOAD
    39         ;
    40         S BSDXI=BSDXI+1
    41         S BSDXST=$S($G(ZTSK)>0:"OK",1:"Unable to create task.")
     52        ; Set up return ADO.net dataset
     53        N BSDXST S BSDXST=$S($G(ZTSK)>0:"OK",1:"Unable to create task.")
     54        S BSDXI=BSDXI+1
    4255        S ^BSDXTMP($J,BSDXI)=$G(ZTSK)_"^"_BSDXST_$C(30)_$C(31)
    43         Q
    44         ;
    45 ZTMTST  ;
    46         ;
    47         S %DT="AE" D ^%DT S BSDXBEG=Y
    48         S %DT="AE" D ^%DT S BSDXEND=Y
    49         S BSDX44=3,BSDXSRES=1,ZTSK=3380
    50         D ZTM
    51         Q
     56        QUIT
    5257        ;
    5358ZTMD    ;EP - Debug entry point
     
    5560        Q
    5661        ;
    57 ZTM     ;EP
    58         ;Taskman entry point
    59         S X="ZTMERR^BSDX29",@^%ZOSF("TRAP")
     62ZTM     ;EP - Taskman entry point
     63    ; Variables set up in ZTSAVE above
     64    ;
     65        Q:'$D(ZTSK)
     66    ; $ET
     67    N $ET S $ET="G ZTMERR^BSDX29"
     68        ; Txn
     69    TSTART (BSDXBEG,BSDXEND,BSDX44,BSDXRES):T="BSDX COPY APPOINTMENT^BSDX29"
    6070        ;$O through ^SC(BSDX44,"S",
    61         Q:'$D(ZTSK)
    62         N BSDXCNT,BSDXIEN,BSDXNOD,BSDXNOTE,BSDXCAN,BSDXPAT,BSDXLEN,BSDXMADE,BSDXCLRK,BSDXPAT,BSDXQUIT
    63         S BSDXCNT=0,BSDXQUIT=0
    64         S ^BSDXTMP("BSDXCOPY",ZTSK)=BSDXCNT
    65         TSTART
    66         F  S BSDXBEG=$O(^SC(BSDX44,"S",BSDXBEG)) Q:'+BSDXBEG  Q:BSDXBEG>BSDXEND  Q:BSDXQUIT  D
    67         . S BSDXIEN=0 F  S BSDXIEN=$O(^SC(BSDX44,"S",BSDXBEG,1,BSDXIEN)) Q:'+BSDXIEN  Q:BSDXQUIT  D
    68         . . S BSDXNOD=$G(^SC(BSDX44,"S",BSDXBEG,1,BSDXIEN,0))
    69         . . Q:'+BSDXNOD
    70         . . S BSDXCAN=$P(BSDXNOD,U,9)
    71         . . Q:BSDXCAN="C"
    72         . . S BSDXPAT=$P(BSDXNOD,U)
    73         . . S BSDXLEN=$P(BSDXNOD,U,2) ;duration in minutes
    74         . . S BSDXCLRK=$P(BSDXNOD,U,6) ;appt made by (clerk)
    75         . . S BSDXMADE=$P(BSDXNOD,U,7) ;date appt made
    76         . . S BSDXNOTE=$P(BSDXNOD,U,4) ;'OTHER' field contains note
     71        N BSDXCNT S BSDXCNT=0  ; Count of Copied Appointments
     72    N BSDXQUIT S BSDXQUIT=0  ; Quit Flag to be retrieved from an external proc
     73        ; Set Count
     74    S ^BSDXTMP("BSDXCOPY",ZTSK)=BSDXCNT
     75        ; Loop through dates here.
     76    F  S BSDXBEG=$O(^SC(BSDX44,"S",BSDXBEG)) Q:'+BSDXBEG  Q:BSDXBEG>BSDXEND  Q:BSDXQUIT  D
     77    . ; Loop through Entries in each date in the subsubfile.
     78    . ; Quit if we are at the end or if a remote process requests a quit.
     79    . N BSDXIEN S BSDXIEN=0
     80        . F  S BSDXIEN=$O(^SC(BSDX44,"S",BSDXBEG,1,BSDXIEN)) Q:'+BSDXIEN  Q:BSDXQUIT  D
     81        . . N BSDXNOD S BSDXNOD=$G(^SC(BSDX44,"S",BSDXBEG,1,BSDXIEN,0)) ; Node
     82        . . Q:'+BSDXNOD  ; Quit if no node
     83        . . N BSDXCAN S BSDXCAN=$P(BSDXNOD,U,9) ; Cancel flag
     84        . . Q:BSDXCAN="C"  ; Quit if appt cancelled
     85    . . N BSDXPAT S BSDXPAT=$P(BSDXNOD,U) ; Patient
     86    . . N BSDXLEN S BSDXLEN=$P(BSDXNOD,U,2) ;duration in minutes
     87        . . N BSDXCLRK S BSDXCLRK=$P(BSDXNOD,U,6) ;appt made by (clerk)
     88        . . N BSDXMADE S BSDXMADE=$P(BSDXNOD,U,7) ;date appt made
     89        . . N BSDXNOTE S BSDXNOTE=$P(BSDXNOD,U,4) ;'OTHER' field contains note
    7790        . . S BSDXCNT=BSDXCNT+$$XFER(BSDXRES,BSDXBEG,BSDXPAT,BSDXLEN,BSDXCLRK,BSDXMADE,BSDXNOTE)
    7891        . . I +BSDXCNT,BSDXCNT#10=0 S ^BSDXTMP("BSDXCOPY",ZTSK)=BSDXCNT_" records copied." ;every 10th record
     
    8598        Q
    8699        ;
    87 ZTMERR  ;
    88         TROLLBACK
     100ZTMERR  ; For now, error from TM is only in trap; not returned to client.
     101        N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap
     102    ; Rollback before logging the error
     103    I $TL>0 TROLLBACK
    89104        D ^%ZTER
    90         Q
     105    S $EC="" ; Clear Error
     106        QUIT
    91107        ;
    92108XFER(BSDXRES,BSDXBEG,BSDXPAT,BSDXLEN,BSDXCLRK,BSDXMADE,BSDXNOTE)        ;EP
     
    132148ERR(BSDXI,BSDXCNT,BSDXERR)      ;Error processing
    133149        S BSDXI=BSDXI+1
     150    S BSDXERR=$TR(BSDXERR,"^","~")
    134151        S ^BSDXTMP($J,BSDXI)=BSDXCNT_"^"_BSDXERR_$C(30)
    135152        S BSDXI=BSDXI+1
     
    138155        ;
    139156ETRAP   ;EP Error trap entry
    140         D ^%ZTER
    141         I '$D(BSDXI) N BSDXI S BSDXI=999
    142         S BSDXI=BSDXI+1
    143         D ERR(BSDXI,$G(BSDXCNT),"Routine: BSDX29, Error: "_$G(%ZTERROR))
    144         Q
    145         ;
    146 CPSTAT(BSDXY,BSDXTSK)   ;EP
     157        ; No Txn here. So don't rollback anything
     158    N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap
     159    D ^%ZTER
     160    S $EC="" ; Clear error
     161        I '$D(BSDXI) N BSDXI S BSDXI=0
     162        D ERR(BSDXI,$G(BSDXCNT),"~100~BSDX29, Error: "_$G(%ZTERZE))
     163        Q
     164        ;
     165CPSTAT(BSDXY,BSDXTSK)   ;EP - Note: As of Dec 6 2010: Inactive Code
    147166        ;Return status (copied record count) of tasked job having ZTSK=BSDXTSK
    148167        ;
     
    160179        Q
    161180        ;
    162 CPCANC(BSDXY,BSDXTSK)   ;EP
     181CPCANC(BSDXY,BSDXTSK)   ;EP Note: As of Dec 6 2010: Inactive code.
    163182        ;Signal tasked job having ZTSK=BSDXTSK to cancel
    164183        ;Returns current record count of copy process
Note: See TracChangeset for help on using the changeset viewer.