| 1 | MDRPCOG ; HOIFO/DP - CP Gateway ; [01-09-2003 15:20]
 | 
|---|
| 2 |  ;;1.0;CLINICAL PROCEDURES;**6**;Apr 01, 2004;Build 102
 | 
|---|
| 3 |  ; Description:
 | 
|---|
| 4 |  ; This is the main routine that manages the CLINICAL PROCEDURES Gateway functions.  
 | 
|---|
| 5 |  ; Access to these functions is controlled via the MD GATEWAY RPC.
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  ; Integration Agreements:
 | 
|---|
| 8 |  ; IA# 10097 [Supported] %ZOSV calls
 | 
|---|
| 9 |  ; IA# 10103 [Supported] Calls to XLFDT
 | 
|---|
| 10 |  ; IA# 2263 [Supported] Calls to XPAR
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 | CLEANUP ; [Procedure] Cleanup a past results report
 | 
|---|
| 13 |  F X=0:0 S X=$O(^MDD(703.1,DATA,.1,X)) Q:'X  D
 | 
|---|
| 14 |  .S:$G(^MDD(703.1,DATA,.1,X,.1))]"" MDFDA(703.11,X_","_DATA_",",.1)="@"
 | 
|---|
| 15 |  .S:$O(^MDD(703.1,DATA,.1,X,.2,0)) MDFDA(703.11,X_","_DATA_",",.2)="@"
 | 
|---|
| 16 |  D:$D(MDFDA) FILE^DIE("K","MDFDA","MDERR")
 | 
|---|
| 17 |  I $D(MDERR) D ERROR^MDRPCU(RESULTS,.MDERR) Q
 | 
|---|
| 18 |  ; Manual cleanup of the empty UNC nodes and WP root
 | 
|---|
| 19 |  F X=0:0 S X=$O(^MDD(703.1,DATA,.1,X)) Q:'X  D
 | 
|---|
| 20 |  .K ^MDD(703.1,DATA,.1,X,.1)
 | 
|---|
| 21 |  .K ^MDD(703.1,DATA,.1,X,.2)
 | 
|---|
| 22 |  S @RESULTS@(0)="1^Item purged"
 | 
|---|
| 23 |  Q
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 | DONE ; [Procedure] Done processing, Mark study status
 | 
|---|
| 26 |  S MDFDA(703.1,+DATA_",",.09)=$G(P1,"U")
 | 
|---|
| 27 |  D FILE^DIE("","MDFDA")
 | 
|---|
| 28 |  Q
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 | GETATT ; [Procedure] Get attachments for study
 | 
|---|
| 31 |  F X=0:0 S X=$O(^MDD(703.1,+DATA,.1,X)) Q:'X  D
 | 
|---|
| 32 |  .S Y=+$O(@RESULTS@(""),-1)+1
 | 
|---|
| 33 |  .S @RESULTS@(Y)="703.11;"_X_U_^MDD(703.1,+DATA,.1,X,0)
 | 
|---|
| 34 |  S @RESULTS@(0)=+$O(@RESULTS@(""),-1)
 | 
|---|
| 35 |  Q
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 | GETOLD ; [Procedure] Returns old results by date
 | 
|---|
| 38 |  ; Variables:
 | 
|---|
| 39 |  ;  LOGDATE: [Private] Loop variable
 | 
|---|
| 40 |  ;  STOPDATE: [Private] Date to stop retrieving entries
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  ; New private variables
 | 
|---|
| 43 |  NEW LOGDATE,STOPDATE,MDX
 | 
|---|
| 44 |  S LOGDATE=+DATA,STOPDATE=+$P(DATA,U,2)+.2359
 | 
|---|
| 45 |  F  S LOGDATE=$O(^MDD(703.1,"ADTP",LOGDATE)) W !,"-->",LOGDATE Q:'LOGDATE!(LOGDATE>STOPDATE)  D  Q:Y>50
 | 
|---|
| 46 |  .F MDX=0:0 S MDX=$O(^MDD(703.1,"ADTP",LOGDATE,MDX)) Q:'MDX  D
 | 
|---|
| 47 |  ..I '$$CHECK(MDX) Q
 | 
|---|
| 48 |  ..S Y=$O(@RESULTS@(""),-1)+1
 | 
|---|
| 49 |  ..S @RESULTS@(Y)="703.1;"_MDX_U_$G(^MDD(703.1,MDX,0))
 | 
|---|
| 50 |  S:'LOGDATE!(LOGDATE>STOPDATE) LOGDATE=STOPDATE
 | 
|---|
| 51 |  S @RESULTS@(0)=+$O(@RESULTS@(""),-1)_U_LOGDATE_U_$$FMTE^XLFDT(LOGDATE)
 | 
|---|
| 52 |  Q
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 | GETPAR ; [Procedure] Get a parameter value for an RPC Call
 | 
|---|
| 55 |  S @RESULTS@(0)=$$PARVAL(DATA)
 | 
|---|
| 56 |  Q
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 | GETTXT ; [Procedure] Get attachment text for processing
 | 
|---|
| 59 |  N X,STUDY,ATT
 | 
|---|
| 60 |  S X=0,STUDY=$P(DATA,",",2),ATT=+DATA
 | 
|---|
| 61 |  I '$O(^MDD(703.1,STUDY,.1,ATT,.2,0)) S @RESULTS@(0)="-1^No Data" Q
 | 
|---|
| 62 |  F  S X=$O(^MDD(703.1,STUDY,.1,ATT,.2,X)) Q:'X  S @RESULTS@(X)=^(X,0)
 | 
|---|
| 63 |  S @RESULTS@(0)=+$O(@RESULTS@(""),-1)
 | 
|---|
| 64 |  Q
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 | NEXT ; [Procedure] Get the next study to process
 | 
|---|
| 67 |  S Y=+$O(^MDD(703.1,"ASTATUS","P",$G(DATA)))
 | 
|---|
| 68 |  S @RESULTS@(0)=$S($D(^MDD(703.1,Y,0)):"703.1;"_Y_U_^MDD(703.1,Y,0),1:0)
 | 
|---|
| 69 |  Q
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 | PARVAL(INSTANCE) ; [Procedure] Extrinsic get of parameter values
 | 
|---|
| 72 |  ; Input parameters
 | 
|---|
| 73 |  ;  1. INSTANCE [Literal/Required] XPAR instance
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  Q $$GET^XPAR("SYS","MD GATEWAY",INSTANCE)
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 | POLL ; [Procedure] Returns server time and flag for studies to process
 | 
|---|
| 78 |  I $$PARVAL("Shutdown Flag")]"" D  Q
 | 
|---|
| 79 |  .S @RESULTS@(0)="-1^SHUTDOWN"
 | 
|---|
| 80 |  .D SETPAR("Shutdown Flag","")
 | 
|---|
| 81 |  S @RESULTS@(0)=$$FMTE^XLFDT($$NOW^XLFDT)
 | 
|---|
| 82 |  S @RESULTS@(1)=$D(^MDD(703.1,"ASTATUS","P"))
 | 
|---|
| 83 |  Q
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 | POLLER(RESULTS) ; [Procedure] Non-Disk activity poller
 | 
|---|
| 86 |  ; With the exception of a shutdown request pending, this stand alone RPC will operate 
 | 
|---|
| 87 |  ; without creating any disk activity and not crash during backup operations on the main 
 | 
|---|
| 88 |  ; VistA server.
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  ; Input parameters
 | 
|---|
| 91 |  ;  1. RESULTS [Reference/Required] 
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  I $$PARVAL("Shutdown Flag")]"" D  Q
 | 
|---|
| 94 |  .S RESULTS(0)="-1^SHUTDOWN"
 | 
|---|
| 95 |  .D SETPAR("Shutdown Flag","")
 | 
|---|
| 96 |  S RESULTS(0)=$$FMTE^XLFDT($$NOW^XLFDT)
 | 
|---|
| 97 |  S RESULTS(1)=$D(^MDD(703.1,"ASTATUS","P"))
 | 
|---|
| 98 |  Q
 | 
|---|
| 99 |  ;
 | 
|---|
| 100 | RPC(RESULTS,OPTION,DATA,P1) ; [Procedure] 
 | 
|---|
| 101 |  ; Input parameters
 | 
|---|
| 102 |  ;  1. RESULTS [Literal/Required] RPC Return Array
 | 
|---|
| 103 |  ;  2. OPTION [Literal/Required] Gateway Option to execute
 | 
|---|
| 104 |  ;  3. DATA [Literal/Required] Other information
 | 
|---|
| 105 |  ;  4. P1 [Literal/Required] Overflow variable
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ; Variables:
 | 
|---|
| 108 |  ;  MDENV: [Private] Server environment variable
 | 
|---|
| 109 |  ;  MDERR: [Private] Fileman return array
 | 
|---|
| 110 |  ;  MDFDA: [Private] Fileman FDA
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  ; New private variables
 | 
|---|
| 113 |  NEW MDENV,MDERR,MDFDA
 | 
|---|
| 114 |  S RESULTS=$NA(^TMP("MDRPCOB",$J)) K @RESULTS
 | 
|---|
| 115 |  D @OPTION
 | 
|---|
| 116 |  Q
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 | RUNNING ; [Procedure] Returns 0/1 and message on running status
 | 
|---|
| 119 |  ; Note: If lock CAN be obtained, then gateway is NOT running
 | 
|---|
| 120 |  L +^MDD("CPGATEWAY"):1 E  S @RESULTS@(0)="1^RUNNING" Q
 | 
|---|
| 121 |  L -(^MDD("CPGATEWAY")) S @RESULTS@(0)="0^NOT RUNNING"
 | 
|---|
| 122 |  Q
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 | SETFILE ; [Procedure] Set filename of new attachment
 | 
|---|
| 125 |  S MDFDA(703.11,$P(DATA,U,1),.02)=$P(DATA,U,2)
 | 
|---|
| 126 |  D FILE^DIE("","MDFDA")
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | SETPAR(INSTANCE,VALUE) ; [Procedure] Set value into XPAR parameter
 | 
|---|
| 130 |  ; Input parameters
 | 
|---|
| 131 |  ;  1. INSTANCE [Literal/Required] Parameter Instance
 | 
|---|
| 132 |  ;  2. VALUE [Literal/Required] Parameter Value
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  D EN^XPAR("SYS","MD GATEWAY",INSTANCE,VALUE)
 | 
|---|
| 135 |  Q
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 | START ; [Procedure] Can we begin?
 | 
|---|
| 138 |  ; Ensure only one Gateway per system by locking the phantom global node
 | 
|---|
| 139 |  L +^MDD("CPGATEWAY"):1
 | 
|---|
| 140 |  I '$T D STATUS S @RESULTS@(0)="-1^FAIL" Q
 | 
|---|
| 141 |  ; Clear all process settings
 | 
|---|
| 142 |  D NDEL^XPAR("SYS","MD GATEWAY")
 | 
|---|
| 143 |  S DATA=$G(DATA,"30^1000") ; Default poll interval and log entries
 | 
|---|
| 144 |  D SETPAR("Polling Interval",+$P(DATA,U,1))
 | 
|---|
| 145 |  D SETPAR("Maximum Log Entries",+$P(DATA,U,2))
 | 
|---|
| 146 |  D SETPAR("Job ID",$J)
 | 
|---|
| 147 |  D SETPAR("Started At",$$FMTE^XLFDT($$NOW^XLFDT))
 | 
|---|
| 148 |  D SETPAR("Started By",$$GET1^DIQ(200,DUZ_",",.01))
 | 
|---|
| 149 |  D GETENV^%ZOSV S MDENV=Y
 | 
|---|
| 150 |  D SETPAR("UCI",$P(MDENV,U,1))
 | 
|---|
| 151 |  D SETPAR("Volume",$P(MDENV,U,2))
 | 
|---|
| 152 |  D SETPAR("Node",$P(MDENV,U,3))
 | 
|---|
| 153 |  D SETNM^%ZOSV("CP Gateway")
 | 
|---|
| 154 |  S @RESULTS@(0)="1^OK"
 | 
|---|
| 155 |  Q
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 | STATUS ; [Procedure] Return status of BP
 | 
|---|
| 158 |  D GETLST^XPAR(.MDRET,"SYS","MD GATEWAY","Q")
 | 
|---|
| 159 |  F X=0:0 S X=$O(MDRET(X)) Q:'X  S @RESULTS@(X)=MDRET(X)
 | 
|---|
| 160 |  Q
 | 
|---|
| 161 |  ;
 | 
|---|
| 162 | STOP ; [Procedure] Flag client to stop via cal to POLL
 | 
|---|
| 163 |  D SETPAR("Shutdown Flag","Yes")
 | 
|---|
| 164 |  Q
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 | XFERDIR ; [Procedure] Return Imaging xfer directory
 | 
|---|
| 167 |  S @RESULTS@(0)=$$GET^XPAR("SYS","MD IMAGING XFER")
 | 
|---|
| 168 |  Q
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 | CHECK(MDRI) ; Check if Upload Value and Upload Text has already been purged.
 | 
|---|
| 171 |  N MDFLG S MDFLG=0
 | 
|---|
| 172 |  F X=0:0 S X=$O(^MDD(703.1,MDRI,.1,X)) Q:'X  D  Q:MDFLG
 | 
|---|
| 173 |  .S:$G(^MDD(703.1,MDRI,.1,X,.1))]"" MDFLG=1
 | 
|---|
| 174 |  .S:$O(^MDD(703.1,MDRI,.1,X,.2,0)) MDFLG=1
 | 
|---|
| 175 |  Q MDFLG
 | 
|---|