- HLOAPI2 ;ALB/CJM/OAK/RBN-HL7 - Developer API's for sending application acks ;07/12/2012
- ;;1.6;HEALTH LEVEL SEVEN;**126,131,133,134,137,138,146,158**;Oct 13, 1995;Build 14
- ;Per VHA Directive 2004-038, this routine should not be modified.
- ;
- ACK(HLMSTATE,PARMS,ACK,ERROR) ;; Default behavior is to return a general
- ;;application ack. The application may optionally specify the message
- ;;type and event or call $$ADDSEG^HLOAPI to add segments.
- ;;A generic MSA segment (components 1-3) is added automatically IF the
- ;;application doesn't call $$ADDSEG^HLOAPI to add an MSA segment as the
- ;;FIRST segment following the header.
- ;;$$SENDACK must be called when the ack is completed. The return
- ;;destination is determined automatically from the original message
- ;;
- ;;This API should NOT be called for batch messages, use $$BATCHACK instead.
- ;;Input:
- ;; HLMSTATE (pass by reference, required) the array obtained by calling $$STARTMSG^HLOPRS when parsing the original message
- ;; PARMS (pass by reference) These subscripts may be defined:
- ;; "ACK CODE" (required) MSA1[ {AA,AE,AR}
- ;; "ERROR MESSAGE" - MSA3, should be used only if AE or AR
- ;; "ACCEPT ACK RESPONSE" - the <tag^routine> to call when the commit ack is received (optional)
- ;; "ACCEPT ACK TYPE" - {AL,NE} (optional, defaults to AL)
- ;; "CONTINUATION POINTER" (optional)indicates a fragmented message
- ;; "COUNTRY" - the 3 character country code (optional)
- ;; "EVENT" - the 3 character event type (optional, defaults to the event code of the original message)
- ;; "ENCODING CHARACTERS" - the four HL7 encoding characters (optional,defaults to "^~\&"
- ;; "FAILURE RESPONSE" (optional) the <tag>^<routine> that the sending application routine should execute if the transmission of the message fails, i.e., the message can not be sent or a requested commit ack is not received.
- ;; "FIELD SEPARATOR" - field separator (optional, defaults to "|")
- ;; "MESSAGE TYPE" - if not defined, ACK is used
- ;; "MESSAGE STRUCTURE" (optional)
- ;; "RETURN LINK NAME" (optional)
- ;; "RETURN LINK IEN" (optional)
- ;; "QUEUE" - (optional) An application can name its own private queue (a string under 20 characters,namespaced). The default is the name of the queue of the original message
- ;; "SECURITY" (optional) security information to include in the header segment, SEQ 8 (optional)
- ;; "VERSION" - the HL7 Version ID (optional, defaults to 2.4)
- ;;Output:
- ;; Function returns 1 on success, 0 on failure
- ;; PARMS - left undefined when the function returns
- ;; ACK (pass by reference, required) the acknowledgment message being built.
- ;; ERROR (pass by reference) error msg
- ;;
- N I,SEG,TOLINK,SUCCESS
- S SUCCESS=0,(TOLINK,ERROR)=""
- ;
- D
- .N PORT S PORT=""
- .I $G(PARMS("ACK CODE"))'="AA",$G(PARMS("ACK CODE"))'="AE",$G(PARMS("ACK CODE"))'="AR" S ERROR="INVALID ACK CODE" Q
- .;
- .I '$G(HLMSTATE("IEN")) S ERROR="ORIGINAL MESSAGE TO ACKNOWLEDGE IS NOT IDENTIFIED" Q
- .I $G(HLMSTATE("BATCH")) S ERROR="BATCH ACKNOWLEDGMENTS MUST USE $$BATCHACK^HLOAPI3" Q
- .;
- .I $G(HLMSTATE("HDR","MESSAGE CONTROL ID"))="" S ERROR="MESSAGE CONTROL ID MUST EXIST TO RETURN AN APPLICATION ACK" Q
- .S PARMS("MESSAGE TYPE")=$G(PARMS("MESSAGE TYPE"),"ACK")
- .S:PARMS("MESSAGE TYPE")="ACK" PARMS("MESSAGE STRUCTURE")="ACK"
- .S PARMS("EVENT")=$G(PARMS("EVENT"),$G(HLMSTATE("HDR","EVENT")))
- .I $$NEWMSG^HLOAPI(.PARMS,.ACK) ;can't fail!
- .;
- .;if the return link can not be determined, the HL Logical Link file has a problem that must be fixed at the site
- .I $G(PARMS("RETURN LINK IEN")) D
- ..S TOLINK=$P($G(^HLCS(870,PARMS("RETURN LINK IEN"),0)),"^")
- ..S PORT=$$PORT2^HLOTLNK(TOLINK)
- .E I $L($G(PARMS("RETURN LINK NAME"))) D
- ..S TOLINK=PARMS("RETURN LINK NAME")
- ..S PORT=$$PORT2^HLOTLNK(TOLINK)
- .E D
- ..S TOLINK=$$ACKLINK(.HLMSTATE,.PORT)
- .I (TOLINK="")!('PORT) S ERROR="TRANSMISSION LINK FOR APPLICATION ACK CANNOT BE DETERMINED" Q
- .;
- .S ACK("HDR","APP ACK TYPE")="NE"
- .S ACK("HDR","ACCEPT ACK TYPE")=$G(PARMS("ACCEPT ACK TYPE"),"AL")
- .S ACK("STATUS","QUEUE")=$G(PARMS("QUEUE"),$G(HLMSTATE("STATUS","QUEUE")))
- .S ACK("STATUS","PORT")=PORT
- .S ACK("HDR","SECURITY")=$G(PARMS("SECURITY"))
- .S ACK("HDR","SENDING APPLICATION")=$G(HLMSTATE("HDR","RECEIVING APPLICATION"))
- .S ACK("HDR","RECEIVING APPLICATION")=$G(HLMSTATE("HDR","SENDING APPLICATION"))
- .F I=1:1:3 S ACK("HDR","RECEIVING FACILITY",I)=$G(HLMSTATE("HDR","SENDING FACILITY",I))
- .S ACK("ACK TO","STATUS")=$S(PARMS("ACK CODE")="AA":"SU",1:"ER")
- .S ACK("ACK TO")=$G(HLMSTATE("HDR","MESSAGE CONTROL ID"))
- .S ACK("ACK TO IEN")=HLMSTATE("IEN")
- .S ACK("STATUS","LINK NAME")=TOLINK
- .S ACK("LINE COUNT")=0
- . ;; Next line modified for HL*1.6*138 - RBN
- .;;S ACK("MSA")="MSA"_ACK("HDR","FIELD SEPARATOR")_PARMS("ACK CODE")_ACK("HDR","FIELD SEPARATOR")_$G(HLMSTATE("HDR","MESSAGE CONTROL ID"))_ACK("HDR","FIELD SEPARATOR")_$G(PARMS("ERROR MESSAGE"))
- .S ACK("MSA")="MSA"_ACK("HDR","FIELD SEPARATOR")_PARMS("ACK CODE")_ACK("HDR","FIELD SEPARATOR")_$G(HLMSTATE("HDR","MESSAGE CONTROL ID"))_ACK("HDR","FIELD SEPARATOR")_$$ESCAPE^HLOPBLD(.HLMSTATE,$G(PARMS("ERROR MESSAGE")))
- .S SUCCESS=1
- K PARMS
- K:'SUCCESS ACK
- Q SUCCESS
- ;
- SENDACK(ACK,ERROR) ;;This is used to signal that an application acknowledgment is complete.
- ;;Input:
- ;; ACK (pass by reference,required) An array that contains the acknowledgment msg
- ;;Output:
- ;; Function returns 1 on success, 0 on failure
- ;; ERROR (pass by reference) error msg
- ;;
- N SEG
- ;if the application added its own MSA, then the ACK("MSA") node was killed
- I $D(ACK("MSA")) S SEG(1)=ACK("MSA") D ADDSEG^HLOMSG(.ACK,.SEG)
- ;
- I $$SEND^HLOAPI1(.ACK,.ERROR) Q 1
- Q 0
- ;
- ACKLINK(HLMSTATE,PORT) ; Finds the link & port to return the application ack to.
- N LINK
- S LINK=$$RTRNLNK^HLOAPP($G(HLMSTATE("HDR","RECEIVING APPLICATION")))
- I LINK]"" S PORT=$$PORT2^HLOTLNK(LINK) Q LINK
- S LINK=$$RTRNLNK^HLOTLNK($G(HLMSTATE("HDR","SENDING FACILITY",1)),$G(HLMSTATE("HDR","SENDING FACILITY",2)),$G(HLMSTATE("HDR","SENDING FACILITY",3)))
- S:$G(HLMSTATE("HDR","SENDING FACILITY",3))="DNS" PORT=$P(HLMSTATE("HDR","SENDING FACILITY",2),":",2)
- I LINK]"",'PORT S PORT=$$PORT2^HLOTLNK(LINK)
- Q LINK
- ;
- CHKPARMS(HLMSTATE,PARMS,ERROR) ;
- N LEN,SARY,HARY
- ;
- ;shortcut to reference the header sub-array
- S HARY="HLMSTATE(""HDR"")"
- ;
- ;shortcut to reference the status sub-array
- S SARY="HLMSTATE(""STATUS"")"
- ;
- S ERROR=""
- I $G(PARMS("ACCEPT ACK TYPE"))="" S PARMS("ACCEPT ACK TYPE")="AL"
- I $G(PARMS("APP ACK TYPE"))="" S PARMS("APP ACK TYPE")="NE"
- I PARMS("ACCEPT ACK TYPE")'="NE",PARMS("ACCEPT ACK TYPE")'="AL" S ERROR="INVALID ACCEPT ACKNOWLEDGMENT TYPE"
- I PARMS("APP ACK TYPE")'="NE",PARMS("APP ACK TYPE")'="AL" S ERROR="INVALID APPLICATION ACKNOWLEDGMENT TYPE"
- S LEN=$L($G(PARMS("QUEUE")))
- I $G(PARMS("QUEUE"))["^" S ERROR="QUEUE NAME MAY NOT CONTAIN '^'"
- I LEN>20 S ERROR="QUEUE PARAMETER IS MAX 20 LENGTH",PARMS("QUEUE")=$E(PARMS("QUEUE"),1,20)
- I 'LEN S PARMS("QUEUE")="DEFAULT"
- D
- .N APPIEN
- .I $G(PARMS("SENDING APPLICATION"))="" D Q
- ..S ERROR="SENDING APPLICATION IS REQUIRED"
- ..S PARMS("SENDING APPLICATION")=""
- .E D Q:'APPIEN
- ..S APPIEN=$$GETIEN^HLOAPP(PARMS("SENDING APPLICATION"))
- ..I 'APPIEN S ERROR="SENDING APPLICATION NOT FOUND IN THE HLO APPLICATION REGISTRY"
- .I $L($G(PARMS("SEQUENCE QUEUE"))) D
- ..I ($L(PARMS("SEQUENCE QUEUE"))>30) S ERROR="SEQUENCE QUEUE NAME > 30 CHARACTERS" Q
- ..I PARMS("SEQUENCE QUEUE")["^" S ERROR="SEQUENCE QUEUE NAME MAY NOT CONTAIN '^'" Q
- ..I $G(PARMS("APP ACK TYPE"))'="AL" S ERROR="SEQUENCE QUEUES REQUIRE AN APPLICATION ACKNOWLEDGMENT" Q
- ..I $G(PARMS("ACCEPT ACK TYPE"))'="AL" S ERROR="SEQUENCE QUEUES REQUIRE AN ACCEPT ACKNOWLEDGMENT" Q
- ;
- ;move parameters into HLMSTATE
- S @HARY@("ACCEPT ACK TYPE")=PARMS("ACCEPT ACK TYPE")
- S @HARY@("APP ACK TYPE")=PARMS("APP ACK TYPE")
- S @HARY@("SENDING APPLICATION")=$E(PARMS("SENDING APPLICATION"),1,60)
- S @HARY@("SECURITY")=$G(PARMS("SECURITY"))
- S @SARY@("APP ACK RESPONSE")=$G(PARMS("APP ACK RESPONSE"))
- S @SARY@("ACCEPT ACK RESPONSE")=$G(PARMS("ACCEPT ACK RESPONSE"))
- S @SARY@("FAILURE RESPONSE")=$G(PARMS("FAILURE RESPONSE"))
- S @SARY@("QUEUE")=PARMS("QUEUE")
- S @SARY@("SEQUENCE QUEUE")=$G(PARMS("SEQUENCE QUEUE"))
- Q:$L(ERROR) 0
- Q 1
- ;
- ;
- SETCODE(SEG,VALUE,FIELD,COMP,REP) ; Implements SETCNE and SETCWE
- ;
- N SUB,VAR
- Q:'$G(FIELD)
- S:'$G(REP) REP=1
- I '$G(COMP) D
- .S VAR="COMP",SUB=1
- E D
- .S VAR="SUB"
- S @VAR=1,SEG(FIELD,REP,COMP,SUB)=$G(VALUE("ID"))
- S @VAR=2,SEG(FIELD,REP,COMP,SUB)=$G(VALUE("TEXT"))
- S @VAR=3,SEG(FIELD,REP,COMP,SUB)=$G(VALUE("SYSTEM"))
- S @VAR=4,SEG(FIELD,REP,COMP,SUB)=$G(VALUE("ALTERNATE ID"))
- S @VAR=5,SEG(FIELD,REP,COMP,SUB)=$G(VALUE("ALTERNATE TEXT"))
- S @VAR=6,SEG(FIELD,REP,COMP,SUB)=$G(VALUE("ALTERNATE SYSTEM"))
- S @VAR=7,SEG(FIELD,REP,COMP,SUB)=$G(VALUE("SYSTEM VERSION"))
- S @VAR=8,SEG(FIELD,REP,COMP,SUB)=$G(VALUE("ALTERNATE SYSTEM VERSION"))
- S @VAR=9,SEG(FIELD,REP,COMP,SUB)=$G(VALUE("ORIGINAL TEXT"))
- Q
- ;
- CHKWHO(HLMSTATE,WHOTO,ERROR) ;
- N RETURN,I
- S RETURN=1
- I '$$CHECKWHO^HLOASUB1(.WHOTO,.RETURN,.ERROR) S RETURN=0
- ;
- ;move parameters into HLMSTATE
- S HLMSTATE("STATUS","LINK IEN")=$G(RETURN("LINK IEN"))
- S HLMSTATE("STATUS","LINK NAME")=$G(RETURN("LINK NAME"))
- ;** P158 START **
- ;S HLMSTATE("STATUS","PORT")=$P($G(RETURN("RECEIVING FACILITY",2)),":",2)
- S HLMSTATE("STATUS","PORT")=$G(RETURN("LINK PORT"))
- ;** P158 END **
- S HLMSTATE("HDR","RECEIVING APPLICATION")=$G(RETURN("RECEIVING APPLICATION"))
- F I=1:1:3 S HLMSTATE("HDR","RECEIVING FACILITY",I)=$G(RETURN("RECEIVING FACILITY",I))
- Q RETURN
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HHLOAPI2 9749 printed Feb 18, 2025@23:24:51 Page 2
- HLOAPI2 ;ALB/CJM/OAK/RBN-HL7 - Developer API's for sending application acks ;07/12/2012
- +1 ;;1.6;HEALTH LEVEL SEVEN;**126,131,133,134,137,138,146,158**;Oct 13, 1995;Build 14
- +2 ;Per VHA Directive 2004-038, this routine should not be modified.
- +3 ;
- ACK(HLMSTATE,PARMS,ACK,ERROR) ;; Default behavior is to return a general
- +1 ;;application ack. The application may optionally specify the message
- +2 ;;type and event or call $$ADDSEG^HLOAPI to add segments.
- +3 ;;A generic MSA segment (components 1-3) is added automatically IF the
- +4 ;;application doesn't call $$ADDSEG^HLOAPI to add an MSA segment as the
- +5 ;;FIRST segment following the header.
- +6 ;;$$SENDACK must be called when the ack is completed. The return
- +7 ;;destination is determined automatically from the original message
- +8 ;;
- +9 ;;This API should NOT be called for batch messages, use $$BATCHACK instead.
- +10 ;;Input:
- +11 ;; HLMSTATE (pass by reference, required) the array obtained by calling $$STARTMSG^HLOPRS when parsing the original message
- +12 ;; PARMS (pass by reference) These subscripts may be defined:
- +13 ;; "ACK CODE" (required) MSA1[ {AA,AE,AR}
- +14 ;; "ERROR MESSAGE" - MSA3, should be used only if AE or AR
- +15 ;; "ACCEPT ACK RESPONSE" - the <tag^routine> to call when the commit ack is received (optional)
- +16 ;; "ACCEPT ACK TYPE" - {AL,NE} (optional, defaults to AL)
- +17 ;; "CONTINUATION POINTER" (optional)indicates a fragmented message
- +18 ;; "COUNTRY" - the 3 character country code (optional)
- +19 ;; "EVENT" - the 3 character event type (optional, defaults to the event code of the original message)
- +20 ;; "ENCODING CHARACTERS" - the four HL7 encoding characters (optional,defaults to "^~\&"
- +21 ;; "FAILURE RESPONSE" (optional) the <tag>^<routine> that the sending application routine should execute if the transmission of the message fails, i.e., the message can not be sent or a requested commit ack is not received.
- +22 ;; "FIELD SEPARATOR" - field separator (optional, defaults to "|")
- +23 ;; "MESSAGE TYPE" - if not defined, ACK is used
- +24 ;; "MESSAGE STRUCTURE" (optional)
- +25 ;; "RETURN LINK NAME" (optional)
- +26 ;; "RETURN LINK IEN" (optional)
- +27 ;; "QUEUE" - (optional) An application can name its own private queue (a string under 20 characters,namespaced). The default is the name of the queue of the original message
- +28 ;; "SECURITY" (optional) security information to include in the header segment, SEQ 8 (optional)
- +29 ;; "VERSION" - the HL7 Version ID (optional, defaults to 2.4)
- +30 ;;Output:
- +31 ;; Function returns 1 on success, 0 on failure
- +32 ;; PARMS - left undefined when the function returns
- +33 ;; ACK (pass by reference, required) the acknowledgment message being built.
- +34 ;; ERROR (pass by reference) error msg
- +35 ;;
- +36 NEW I,SEG,TOLINK,SUCCESS
- +37 SET SUCCESS=0
- SET (TOLINK,ERROR)=""
- +38 ;
- +39 Begin DoDot:1
- +40 NEW PORT
- SET PORT=""
- +41 IF $GET(PARMS("ACK CODE"))'="AA"
- IF $GET(PARMS("ACK CODE"))'="AE"
- IF $GET(PARMS("ACK CODE"))'="AR"
- SET ERROR="INVALID ACK CODE"
- QUIT
- +42 ;
- +43 IF '$GET(HLMSTATE("IEN"))
- SET ERROR="ORIGINAL MESSAGE TO ACKNOWLEDGE IS NOT IDENTIFIED"
- QUIT
- +44 IF $GET(HLMSTATE("BATCH"))
- SET ERROR="BATCH ACKNOWLEDGMENTS MUST USE $$BATCHACK^HLOAPI3"
- QUIT
- +45 ;
- +46 IF $GET(HLMSTATE("HDR","MESSAGE CONTROL ID"))=""
- SET ERROR="MESSAGE CONTROL ID MUST EXIST TO RETURN AN APPLICATION ACK"
- QUIT
- +47 SET PARMS("MESSAGE TYPE")=$GET(PARMS("MESSAGE TYPE"),"ACK")
- +48 if PARMS("MESSAGE TYPE")="ACK"
- SET PARMS("MESSAGE STRUCTURE")="ACK"
- +49 SET PARMS("EVENT")=$GET(PARMS("EVENT"),$GET(HLMSTATE("HDR","EVENT")))
- +50 ;can't fail!
- IF $$NEWMSG^HLOAPI(.PARMS,.ACK)
- +51 ;
- +52 ;if the return link can not be determined, the HL Logical Link file has a problem that must be fixed at the site
- +53 IF $GET(PARMS("RETURN LINK IEN"))
- Begin DoDot:2
- +54 SET TOLINK=$PIECE($GET(^HLCS(870,PARMS("RETURN LINK IEN"),0)),"^")
- +55 SET PORT=$$PORT2^HLOTLNK(TOLINK)
- End DoDot:2
- +56 IF '$TEST
- IF $LENGTH($GET(PARMS("RETURN LINK NAME")))
- Begin DoDot:2
- +57 SET TOLINK=PARMS("RETURN LINK NAME")
- +58 SET PORT=$$PORT2^HLOTLNK(TOLINK)
- End DoDot:2
- +59 IF '$TEST
- Begin DoDot:2
- +60 SET TOLINK=$$ACKLINK(.HLMSTATE,.PORT)
- End DoDot:2
- +61 IF (TOLINK="")!('PORT)
- SET ERROR="TRANSMISSION LINK FOR APPLICATION ACK CANNOT BE DETERMINED"
- QUIT
- +62 ;
- +63 SET ACK("HDR","APP ACK TYPE")="NE"
- +64 SET ACK("HDR","ACCEPT ACK TYPE")=$GET(PARMS("ACCEPT ACK TYPE"),"AL")
- +65 SET ACK("STATUS","QUEUE")=$GET(PARMS("QUEUE"),$GET(HLMSTATE("STATUS","QUEUE")))
- +66 SET ACK("STATUS","PORT")=PORT
- +67 SET ACK("HDR","SECURITY")=$GET(PARMS("SECURITY"))
- +68 SET ACK("HDR","SENDING APPLICATION")=$GET(HLMSTATE("HDR","RECEIVING APPLICATION"))
- +69 SET ACK("HDR","RECEIVING APPLICATION")=$GET(HLMSTATE("HDR","SENDING APPLICATION"))
- +70 FOR I=1:1:3
- SET ACK("HDR","RECEIVING FACILITY",I)=$GET(HLMSTATE("HDR","SENDING FACILITY",I))
- +71 SET ACK("ACK TO","STATUS")=$SELECT(PARMS("ACK CODE")="AA":"SU",1:"ER")
- +72 SET ACK("ACK TO")=$GET(HLMSTATE("HDR","MESSAGE CONTROL ID"))
- +73 SET ACK("ACK TO IEN")=HLMSTATE("IEN")
- +74 SET ACK("STATUS","LINK NAME")=TOLINK
- +75 SET ACK("LINE COUNT")=0
- +76 ;; Next line modified for HL*1.6*138 - RBN
- +77 ;;S ACK("MSA")="MSA"_ACK("HDR","FIELD SEPARATOR")_PARMS("ACK CODE")_ACK("HDR","FIELD SEPARATOR")_$G(HLMSTATE("HDR","MESSAGE CONTROL ID"))_ACK("HDR","FIELD SEPARATOR")_$G(PARMS("ERROR MESSAGE"))
- +78 SET ACK("MSA")="MSA"_ACK("HDR","FIELD SEPARATOR")_PARMS("ACK CODE")_ACK("HDR","FIELD SEPARATOR")_$GET(HLMSTATE("HDR","MESSAGE CONTROL ID"))_ACK("HDR","FIELD SEPARATOR")_$$ESCAPE^HLOPBLD(.HLMSTATE,$GET(PARMS("ERROR MESSAGE")))
- +79 SET SUCCESS=1
- End DoDot:1
- +80 KILL PARMS
- +81 if 'SUCCESS
- KILL ACK
- +82 QUIT SUCCESS
- +83 ;
- SENDACK(ACK,ERROR) ;;This is used to signal that an application acknowledgment is complete.
- +1 ;;Input:
- +2 ;; ACK (pass by reference,required) An array that contains the acknowledgment msg
- +3 ;;Output:
- +4 ;; Function returns 1 on success, 0 on failure
- +5 ;; ERROR (pass by reference) error msg
- +6 ;;
- +7 NEW SEG
- +8 ;if the application added its own MSA, then the ACK("MSA") node was killed
- +9 IF $DATA(ACK("MSA"))
- SET SEG(1)=ACK("MSA")
- DO ADDSEG^HLOMSG(.ACK,.SEG)
- +10 ;
- +11 IF $$SEND^HLOAPI1(.ACK,.ERROR)
- QUIT 1
- +12 QUIT 0
- +13 ;
- ACKLINK(HLMSTATE,PORT) ; Finds the link & port to return the application ack to.
- +1 NEW LINK
- +2 SET LINK=$$RTRNLNK^HLOAPP($GET(HLMSTATE("HDR","RECEIVING APPLICATION")))
- +3 IF LINK]""
- SET PORT=$$PORT2^HLOTLNK(LINK)
- QUIT LINK
- +4 SET LINK=$$RTRNLNK^HLOTLNK($GET(HLMSTATE("HDR","SENDING FACILITY",1)),$GET(HLMSTATE("HDR","SENDING FACILITY",2)),$GET(HLMSTATE("HDR","SENDING FACILITY",3)))
- +5 if $GET(HLMSTATE("HDR","SENDING FACILITY",3))="DNS"
- SET PORT=$PIECE(HLMSTATE("HDR","SENDING FACILITY",2),":",2)
- +6 IF LINK]""
- IF 'PORT
- SET PORT=$$PORT2^HLOTLNK(LINK)
- +7 QUIT LINK
- +8 ;
- CHKPARMS(HLMSTATE,PARMS,ERROR) ;
- +1 NEW LEN,SARY,HARY
- +2 ;
- +3 ;shortcut to reference the header sub-array
- +4 SET HARY="HLMSTATE(""HDR"")"
- +5 ;
- +6 ;shortcut to reference the status sub-array
- +7 SET SARY="HLMSTATE(""STATUS"")"
- +8 ;
- +9 SET ERROR=""
- +10 IF $GET(PARMS("ACCEPT ACK TYPE"))=""
- SET PARMS("ACCEPT ACK TYPE")="AL"
- +11 IF $GET(PARMS("APP ACK TYPE"))=""
- SET PARMS("APP ACK TYPE")="NE"
- +12 IF PARMS("ACCEPT ACK TYPE")'="NE"
- IF PARMS("ACCEPT ACK TYPE")'="AL"
- SET ERROR="INVALID ACCEPT ACKNOWLEDGMENT TYPE"
- +13 IF PARMS("APP ACK TYPE")'="NE"
- IF PARMS("APP ACK TYPE")'="AL"
- SET ERROR="INVALID APPLICATION ACKNOWLEDGMENT TYPE"
- +14 SET LEN=$LENGTH($GET(PARMS("QUEUE")))
- +15 IF $GET(PARMS("QUEUE"))["^"
- SET ERROR="QUEUE NAME MAY NOT CONTAIN '^'"
- +16 IF LEN>20
- SET ERROR="QUEUE PARAMETER IS MAX 20 LENGTH"
- SET PARMS("QUEUE")=$EXTRACT(PARMS("QUEUE"),1,20)
- +17 IF 'LEN
- SET PARMS("QUEUE")="DEFAULT"
- +18 Begin DoDot:1
- +19 NEW APPIEN
- +20 IF $GET(PARMS("SENDING APPLICATION"))=""
- Begin DoDot:2
- +21 SET ERROR="SENDING APPLICATION IS REQUIRED"
- +22 SET PARMS("SENDING APPLICATION")=""
- End DoDot:2
- QUIT
- +23 IF '$TEST
- Begin DoDot:2
- +24 SET APPIEN=$$GETIEN^HLOAPP(PARMS("SENDING APPLICATION"))
- +25 IF 'APPIEN
- SET ERROR="SENDING APPLICATION NOT FOUND IN THE HLO APPLICATION REGISTRY"
- End DoDot:2
- if 'APPIEN
- QUIT
- +26 IF $LENGTH($GET(PARMS("SEQUENCE QUEUE")))
- Begin DoDot:2
- +27 IF ($LENGTH(PARMS("SEQUENCE QUEUE"))>30)
- SET ERROR="SEQUENCE QUEUE NAME > 30 CHARACTERS"
- QUIT
- +28 IF PARMS("SEQUENCE QUEUE")["^"
- SET ERROR="SEQUENCE QUEUE NAME MAY NOT CONTAIN '^'"
- QUIT
- +29 IF $GET(PARMS("APP ACK TYPE"))'="AL"
- SET ERROR="SEQUENCE QUEUES REQUIRE AN APPLICATION ACKNOWLEDGMENT"
- QUIT
- +30 IF $GET(PARMS("ACCEPT ACK TYPE"))'="AL"
- SET ERROR="SEQUENCE QUEUES REQUIRE AN ACCEPT ACKNOWLEDGMENT"
- QUIT
- End DoDot:2
- End DoDot:1
- +31 ;
- +32 ;move parameters into HLMSTATE
- +33 SET @HARY@("ACCEPT ACK TYPE")=PARMS("ACCEPT ACK TYPE")
- +34 SET @HARY@("APP ACK TYPE")=PARMS("APP ACK TYPE")
- +35 SET @HARY@("SENDING APPLICATION")=$EXTRACT(PARMS("SENDING APPLICATION"),1,60)
- +36 SET @HARY@("SECURITY")=$GET(PARMS("SECURITY"))
- +37 SET @SARY@("APP ACK RESPONSE")=$GET(PARMS("APP ACK RESPONSE"))
- +38 SET @SARY@("ACCEPT ACK RESPONSE")=$GET(PARMS("ACCEPT ACK RESPONSE"))
- +39 SET @SARY@("FAILURE RESPONSE")=$GET(PARMS("FAILURE RESPONSE"))
- +40 SET @SARY@("QUEUE")=PARMS("QUEUE")
- +41 SET @SARY@("SEQUENCE QUEUE")=$GET(PARMS("SEQUENCE QUEUE"))
- +42 if $LENGTH(ERROR)
- QUIT 0
- +43 QUIT 1
- +44 ;
- +45 ;
- SETCODE(SEG,VALUE,FIELD,COMP,REP) ; Implements SETCNE and SETCWE
- +1 ;
- +2 NEW SUB,VAR
- +3 if '$GET(FIELD)
- QUIT
- +4 if '$GET(REP)
- SET REP=1
- +5 IF '$GET(COMP)
- Begin DoDot:1
- +6 SET VAR="COMP"
- SET SUB=1
- End DoDot:1
- +7 IF '$TEST
- Begin DoDot:1
- +8 SET VAR="SUB"
- End DoDot:1
- +9 SET @VAR=1
- SET SEG(FIELD,REP,COMP,SUB)=$GET(VALUE("ID"))
- +10 SET @VAR=2
- SET SEG(FIELD,REP,COMP,SUB)=$GET(VALUE("TEXT"))
- +11 SET @VAR=3
- SET SEG(FIELD,REP,COMP,SUB)=$GET(VALUE("SYSTEM"))
- +12 SET @VAR=4
- SET SEG(FIELD,REP,COMP,SUB)=$GET(VALUE("ALTERNATE ID"))
- +13 SET @VAR=5
- SET SEG(FIELD,REP,COMP,SUB)=$GET(VALUE("ALTERNATE TEXT"))
- +14 SET @VAR=6
- SET SEG(FIELD,REP,COMP,SUB)=$GET(VALUE("ALTERNATE SYSTEM"))
- +15 SET @VAR=7
- SET SEG(FIELD,REP,COMP,SUB)=$GET(VALUE("SYSTEM VERSION"))
- +16 SET @VAR=8
- SET SEG(FIELD,REP,COMP,SUB)=$GET(VALUE("ALTERNATE SYSTEM VERSION"))
- +17 SET @VAR=9
- SET SEG(FIELD,REP,COMP,SUB)=$GET(VALUE("ORIGINAL TEXT"))
- +18 QUIT
- +19 ;
- CHKWHO(HLMSTATE,WHOTO,ERROR) ;
- +1 NEW RETURN,I
- +2 SET RETURN=1
- +3 IF '$$CHECKWHO^HLOASUB1(.WHOTO,.RETURN,.ERROR)
- SET RETURN=0
- +4 ;
- +5 ;move parameters into HLMSTATE
- +6 SET HLMSTATE("STATUS","LINK IEN")=$GET(RETURN("LINK IEN"))
- +7 SET HLMSTATE("STATUS","LINK NAME")=$GET(RETURN("LINK NAME"))
- +8 ;** P158 START **
- +9 ;S HLMSTATE("STATUS","PORT")=$P($G(RETURN("RECEIVING FACILITY",2)),":",2)
- +10 SET HLMSTATE("STATUS","PORT")=$GET(RETURN("LINK PORT"))
- +11 ;** P158 END **
- +12 SET HLMSTATE("HDR","RECEIVING APPLICATION")=$GET(RETURN("RECEIVING APPLICATION"))
- +13 FOR I=1:1:3
- SET HLMSTATE("HDR","RECEIVING FACILITY",I)=$GET(RETURN("RECEIVING FACILITY",I))
- +14 QUIT RETURN