Ignore:
Timestamp:
Jun 1, 2013, 10:54:38 AM (11 years ago)
Author:
Tariq Hamkari
Message:

Ayman Ghaith : adding the correct routines which not has the transactions.

File:
1 edited

Legend:

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

    r1563 r1625  
    1 BSDX26   ; 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            ;
     1BSDX26   ; IHS/OIT/HMW - WINDOWS SCHEDULING RPCS ; 7/10/12 10:27am
     2        ;;1.7;BSDX;;Jun 01, 2013;Build 24
     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        ;
    1420EDITAPTD(BSDXY,BSDXAPTID,BSDXNOTE)       ;EP
    15            ;Entry point for debugging
    16            ;
    17            D DEBUG^%Serenji("EDITAPT^BSDX26(.BSDXY,BSDXAPTID,BSDXNOTE)")
    18            Q
    19 UT      ; 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            ;
     21        ;Entry point for debugging
     22        ;
     23        ;D DEBUG^%Serenji("EDITAPT^BSDX26(.BSDXY,BSDXAPTID,BSDXNOTE)")
     24        Q
    5425EDITAPT(BSDXY,BSDXAPTID,BSDXNOTE)         ;EP Edit appointment (only note text can be edited)
    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            ;
     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        ;
     101ROLLBACK(BSDXAPTID)     ; Rollback note to original in ^BSDXAPPT
     102        M ^BSDXAPPT(BSDXAPTID)=^TMP($J,"BEFORE","BSDXAPPT")
     103        K ^TMP($J)
     104        QUIT
     105        ;
    117106ERR(BSDXI,BSDXERR)       ;Error processing
    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            ;
     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        ;
    126118ETRAP     ;EP Error trap entry
    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
     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
Note: See TracChangeset for help on using the changeset viewer.