Changeset 623 for WorldVistAEHR/trunk/r/HEALTH_LEVEL_SEVEN-HL/HLOAPI1.m
- Timestamp:
- Dec 4, 2009, 12:11:15 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
WorldVistAEHR/trunk/r/HEALTH_LEVEL_SEVEN-HL/HLOAPI1.m
r613 r623 1 HLOAPI1 ;ALB/CJM-HL7 - Developer API's for sending & receiving messages(continued) ;07/18/2007 2 ;;1.6;HEALTH LEVEL SEVEN;**126,132,134,137**;Oct 13, 1995;Build 21 3 ;Per VHA Directive 2004-038, this routine should not be modified. 4 ; 5 SENDONE(HLMSTATE,PARMS,WHOTO,ERROR) ; 6 ;Sends the message to a single receiving application. 7 ; 8 ;Input: 9 ;HLMSTATE() - (pass by reference, required) This array is used by the HL7 package to track the progress of the message. The application MUST NOT touch it 10 ;PARMS( *pass by reference* 11 ; "APP ACK RESPONSE")=<tag^routine> to call when the app ack is received (optional) 12 ; (NOTE: For batch messages, HLO best supports returning application 13 ; acknowledgments via a batch response. However, non-VistA systems 14 ; may return individual messages as application acknowledgments to 15 ; messages within the original batch message, so for applications 16 ; sending batch messages might best code the "APP ACK RESPONSE" 17 ; routine to first check whether the response message is a batch. 18 ; 19 ; "ACCEPT ACK RESPONSE")=<tag^routine> to call when the commit ack is received (optional) 20 ; "ACCEPT ACK TYPE") = <AL,NE> (optional, defaults to AL) 21 ; "APP ACK TYPE") = <AL,NE> (optional, defaults to NE) 22 ; "FAILURE RESPONSE" - <tag>^<routine> (optional) The sending application routine to execute when the transmission of the message fails, i.e., the message can not be sent or no commit ack is received. 23 ; "QUEUE" - (optional) An application can name its own private queue - just a string up to 20 characters, it should be namespaced. 24 ; "SECURITY")=security information to include in the header segment, SEQ 8 (optional) 25 ; "SENDING APPLICATION")=name of sending app (required, 60 maximum length) 26 ; 27 ; WHOTO (required,pass by reference) an array specifying a single recipient. These subscripts are allowed: 28 ; 29 ; "RECEIVING APPLICATION" - (string, 60 char max, required) 30 ; 31 ; EXACTLY ONE of these parameters must be provided to identify the Receiving Facility: 32 ; 33 ; "FACILITY LINK IEN" - ien of the logical link 34 ; "FACILITY LINK NAME" - name of the logical link 35 ; "INSTITUTION IEN" - ptr to the INSTITUTION file 36 ; "STATION NUMBER" - station # with suffix 37 ; 38 ; EXACTLY ONE of these MAY be provided - optionally - to identify the interface engine to route the message through: 39 ; 40 ; "IE LINK IEN" - ptr to a logical link for the interface engine 41 ; "IE LINK NAME" - name of the logical link for the interface engine 42 ; 43 ;Output: 44 ; Function returns the ien of the message in file 778 on success, 0 on failure 45 ; HLMSTATE() - (pass by reference, required) This array is used by the HL7 package to track the progress of the message. The application MUST NOT touch it! 46 ; ERROR (pass by reference, optional) - on failure, will contain an error message 47 ; PARMS - left undefined when the function returns 48 ; WHOTO - left undefined when the function returns 49 ; 50 ; 51 N SUCCESS,ERR1,ERR2 52 S SUCCESS=0 53 D 54 .I '$G(HLMSTATE("BODY")),'$G(HLMSTATE("UNSTORED LINES")) S ERROR="MESSAGE NOT YET CREATED" Q 55 .; 56 .I $$CHKPARMS^HLOAPI2(.HLMSTATE,.PARMS,.ERR1)&$$CHKWHO^HLOAPI2(.HLMSTATE,.WHOTO,.ERR2) D 57 ..I $$SEND(.HLMSTATE,.ERROR) S SUCCESS=1 58 .E D 59 ..S ERROR=$G(ERR1)_": "_$G(ERR2) 60 ..D DONTSEND(.HLMSTATE,ERROR) 61 K PARMS,WHOTO 62 Q $S(SUCCESS:HLMSTATE("IEN"),1:0) 63 ; 64 SENDMANY(HLMSTATE,PARMS,WHOTO) ; 65 ;Sends the message to a list of receiving applications 66 ; 67 ;Input: Same as for $$SENDONE, except WHOTO is a list. 68 ; WHOTO (pass by reference) 69 ; Specifies a list of recipients. Each recipient should be on the 70 ; list as WHOTO(i), where i=1,2,3,4, etc. for as many messages as to 71 ; send. At each subscript WHOTO(i), the same lower level subscripts 72 ; may be defined as in the $$SENDONE API. For example: 73 ; 74 ; WHOTO(1,"LINK NAME")="VAALB" 75 ; WHOTO(1,"RECEIVING APPLICATION")="MPI" 76 ; WHOTO(2,"STATION NUMBER")=500 77 ; WHOTO(2,"RECEIVING APPLICATION")="MPI" 78 ; 79 ; 80 ;Output: 81 ; Function returns 1 if a message is queued to be sent to each intended recipient, 0 otherwise 82 ; PARMS - left undefined when the function returns 83 ; WHOTO (pass by reference) returns the status of each message to be sent in the format: 84 ; (<i>,"QUEUED")= <1 if queued to be sent, 0 otherwise) 85 ; (<i>,"IEN")=<ien, file 778> 86 ; (<i>,"ERROR")= error message if an error was encountered (status=0), not defined otherwise 87 ; 88 ; 89 N ERROR,RETURN,WHO,STATE,I 90 S RETURN=1 91 I '$G(HLMSTATE("BODY")),'$G(HLMSTATE("UNSTORED LINES")) D K PARMS Q 0 92 .S ERROR="MESSAGE NOT YET CREATED" 93 .S I=0 F S I=$O(WHOTO(I)) Q:'I S WHOTO(I,"QUEUED")=0,WHOTO(I,"IEN")=0,WHOTO(I,"ERROR")=ERROR 94 ; 95 I '$$CHKPARMS^HLOAPI2(.HLMSTATE,.PARMS,.ERROR) D K PARMS Q 0 96 .S I=0 F S I=$O(WHOTO(I)) Q:'I D 97 ..K WHO M WHO=WHOTO(I) 98 ..K STATE M STATE=HLMSTATE S STATE("IEN")="" 99 ..S WHOTO(I,"QUEUED")=0 100 ..D DONTSEND(.STATE,$G(ERROR)) 101 ..S WHOTO(I,"IEN")=$G(STATE("IEN")) 102 ..S WHOTO(I,"ERROR")=ERROR 103 ; 104 S I=0 F S I=$O(WHOTO(I)) Q:'I D 105 .K WHO M WHO=WHOTO(I) 106 .K STATE M STATE=HLMSTATE S STATE("IEN")="" 107 .S ERROR="" 108 .I $$CHKWHO^HLOAPI2(.STATE,.WHO,.ERROR) D 109 ..I $$SEND(.STATE,.ERROR) D 110 ...S WHOTO(I,"QUEUED")=1 111 ...S WHOTO(I,"IEN")=STATE("IEN") 112 ...S WHOTO(I,"ERROR")="" 113 ..E D 114 ...S WHOTO(I,"QUEUED")=0 115 ...S WHOTO(I,"IEN")=$G(STATE("IEN")) 116 ...S WHOTO(I,"ERROR")=$G(ERROR) 117 ...S RETURN=0 118 .E D ;who not adequately determined 119 ..S WHOTO(I,"QUEUED")=0,RETURN=0 120 ..D DONTSEND(.STATE,$G(ERROR)) 121 ..S WHOTO(I,"IEN")=$G(STATE("IEN")),WHOTO(I,"ERROR")=$G(ERROR) 122 K PARMS 123 Q RETURN 124 ; 125 SENDSUB(HLMSTATE,PARMS,MESSAGES) ; 126 ;Sends the message to a list of receiving applications based on the HL7 Subscription Registry 127 ; 128 ;Input: 129 ; HLMSTATE (pass by reference, required) same as $$SENDMANY 130 ; PARMS (pass by reference, required) same as $$SENDMANY, with one additional subscript: 131 ; "SUBSCRIPTION IEN" - the ien of an entry in the HL7 Subscription Registry, defining the intended recipients of this message 132 ; 133 ;Output: 134 ; Function returns 1 if a message is queued to be sent to each intended recipient, 0 otherwise 135 ; PARMS - left undefined when the function returns 136 ; MESSAGES (pass by reference) returns the status of each message to be sent in this format, where subien is the ien of the recipient in the RECIPEINTS subfile of the HL7 Subscription Registry 137 ; (<subien>,"QUEUED")= <1 if queued to be sent, 0 otherwise) 138 ; (<subien>,"IEN")=<ien, file 778> 139 ; (<subien>,"ERROR")= error message if an error was encountered (status=0), not defined otherwise 140 ; 141 ; 142 K MESSAGES 143 N ERROR,RETURN,STATE,SUBIEN,WHO 144 ; 145 S RETURN=1 146 ; 147 ; 148 I '$G(HLMSTATE("BODY")),'$G(HLMSTATE("UNSTORED LINES")) S ERROR="MESSAGE NOT YET CREATED" K PARMS Q 0 149 I '$G(PARMS("SUBSCRIPTION IEN")) S ERROR="SUBSCRIPTION REGISTRY IEN NOT PROVIDED" K PARMS Q 0 150 ; 151 I '$$CHKPARMS^HLOAPI2(.HLMSTATE,.PARMS,.ERROR) D K PARMS Q 0 152 .S SUBIEN=0 F S SUBIEN=$$NEXT^HLOASUB(PARMS("SUBSCRIPTION IEN"),.WHO) Q:'SUBIEN D 153 ..N SARY,HARY 154 ..S HARY="STATE(""HDR"")" 155 ..S SARY="STATE(""STATUS"")" 156 ..K STATE M STATE=HLMSTATE S STATE("IEN")="" 157 ..;move parameters into HLMSTATE 158 ..S @SARY@("LINK IEN")=WHO("LINK IEN") 159 ..S @SARY@("LINK NAME")=WHO("LINK NAME") 160 ..S @HARY@("RECEIVING APPLICATION")=WHO("RECEIVING APPLICATION") 161 ..M @HARY@("RECEIVING FACILITY")=WHO("RECEIVING FACILITY") 162 ..D DONTSEND(.STATE,$G(ERROR)) 163 ..S MESSAGES(SUBIEN,"QUEUED")=0 164 ..S MESSAGES(SUBIEN,"IEN")=$G(STATE("IEN")) 165 ..S MESSAGES(SUBIEN,"ERROR")=$G(ERROR) 166 ; 167 F S SUBIEN=$$NEXT^HLOASUB(PARMS("SUBSCRIPTION IEN"),.WHO) Q:'SUBIEN D 168 .N SARY,HARY 169 .S HARY="STATE(""HDR"")" 170 .S SARY="STATE(""STATUS"")" 171 .K STATE M STATE=HLMSTATE S STATE("IEN")="" 172 .;move parameters into HLMSTATE 173 .S @SARY@("LINK IEN")=WHO("LINK IEN") 174 .S @SARY@("LINK NAME")=WHO("LINK NAME") 175 .S @HARY@("RECEIVING APPLICATION")=WHO("RECEIVING APPLICATION") 176 .M @HARY@("RECEIVING FACILITY")=WHO("RECEIVING FACILITY") 177 .S ERROR="" 178 .I $$SEND(.STATE,.ERROR) D 179 ..S MESSAGES(SUBIEN,"QUEUED")=1 180 .E D 181 ..S MESSAGES(SUBIEN,"QUEUED")=0,RETURN=0 182 .S MESSAGES(SUBIEN,"IEN")=$G(STATE("IEN")),MESSAGES(SUBIEN,"ERROR")=$G(ERROR) 183 K PARMS 184 Q RETURN 185 ; 186 SEND(HLMSTATE,ERROR) ; 187 ; 188 K ERROR 189 I HLMSTATE("UNSTORED LINES"),'$$SAVEMSG^HLOF777(.HLMSTATE) S ERROR="$$SAVE^HLOF777 FAILED!" Q 0 190 ; 191 I '$$SAVEMSG^HLOF778(.HLMSTATE) S ERROR="$$SAVE^HLOF778 FAILED!" Q 0 192 I HLMSTATE("BATCH"),$L($G(HLMSTATE("STATUS","SEQUENCE QUEUE"))) S ERROR="SEQUENCE QUEUES NOT SUPPORTED FOR BATCH MESSAGES" Q 0 193 I $L($G(HLMSTATE("STATUS","SEQUENCE QUEUE"))) D 194 .S HLMSTATE("STATUS","MOVED TO OUT QUEUE")=$$SQUE^HLOQUE(HLMSTATE("STATUS","SEQUENCE QUEUE"),HLMSTATE("STATUS","LINK NAME"),$G(HLMSTATE("STATUS","PORT")),HLMSTATE("STATUS","QUEUE"),HLMSTATE("IEN")) D:HLMSTATE("STATUS","MOVED TO OUT QUEUE") 195 ..S $P(^HLB(HLMSTATE("IEN"),5),"^",2)=1 196 E D 197 .D OUTQUE^HLOQUE(HLMSTATE("STATUS","LINK NAME"),$G(HLMSTATE("STATUS","PORT")),HLMSTATE("STATUS","QUEUE"),HLMSTATE("IEN")) 198 Q HLMSTATE("IEN") 199 ; 200 DONTSEND(HLMSTATE,ERROR) ; 201 ;This procedure does NOT send a message. Rather, it creates an entry in file 778 with the status ER. 202 ;Input: 203 ; HLMSTATE - pass-by-reference 204 ; ERROR (optional, pass-by-value) error text to store with the message 205 ;Output: none 206 ; 207 I HLMSTATE("UNSTORED LINES"),'$$SAVEMSG^HLOF777(.HLMSTATE) ; just continue 208 ; 209 S HLMSTATE("STATUS")="ER" 210 S HLMSTATE("STATUS","PURGE")=$$FMADD^XLFDT(HLMSTATE("DT/TM CREATED"),HLMSTATE("SYSTEM","ERROR PURGE")) 211 S HLMSTATE("STATUS","ERROR TEXT")=$G(ERROR) 212 I '$$SAVEMSG^HLOF778(.HLMSTATE) ;already reported an error to the app 213 Q 1 HLOAPI1 ;ALB/CJM-HL7 - Developer API's for sending & receiving messages(continued) ;02/06/2007 2 ;;1.6;HEALTH LEVEL SEVEN;**126,132,134**;Oct 13, 1995;Build 30 3 ;Per VHA Directive 2004-038, this routine should not be modified. 4 ; 5 SENDONE(HLMSTATE,PARMS,WHOTO,ERROR) ; 6 ;Sends the message to a single receiving application. 7 ; 8 ;Input: 9 ;HLMSTATE() - (pass by reference, required) This array is used by the HL7 package to track the progress of the message. The application MUST NOT touch it 10 ;PARMS( *pass by reference* 11 ; "APP ACK RESPONSE")=<tag^routine> to call when the app ack is received (optional) 12 ; (NOTE: For batch messages, HLO best supports returning application 13 ; acknowledgments via a batch response. However, non-VistA systems 14 ; may return individual messages as application acknowledgments to 15 ; messages within the original batch message, so for applications 16 ; sending batch messages might best code the "APP ACK RESPONSE" 17 ; routine to first check whether the response message is a batch. 18 ; 19 ; "ACCEPT ACK RESPONSE")=<tag^routine> to call when the commit ack is received (optional) 20 ; "ACCEPT ACK TYPE") = <AL,NE> (optional, defaults to AL) 21 ; "APP ACK TYPE") = <AL,NE> (optional, defaults to NE) 22 ; "FAILURE RESPONSE" - <tag>^<routine> (optional) The sending application routine to execute when the transmission of the message fails, i.e., the message can not be sent or no commit ack is received. 23 ; "QUEUE" - (optional) An application can name its own private queue - just a string up to 20 characters, it should be namespaced. 24 ; "SECURITY")=security information to include in the header segment, SEQ 8 (optional) 25 ; "SENDING APPLICATION")=name of sending app (required, 60 maximum length) 26 ; 27 ; WHOTO (required,pass by reference) an array specifying a single recipient. These subscripts are allowed: 28 ; 29 ; "RECEIVING APPLICATION" - (string, 60 char max, required) 30 ; 31 ; EXACTLY ONE of these parameters must be provided to identify the Receiving Facility: 32 ; 33 ; "FACILITY LINK IEN" - ien of the logical link 34 ; "FACILITY LINK NAME" - name of the logical link 35 ; "INSTITUTION IEN" - ptr to the INSTITUTION file 36 ; "STATION NUMBER" - station # with suffix 37 ; 38 ; EXACTLY ONE of these MAY be provided - optionally - to identify the interface engine to route the message through: 39 ; 40 ; "IE LINK IEN" - ptr to a logical link for the interface engine 41 ; "IE LINK NAME" - name of the logical link for the interface engine 42 ; 43 ;Output: 44 ; Function returns the ien of the message in file 778 on success, 0 on failure 45 ; HLMSTATE() - (pass by reference, required) This array is used by the HL7 package to track the progress of the message. The application MUST NOT touch it! 46 ; ERROR (pass by reference, optional) - on failure, will contain an error message 47 ; PARMS - left undefined when the function returns 48 ; WHOTO - left undefined when the function returns 49 ; 50 ; 51 N SUCCESS,ERR1,ERR2 52 S SUCCESS=0 53 D 54 .I '$G(HLMSTATE("BODY")),'$G(HLMSTATE("UNSTORED LINES")) S ERROR="MESSAGE NOT YET CREATED" Q 55 .; 56 .I $$CHKPARMS^HLOAPI2(.HLMSTATE,.PARMS,.ERR1)&$$CHKWHO(.HLMSTATE,.WHOTO,.ERR2) D 57 ..I $$SEND(.HLMSTATE,.ERROR) S SUCCESS=1 58 .E D 59 .S ERROR=$G(ERR1)_": "_$G(ERR2) 60 .D DONTSEND(.HLMSTATE,ERROR) 61 K PARMS,WHOTO 62 Q $S(SUCCESS:HLMSTATE("IEN"),1:0) 63 ; 64 SENDMANY(HLMSTATE,PARMS,WHOTO) ; 65 ;Sends the message to a list of receiving applications 66 ; 67 ;Input: Same as for $$SENDONE, except WHOTO is a list. 68 ; WHOTO (pass by reference) 69 ; Specifies a list of recipients. Each recipient should be on the 70 ; list as WHOTO(i), where i=1,2,3,4, etc. for as many messages as to 71 ; send. At each subscript WHOTO(i), the same lower level subscripts 72 ; may be defined as in the $$SENDONE API. For example: 73 ; 74 ; WHOTO(1,"LINK NAME")="VAALB" 75 ; WHOTO(1,"RECEIVING APPLICATION")="MPI" 76 ; WHOTO(2,"STATION NUMBER")=500 77 ; WHOTO(2,"RECEIVING APPLICATION")="MPI" 78 ; 79 ; 80 ;Output: 81 ; Function returns 1 if a message is queued to be sent to each intended recipient, 0 otherwise 82 ; PARMS - left undefined when the function returns 83 ; WHOTO (pass by reference) returns the status of each message to be sent in the format: 84 ; (<i>,"QUEUED")= <1 if queued to be sent, 0 otherwise) 85 ; (<i>,"IEN")=<ien, file 778> 86 ; (<i>,"ERROR")= error message if an error was encountered (status=0), not defined otherwise 87 ; 88 ; 89 N ERROR,RETURN,WHO,STATE,I 90 S RETURN=1 91 I '$G(HLMSTATE("BODY")),'$G(HLMSTATE("UNSTORED LINES")) D K PARMS Q 0 92 .S ERROR="MESSAGE NOT YET CREATED" 93 .S I=0 F S I=$O(WHOTO(I)) Q:'I S WHOTO(I,"QUEUED")=0,WHOTO(I,"IEN")=0,WHOTO(I,"ERROR")=ERROR 94 ; 95 I '$$CHKPARMS^HLOAPI2(.HLMSTATE,.PARMS,.ERROR) D K PARMS Q 0 96 .S I=0 F S I=$O(WHOTO(I)) Q:'I D 97 ..K WHO M WHO=WHOTO(I) 98 ..K STATE M STATE=HLMSTATE S STATE("IEN")="" 99 ..S WHOTO(I,"QUEUED")=0 100 ..D DONTSEND(.STATE,$G(ERROR)) 101 ..S WHOTO(I,"IEN")=$G(STATE("IEN")) 102 ..S WHOTO(I,"ERROR")=ERROR 103 ; 104 S I=0 F S I=$O(WHOTO(I)) Q:'I D 105 .K WHO M WHO=WHOTO(I) 106 .K STATE M STATE=HLMSTATE S STATE("IEN")="" 107 .S ERROR="" 108 .I $$CHKWHO(.STATE,.WHO,.ERROR) D 109 ..I $$SEND(.STATE,.ERROR) D 110 ...S WHOTO(I,"QUEUED")=1 111 ...S WHOTO(I,"IEN")=STATE("IEN") 112 ...S WHOTO(I,"ERROR")="" 113 ..E D 114 ...S WHOTO(I,"QUEUED")=0 115 ...S WHOTO(I,"IEN")=$G(STATE("IEN")) 116 ...S WHOTO(I,"ERROR")=$G(ERROR) 117 ...S RETURN=0 118 .E D ;who not adequately determined 119 ..S WHOTO(I,"QUEUED")=0,RETURN=0 120 ..D DONTSEND(.STATE,$G(ERROR)) 121 ..S WHOTO(I,"IEN")=$G(STATE("IEN")),WHOTO(I,"ERROR")=$G(ERROR) 122 K PARMS 123 Q RETURN 124 ; 125 SENDSUB(HLMSTATE,PARMS,MESSAGES) ; 126 ;Sends the message to a list of receiving applications based on the HL7 Subscription Registry 127 ; 128 ;Input: 129 ; HLMSTATE (pass by reference, required) same as $$SENDMANY 130 ; PARMS (pass by reference, required) same as $$SENDMANY, with one additional subscript: 131 ; "SUBSCRIPTION IEN" - the ien of an entry in the HL7 Subscription Registry, defining the intended recipients of this message 132 ; 133 ;Output: 134 ; Function returns 1 if a message is queued to be sent to each intended recipient, 0 otherwise 135 ; PARMS - left undefined when the function returns 136 ; MESSAGES (pass by reference) returns the status of each message to be sent in this format, where subien is the ien of the recipient in the RECIPEINTS subfile of the HL7 Subscription Registry 137 ; (<subien>,"QUEUED")= <1 if queued to be sent, 0 otherwise) 138 ; (<subien>,"IEN")=<ien, file 778> 139 ; (<subien>,"ERROR")= error message if an error was encountered (status=0), not defined otherwise 140 ; 141 ; 142 K MESSAGES 143 N ERROR,RETURN,STATE,SUBIEN,WHO 144 ; 145 S RETURN=1 146 ; 147 ; 148 I '$G(HLMSTATE("BODY")),'$G(HLMSTATE("UNSTORED LINES")) S ERROR="MESSAGE NOT YET CREATED" K PARMS Q 0 149 I '$G(PARMS("SUBSCRIPTION IEN")) S ERROR="SUBSCRIPTION REGISTRY IEN NOT PROVIDED" K PARMS Q 0 150 ; 151 I '$$CHKPARMS^HLOAPI2(.HLMSTATE,.PARMS,.ERROR) D K PARMS Q 0 152 .S SUBIEN=0 F S SUBIEN=$$NEXT^HLOASUB(PARMS("SUBSCRIPTION IEN"),.WHO) Q:'SUBIEN D 153 ..N SARY,HARY 154 ..S HARY="STATE(""HDR"")" 155 ..S SARY="STATE(""STATUS"")" 156 ..K STATE M STATE=HLMSTATE S STATE("IEN")="" 157 ..;move parameters into HLMSTATE 158 ..S @SARY@("LINK IEN")=WHO("LINK IEN") 159 ..S @SARY@("LINK NAME")=WHO("LINK NAME") 160 ..S @HARY@("RECEIVING APPLICATION")=WHO("RECEIVING APPLICATION") 161 ..M @HARY@("RECEIVING FACILITY")=WHO("RECEIVING FACILITY") 162 ..D DONTSEND(.STATE,$G(ERROR)) 163 ..S MESSAGES(SUBIEN,"QUEUED")=0 164 ..S MESSAGES(SUBIEN,"IEN")=$G(STATE("IEN")) 165 ..S MESSAGES(SUBIEN,"ERROR")=$G(ERROR) 166 ; 167 F S SUBIEN=$$NEXT^HLOASUB(PARMS("SUBSCRIPTION IEN"),.WHO) Q:'SUBIEN D 168 .N SARY,HARY 169 .S HARY="STATE(""HDR"")" 170 .S SARY="STATE(""STATUS"")" 171 .K STATE M STATE=HLMSTATE S STATE("IEN")="" 172 .;move parameters into HLMSTATE 173 .S @SARY@("LINK IEN")=WHO("LINK IEN") 174 .S @SARY@("LINK NAME")=WHO("LINK NAME") 175 .S @HARY@("RECEIVING APPLICATION")=WHO("RECEIVING APPLICATION") 176 .M @HARY@("RECEIVING FACILITY")=WHO("RECEIVING FACILITY") 177 .S ERROR="" 178 .I $$SEND(.STATE,.ERROR) D 179 ..S MESSAGES(SUBIEN,"QUEUED")=1 180 .E D 181 ..S MESSAGES(SUBIEN,"QUEUED")=0,RETURN=0 182 .S MESSAGES(SUBIEN,"IEN")=$G(STATE("IEN")),MESSAGES(SUBIEN,"ERROR")=$G(ERROR) 183 K PARMS 184 Q RETURN 185 ; 186 SEND(HLMSTATE,ERROR) ; 187 ; 188 K ERROR 189 I HLMSTATE("UNSTORED LINES"),'$$SAVEMSG^HLOF777(.HLMSTATE) S ERROR="$$SAVE^HLOF777 FAILED!" Q 0 190 ; 191 I '$$SAVEMSG^HLOF778(.HLMSTATE) S ERROR="$$SAVE^HLOF778 FAILED!" Q 0 192 D OUTQUE^HLOQUE(HLMSTATE("STATUS","LINK NAME"),$G(HLMSTATE("STATUS","PORT")),HLMSTATE("STATUS","QUEUE"),HLMSTATE("IEN")) 193 Q HLMSTATE("IEN") 194 ; 195 DONTSEND(HLMSTATE,ERROR) ; 196 ;This procedure does NOT send a message. Rather, it creates an entry in file 778 with the 197 ;of "SE". 198 ;Input: 199 ; HLMSTATE - pass-by-reference 200 ; ERROR (optional, pass-by-value) error text to store with the message 201 ;Output: none 202 ; 203 I HLMSTATE("UNSTORED LINES"),'$$SAVEMSG^HLOF777(.HLMSTATE) ; just continue 204 ; 205 S HLMSTATE("STATUS")="SE" 206 S HLMSTATE("STATUS","PURGE")=$$FMADD^XLFDT(HLMSTATE("DT/TM CREATED"),HLMSTATE("SYSTEM","ERROR PURGE")) 207 S HLMSTATE("STATUS","ERROR TEXT")=$G(ERROR) 208 I '$$SAVEMSG^HLOF778(.HLMSTATE) ;already reported an error to the app 209 Q 210 ; 211 CHKWHO(HLMSTATE,WHOTO,ERROR) ; 212 N RETURN,I 213 S RETURN=1 214 I '$$CHECKWHO^HLOASUB1(.WHOTO,.RETURN,.ERROR) S RETURN=0 215 ; 216 ;move parameters into HLMSTATE 217 S HLMSTATE("STATUS","LINK IEN")=$G(RETURN("LINK IEN")) 218 S HLMSTATE("STATUS","LINK NAME")=$G(RETURN("LINK NAME")) 219 S HLMSTATE("STATUS","PORT")=$P($G(RETURN("RECEIVING FACILITY",2)),":",2) 220 S HLMSTATE("HDR","RECEIVING APPLICATION")=$G(RETURN("RECEIVING APPLICATION")) 221 F I=1:1:3 S HLMSTATE("HDR","RECEIVING FACILITY",I)=$G(RETURN("RECEIVING FACILITY",I)) 222 Q RETURN
Note:
See TracChangeset
for help on using the changeset viewer.