Ignore:
Timestamp:
Oct 8, 2012, 6:59:10 AM (12 years ago)
Author:
Tariq Hamkari
Message:

updated the BSDX version to 1.7

  • fix "BSDX01.m" routine , it was take too long time to retrieve patient radiology exams.
File:
1 edited

Legend:

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

    r1481 r1563  
    1 BSDX26   ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 7/10/12 10:27am
    2         ;;1.7T2;BSDX;;Jul 11, 2012;Build 18
    3         ; Licensed under LGPL
    4         ; Change History:
    5         ; 3101023 - UJO/SMH - Addition of restartable transaction; relocation of tx.
    6         ; 3101205 - UJO/SMH - Extensive refactoring.
    7         ; 3120625 - VEN/SMH - Removal of Transactions, reloation of UTs to BSDXUT1
    8         ;
    9         ; Error Reference:
    10         ; 1: Appt ID is not a number
    11         ; 2: Appt IEN is not in ^BSDXAPPT
    12         ; 3: FM Failure to file WP field in ^BSDXAPPT
    13         ; 4: BSDXAPI reports failure to change note field in ^SC
    14         ; 5: Failure to acquire lock on ^BSDXAPPT(APPTID)
    15         ; 100: Mumps Error
    16         ;
    17         ; NB: Normally I use negative numbers for errors; this routine returns
    18         ;     -1 as a successful result! So I needed to use +ve numbers.
    19         ;
     1BSDX26   ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 4/28/11 10:24am
     2           ;;1.6;BSDX;;Aug 31, 2011;Build 25
     3           ; Licensed under LGPL
     4           ; Change History:
     5           ; 3101023 - UJO/SMH - Addition of restartable transaction; relocation of tx.
     6           ; --> Thanks to Zach Gonzalez and Rick Marshall
     7           ; 3101205 - UJO/SMH - Extensive refactoring.
     8           ;
     9           ; Error Reference:
     10           ; -1: Appt ID is not a number
     11           ; -2: Appt IEN is not in ^BSDXAPPT
     12           ; -3: FM Failure to file WP field in ^BSDXAPPT
     13           ;
    2014EDITAPTD(BSDXY,BSDXAPTID,BSDXNOTE)       ;EP
    21         ;Entry point for debugging
    22         ;
    23         ;D DEBUG^%Serenji("EDITAPT^BSDX26(.BSDXY,BSDXAPTID,BSDXNOTE)")
    24         Q
     15           ;Entry point for debugging
     16           ;
     17           D DEBUG^%Serenji("EDITAPT^BSDX26(.BSDXY,BSDXAPTID,BSDXNOTE)")
     18           Q
     19UT      ; Unit Tests
     20           ; Test 1: Make sure this damn thing works
     21           N ZZZ
     22           N %H S %H=$H
     23           N NOTE S NOTE="New Note "_%H
     24           D EDITAPT(.ZZZ,188,NOTE)
     25           I ^BSDXAPPT(188,1,1,0)'=NOTE W "ERROR",! B
     26           ; Test 2: Test Errors -1 and -2
     27           N ZZZ
     28           N NOTE S NOTE="Nothing important"
     29           D EDITAPT(.ZZZ,"BLAHBLAH",NOTE)
     30           I +^BSDXTMP($J,1)'=-1 W "ERROR IN -1",! B
     31           D EDITAPT(.ZZZ,298734322,NOTE)
     32           I +^BSDXTMP($J,1)'=-2 W "ERROR IN -2",! B
     33           ; Test 4: M Error
     34           N bsdxdie S bsdxdie=1
     35           D EDITAPT(.ZZZ,188,NOTE)
     36           I +^BSDXTMP($J,1)'=-100 W "ERROR IN -100",! B
     37           k bsdxdie
     38           ; Test 5: Trestart
     39           N bsdxrestart S bsdxrestart=1
     40           N %H S %H=$H
     41           N NOTE S NOTE="New Note "_%H
     42           D EDITAPT(.ZZZ,188,NOTE)
     43           I ^BSDXAPPT(188,1,1,0)'=NOTE W "ERROR in TRESTART",! B
     44           ; Test 6: for Hosp Location Update
     45           N DATE S DATE=$$NOW^XLFDT()
     46           S DATE=$E(DATE,1,12) ; Just get minutes b/c of HL file input transform
     47           D APPADD^BSDX07(.ZZZ,DATE,DATE+.001,3,"Dr Office",30,"Old Note",1)
     48           N APPID S APPID=+$P(^BSDXTMP($J,1),U)
     49           D EDITAPT(.ZZZ,APPID,"New Note")
     50           I ^BSDXAPPT(APTID,1,1,0)'="New Note" W "Error in HL Section",! B
     51           I $P(^SC(2,"S",DATE,1,1,0),U,4)'="New Note" W "Error in HL Section",! B
     52           QUIT
     53           ;
    2554EDITAPT(BSDXY,BSDXAPTID,BSDXNOTE)         ;EP Edit appointment (only note text can be edited)
    26         ; Called by RPC: BSDX EDIT APPOINTMENT
    27         ;
    28         ; Edits Appointment Text in BSDX APPOINTMENT file & Hosp Location (44) file
    29         ;
    30         ; Parameters:
    31         ; - BSDXY: Global Return (RPC must be set to Global Array)
    32         ; - BSDXAPTID: Appointment IEN in BSDX APPOINTMENT
    33         ; - BSDXNOTE: New note
    34         ;
    35         ; Return:
    36         ; ADO.net Recordset having 1 field: ERRORID
    37         ; If Okay: -1; otherwise, positive integer with message
    38         ;
    39         ; Return Array; set Return and clear array
    40         S BSDXY=$NA(^BSDXTMP($J))
    41         K ^BSDXTMP($J)
    42         ; ET
    43         N $ET S $ET="G ETRAP^BSDX26"
    44         ; Set up basic DUZ variables
    45         D ^XBKVAR
    46         ; Counter
    47         N BSDXI S BSDXI=0
    48         ; Header Node
    49         S ^BSDXTMP($J,BSDXI)="T00100ERRORID"_$C(30)
    50         ;
    51         ;;;test for error. See if %ZTER works
    52         I $G(BSDXDIE) S X=1/0
    53         ;
    54         ; Validate Appointment ID
    55         I '+BSDXAPTID D ERR(BSDXI,"1~BSDX26: Invalid Appointment ID") QUIT
    56         I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR(BSDXI,"2~BSDX26: Invalid Appointment ID") QUIT
    57         ;
    58         ; Lock BSDX node, only to synchronize access to the globals.
    59         ; It's not expected that the error will ever happen as no filing
    60         ; is supposed to take 5 seconds.
    61         L +^BSDXAPPT(BSDXAPTID):5 E  D ERR(BSDXI,"5~BSDX08: Appt record is locked. Please contact technical support.") QUIT
    62         ;
    63         ; Put the WP in decendant fields from the root to file as a WP field
    64         S BSDXNOTE(.5)=BSDXNOTE,BSDXNOTE=""
    65         I $D(BSDXNOTE(0)) S BSDXNOTE(.5)=BSDXNOTE(0) K BSDXNOTE(0)
    66         ;
    67         N BSDXMSG ; Message in case of error in filing.
    68         ;
    69         ; Save Before State in case we need it for rollback
    70         K ^TMP($J)
    71         M ^TMP($J,"BEFORE","BSDXAPPT")=^BSDXAPPT(BSDXAPTID)
    72         ;
    73         ; Update note in BSDX APPOINTMENT
    74         I $D(BSDXNOTE(.5)) D
    75         . D WP^DIE(9002018.4,BSDXAPTID_",",1,"","BSDXNOTE","BSDXMSG")
    76         ;
    77         ; Error handling. No need for rollback since nothing else changed.
    78         I $D(BSDXMSG) D ERR(BSDXI,"3~BSDX26: Fileman failure to file data into 9002018.4") QUIT
    79         ;
    80         ; Now file in file 44:
    81         N PTIEN S PTIEN=$$GET1^DIQ(9002018.4,BSDXAPTID,".05","I") ; Patient IEN
    82         N HLIEN S HLIEN=$$GET1^DIQ(9002018.4,BSDXAPTID,".07:.04","I") ; HL Location IEN pointed to by Resource ID
    83         N DATE S DATE=+^BSDXAPPT(BSDXAPTID,0) ; Date of APPT
    84         N BSDXRES S BSDXRES=0 ; Result
    85         ; Update Note only if we have a linked hospital location.
    86         I HLIEN S BSDXRES=$$UPDATENT^BSDXAPI1(PTIEN,HLIEN,DATE,BSDXNOTE(.5))
    87         ; If we get an error (denoted by -1 in BSDXRES), return error to client
    88         ; AND restore the original note
    89         I BSDXRES D ERR(BSDXI,"4~BSDX26: BSDXAPI reports an error: "_BSDXRES),ROLLBACK(BSDXAPTID) QUIT
    90         ;
    91         ;Return Recordset indicating success
    92         L -^BSDXAPPT(BSDXAPTID)
    93         S BSDXI=BSDXI+1
    94         S ^BSDXTMP($J,BSDXI)="-1"_$C(30)
    95         S BSDXI=BSDXI+1
    96         S ^BSDXTMP($J,BSDXI)=$C(31)
    97         ;
    98         K ^TMP($J) ; Done; remove TMP data
    99         QUIT
    100         ;
    101 ROLLBACK(BSDXAPTID)     ; Rollback note to original in ^BSDXAPPT
    102         M ^BSDXAPPT(BSDXAPTID)=^TMP($J,"BEFORE","BSDXAPPT")
    103         K ^TMP($J)
    104         QUIT
    105         ;
     55           ; Called by RPC: BSDX EDIT APPOINTMENT
     56           ;
     57           ; Edits Appointment Text in BSDX APPOINTMENT file & Hosp Location (44) file
     58           ;
     59           ; Parameters:
     60           ; - BSDXY: Global Return (RPC must be set to Global Array)
     61           ; - BSDXAPTID: Appointment IEN in BSDX APPOINTMENT
     62           ; - BSDXNOTE: New note
     63           ;
     64           ; Return:
     65           ; ADO.net Recordset having 1 field: ERRORID
     66           ; If Okay: -1; otherwise, positive integer with message
     67           ;
     68           ; Return Array; set Return and clear array
     69           S BSDXY=$NA(^BSDXTMP($J))
     70           K ^BSDXTMP($J)
     71           ; ET
     72           N $ET S $ET="G ETRAP^BSDX26"
     73           ; Set up basic DUZ variables
     74           D ^XBKVAR
     75           ; Counter
     76           N BSDXI S BSDXI=0
     77           ; Header Node
     78           S ^BSDXTMP($J,BSDXI)="T00100ERRORID"_$C(30)
     79           ; Restartable txn for GT.M. Restored vars are Params + BSDXI.
     80           TSTART (BSDXY,BSDXAPTID,BSDXNOTE,BSDXI):T="BSDX EDIT APPOINTMENT^BSDX26"
     81           ;
     82           ;;;test for error inside transaction. See if %ZTER works
     83           I $G(bsdxdie) S X=1/0
     84           ;;;test
     85           ;;;test for TRESTART
     86           I $G(bsdxrestart) K bsdxrestart TRESTART
     87           ;;;test
     88           ;
     89           ; Validate Appointment ID
     90           I '+BSDXAPTID D ERR(BSDXI,"-1~BSDX26: Invalid Appointment ID") QUIT
     91           I '$D(^BSDXAPPT(BSDXAPTID,0)) D ERR(BSDXI,"-2~BSDX26: Invalid Appointment ID") QUIT
     92           ; Put the WP in decendant fields from the root to file as a WP field
     93           S BSDXNOTE(.5)=BSDXNOTE,BSDXNOTE=""
     94           I $D(BSDXNOTE(0)) S BSDXNOTE(.5)=BSDXNOTE(0) K BSDXNOTE(0)
     95           N BSDXMSG ; Message in case of error in filing.
     96           I $D(BSDXNOTE(.5)) D
     97           . D WP^DIE(9002018.4,BSDXAPTID_",",1,"","BSDXNOTE","BSDXMSG")
     98           I $D(BSDXMSG) D ERR(BSDXI,"-3~BSDX26: Fileman failure to file data into 9002018.4") QUIT
     99           ;
     100           ; Now file in file 44:
     101           N PTIEN S PTIEN=$$GET1^DIQ(9002018.4,BSDXAPTID,".05","I") ; Patient IEN
     102           N HLIEN S HLIEN=$$GET1^DIQ(9002018.4,BSDXAPTID,".07:.04","I") ; HL Location IEN pointed to by Resource ID
     103           N DATE S DATE=+^BSDXAPPT(BSDXAPTID,0) ; Date of APPT
     104           N BSDXRES S BSDXRES=0 ; Result
     105           ; Update Note only if we have a linked hospital location.
     106           I HLIEN S BSDXRES=$$UPDATENOTE^BSDXAPI(PTIEN,HLIEN,DATE,BSDXNOTE(.5))
     107           ; If we get an error (denoted by -1 in BSDXRES), return error to client
     108           I BSDXRES<0 D ERR(BSDXI,"-4~BSDX26: BSDXAPI reports an error: "_BSDXRES) QUIT
     109           ;Return Recordset
     110           TCOMMIT
     111           S BSDXI=BSDXI+1
     112           S ^BSDXTMP($J,BSDXI)="-1"_$C(30)
     113           S BSDXI=BSDXI+1
     114           S ^BSDXTMP($J,BSDXI)=$C(31)
     115           QUIT
     116           ;
    106117ERR(BSDXI,BSDXERR)       ;Error processing
    107         ; Unlock first
    108         L:$D(BSDXAPTID) -^BSDXAPPT(BSDXAPTID)
    109         ; If last line is $C(31), we are done. No more errors to send to client.
    110         I ^BSDXTMP($J,$O(^BSDXTMP($J," "),-1))=$C(31) QUIT
    111         S BSDXI=BSDXI+1
    112         S BSDXERR=$TR(BSDXERR,"^","~")
    113         S ^BSDXTMP($J,BSDXI)=BSDXERR_$C(30)
    114         S BSDXI=BSDXI+1
    115         S ^BSDXTMP($J,BSDXI)=$C(31)
    116         QUIT
    117         ;
     118           S BSDXI=BSDXI+1
     119           S BSDXERR=$TR(BSDXERR,"^","~")
     120           I $TL>0 TROLLBACK
     121           S ^BSDXTMP($J,BSDXI)=BSDXERR_$C(30)
     122           S BSDXI=BSDXI+1
     123           S ^BSDXTMP($J,BSDXI)=$C(31)
     124           QUIT
     125           ;
    118126ETRAP     ;EP Error trap entry
    119         N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap
    120         D ^%ZTER
    121         ;
    122         I '$D(BSDXI) N BSDXI S BSDXI=0
    123         D ERR(BSDXI,"100~BSDX26 Error: "_$G(%ZTERZE))
    124         QUIT
     127           N $ET S $ET="D ^%ZTER HALT" ; Emergency Error Trap
     128           I $TL>0 TROLLBACK
     129           D ^%ZTER
     130           S $EC=""
     131           I '$D(BSDXI) N BSDXI S BSDXI=0
     132           D ERR(BSDXI,"-100~BSDX26 Error: "_$G(%ZTERZE))
     133           Q
Note: See TracChangeset for help on using the changeset viewer.