| 1 | OCXCACHE ;SLC/RJS,CLA - ORDER CHECK CACHE CONTROLLER ;4/16/02  16:28
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**143**;Dec 17,1997
 | 
|---|
| 3 |  ;;  ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | GETDATA(OCXRES,OCXCALL,OCXDFN,OCXTIME) ;
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  N OCXDATA K OCXRES S OCXRES=""
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  Q:'$L($G(OCXCALL)) 1
 | 
|---|
| 11 |  Q:'$L($G(OCXDFN)) 2
 | 
|---|
| 12 |  S ^XTMP("OCXCACHE",0)=$$FMADD^XLFDT($$NOW^XLFDT,1,"","","")_"^"_$$NOW^XLFDT
 | 
|---|
| 13 |  S:'$G(OCXTIME) OCXTIME=300
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  K:($G(^XTMP("OCXCACHE",OCXDFN,OCXCALL,"TIME"))<$$NOW) ^XTMP("OCXCACHE",OCXDFN,OCXCALL)
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  I '$D(^XTMP("OCXCACHE",OCXDFN,OCXCALL)) D
 | 
|---|
| 18 |  .I OCXCALL["$$" X "S OCXDATA="_OCXCALL
 | 
|---|
| 19 |  .E  S OCXDATA="" D @OCXCALL
 | 
|---|
| 20 |  .M ^XTMP("OCXCACHE",OCXDFN,OCXCALL,"DATA")=OCXDATA
 | 
|---|
| 21 |  .S ^XTMP("OCXCACHE",OCXDFN,OCXCALL,"TIME")=$$NOW+OCXTIME
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  M:$D(^XTMP("OCXCACHE",OCXDFN,OCXCALL,"DATA")) OCXRES=^XTMP("OCXCACHE",OCXDFN,OCXCALL,"DATA")
 | 
|---|
| 24 |  Q:'$D(^XTMP("OCXCACHE",OCXDFN,OCXCALL,"DATA")) 3
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  Q 0
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 | NOW() Q $P($H,",",2)+($H*86400)
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 | PURGE ;   Purge OCX namespaced entries in ^XTMP (Cache) that have expired.
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  N OCXE0,OCXE1,OCXS
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 |  ;S OCXS="OCX" F  S OCXS=$O(^XTMP(OCXS)) Q:'$L(OCXS)  Q:'($E(OCXS,1,3)="OCX")  D
 | 
|---|
| 35 |  S OCXS="OCXCACHE" D
 | 
|---|
| 36 |  .S OCXE0=0 F  S OCXE0=$O(^XTMP(OCXS,OCXE0)) Q:'$L(OCXE0)  D
 | 
|---|
| 37 |  ..S OCXE1="" F  S OCXE1=$O(^XTMP(OCXS,OCXE0,OCXE1)) Q:'$L(OCXE1)  D
 | 
|---|
| 38 |  ...K:($G(^XTMP(OCXS,OCXE0,OCXE1,"TIME"))<$$NOW) ^XTMP(OCXS,OCXE0,OCXE1)
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  Q
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  ;Sample External Call
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  ;       S ORZ=$$LOCL^ORQQLR1(ORDFN,TEST,SPECIMEN)
 | 
|---|
| 45 |  ;
 | 
|---|
| 46 |  ;               Changes to:
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  ;S TEMP=$$GETDATA^OCXCACHE(.ORZ,"$$LOCL^ORQQLR1("_ORDFN_","_TEST_","_SPECIMEN_")",ORDFN,300)
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  ;$$GETDATA^OCXCACHE(RESULTS,EXTERNAL CALL,PATIENT ID,TIMEOUT) ----> returns either a 1, 2, 3, or 0
 | 
|---|
| 51 |  ;                                                                     0 -> No Errors
 | 
|---|
| 52 |  ;                                                                     1 -> Missing External Call.
 | 
|---|
| 53 |  ;                                                                     2 -> Missing Patient ID.
 | 
|---|
| 54 |  ;                                                                     3 -> Cache Data Missing.
 | 
|---|
| 55 |  ;***Results = Data Value Returned,
 | 
|---|
| 56 |  ;            Either Scalar or Array.
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  ;***External Call = Routine call in a 'resolved parameter' format to
 | 
|---|
| 59 |  ;                  reduce the chances of cache returning the wrong values.
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  ;        If ORDFN=1234 and TEST=110 and SPECIMEN=119
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  ;            Then        If this parameter is: "$$LOCL^ORQQLR1("_ORDFN_","_TEST_","_SPECIMEN_")"
 | 
|---|
| 64 |  ;  then the value will be stored in subscript: "$$LOCL^ORQQLR1(1234,110,119)"
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  ;                        If this parameter is: "$$LOCL^ORQQLR1(ORDFN,TEST,SPECIMEN)"
 | 
|---|
| 67 |  ;  then the value will be stored in subscript: "$$LOCL^ORQQLR1(ORDFN,TEST,SPECIMEN)"
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  ;***Object ID = If this is patient data then this will be the patient's DFN.
 | 
|---|
| 70 |  ;               If this is user data then this will be the user's DUZ.
 | 
|---|
| 71 |  ;               etc...
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  ;***Timeout = (Optional  Default = 300 (5 Minutes)) How long, in seconds, the data has to live in the cache.
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  ;^XTMP("OCXCACHE",DFN,"$$LOCL^ORQQLR1(1234,110,119)","DATA")= Data
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 |  ;^XTMP("OCXCACHE",DFN,"$$LOCL^ORQQLR1(1234,110,119)","TIME")= When the data will be deleted from the cache.
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  ; $$NOW^OCXCACHE  =  The number of seconds since the "beginning of time". Used to determine if the data
 | 
|---|
| 80 |  ;                    node in the cache is past its expiration date or not.
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  ;                     It is very important that ORMTIME is running if this routine is being used.
 | 
|---|
| 83 |  ;                    ORMTIME calls OCXOPURG which calls PURGE^OCXCACHE that cleans out expired data
 | 
|---|
| 84 |  ;                    in the cache. This will keep the cache from using up all the available diskspace
 | 
|---|
| 85 |  ;                    in the Volume Set or directory that ^XTMP resides in. PURGE^OCXCACHE can be run
 | 
|---|
| 86 |  ;                    manually from a programmer's prompt if needed.
 | 
|---|
| 87 |  ;
 | 
|---|