HLCSHDR4 ;SFIRMFO/LJA - Reset MSH Segment Fields ;10/09/2007 15:05
;;1.6;HEALTH LEVEL SEVEN;**93,108,122**;Oct 13, 1995;Build 14
;Per VHA Directive 2004-038, this routine should not be modified
;
DEBUG(STORE) ; If HLP set up for debugging, capture VIEW...
; HLMSH773 -- req
;
N NOW,NUM,VAR,VARS,X,XTMP
;
; 1=some, 2=all
S STORE=$S(STORE=1:1,STORE=2:2,1:0) QUIT:'STORE ;->
;
S NOW=$$NOW^XLFDT
;
S XTMP="HLCSHDR3 "_HLMSH773
S:'$D(^XTMP(XTMP,0)) ^XTMP(XTMP,0)=$$FMADD^XLFDT(NOW,0,4)_U_NOW_U_"Debug data created by DEBUG~HLCSHDR4"
;
S NUM=$O(^XTMP(XTMP,":"),-1)+1
;
; Grab only critical (some) variables?
I STORE=1 D
.
. ; Sending information...
. S ^XTMP(XTMP,NUM,"SA")=HLMSHSAO_U_HLSAN_U_HLMSHSAN
. S ^XTMP(XTMP,NUM,"SF")=HLMSHSFO_U_HLSFN_U_HLMSHSFN
.
. ; Receiving information...
. S ^XTMP(XTMP,NUM,"RA")=HLMSHRAO_U_HLRAN_U_HLMSHRAN
. S ^XTMP(XTMP,NUM,"RF")=HLMSHRFO_U_HLRFN_U_HLMSHRFN
.
. ; Other information... (HLMSHPRE and HLMSHPRS hold 2 pieces!)
. S ^XTMP(XTMP,NUM,0)=NOW_U_HLMSH772_U_HLMSHPRE_U_HLMSHPRS
. S ^XTMP(XTMP,NUM,1)=HLMSHPRO
;
; Grab all variables?
I STORE=2 D
. S X="^XTMP("""_XTMP_""","_NUM_","
. D DOLRO^%ZOSV
;
QUIT
;
SHOW N I773
F R !!,"Enter 773 IEN: ",I773:60 Q:I773'>0 D
. D SHOW773(I773)
QUIT
;
SHOW773(I773) ; Show Dynamic Routing MSH Field Reset Details
N DIV,MSH,N90,N91
;
S N90=$G(^HLMA(+I773,90)),N91=$G(^HLMA(+I773,91))
I (N90_N91)']"" D QUIT ;->
. W " no debug data found..."
;
S MSH=$G(^HLMA(+I773,"MSH",1,0)) QUIT:MSH']"" ;->
S DIV=$E(MSH,4)
;
W !!,$$CJ^XLFSTR(" 773 # "_I773_" ",IOM,"=")
;
D HDR(90,N90)
;
W !
D HDR(91,N91)
;
W !!,$E(MSH,1,IOM)
;
S C1=10,C2=30,C3=50
W !!,?C1,"Original (91)",?2,"Array (90)",?3,"MSH-Segment"
W !,$$REPEAT^XLFSTR("-",IOM)
D LINE("snd app",1,2,3)
D LINE("snd fac",3,3,4)
D LINE("rec app",5,4,5)
D LINE("rec fac",7,5,6)
;
QUIT
;
LINE(HDR,PCE1,PCE2,PCE3) ; Print one comparison line...
N P1,P2,P3,P4
S P1=$P(N91,U,PCE1),P2=$P(N90,U,PCE2),P3=$P(MSH,DIV,PCE3),P4=$P(N91,U,PCE1+1)
W !,HDR,":",?C1,P1,?2,P2,?3,P3,$S(P4]"":" ["_P4_"]",1:"")
QUIT
;
HDR(NUM,DATA) N TXT
S TXT=$S(NUM=90:"Array (90)",NUM=91:"Original (91)",1:"")
W !,$$CJ^XLFSTR("---------- "_TXT_" ----------",IOM)
W $$CJ^XLFSTR(DATA,IOM)
QUIT
;
SET(NEW,VAR,PCE) ; This subroutine performs these actions:
; (1) Resets variables used in MSH segment
; (2) Resets SERAPP and CLNTAPP in ^HLMA(#,0)
; (3) Sets HLMSH91 nodes if overwrite occurs by ARRAY value.
; If overwrite occurs by M code, the overwrite has already
; been recorded in HLMSH91. (An overwrite produced by M code
; is never overwritten by ARRAY data.)
;
N IEN771N,IEN771O,HLTCP
;
; VAR is the name of the variable, and not it's value...
S PRE=@VAR ; PRE is now the value of the VAR (pre-overwrite) variable...
;
; Tests whether anything was changed...
QUIT:NEW']"" ;-> No new value exists to change to...
QUIT:NEW=PRE ;-> New value = Original value. Nothing changed...
;
; THIS IS THE EPICENTER!! This is where the variables used in
; the MSH segment is overwritten.
S @VAR=NEW
;
; If PRE exists at this point, it was done by M code...
QUIT:$P(HLMSH91,U,PCE)]"" ;->
;
; Change was made, but not by M code. Must be by array...
S $P(HLMSH91,U,PCE)=PRE,$P(HLMSH91,U,PCE+1)="A"
;
; patch HL*1.6*122: for "^" as component separater
S $P(HLMSH91,U,PCE+2,999)=""
;
; Upgrade ^HLMA(#,0)...
QUIT:PCE'=1&(PCE'=5) ;->
;
; patch HL*1.6*108 start
;S IEN771O=$O(^HL(771,"B",PRE,0)) QUIT:IEN771O'>0 ;-> Orig IEN
;S IEN771N=$O(^HL(771,"B",NEW,0)) QUIT:IEN771N'>0 ;-> New IEN
S IEN771O=$O(^HL(771,"B",$E(PRE,1,30),0)) QUIT:IEN771O'>0 ;-> Orig IEN
S IEN771N=$O(^HL(771,"B",$E(NEW,1,30),0)) QUIT:IEN771N'>0 ;-> New IEN
; patch HL*1.6*108 end
;
QUIT:'IEN771O!('IEN771N)!(IEN771O=IEN771N) ;->
S HLTCP=1 ; So 773 is updated...
I PCE=1 D UPDATE^HLTF0(MTIENS,"","O","","",IEN771N)
I PCE=5 D UPDATE^HLTF0(MTIENS,"","O","",IEN771N)
;
QUIT
;
FIELDS ; Display the Protocol file fields used by the VistA HL7 package,
; when messages are received, to find the event and subscriber
; protocols.
N BY,DIC,DIOEND,L
;
D HD
;
W !
;
S L="",DIC="^ORD(101,",BY="[HL PROTOCOL MESSAGING FIELDS]"
S DIOEND="D EXPL^HLCSHDR4"
D EN1^DIP
;
Q
;
HD W @IOF,$$CJ^XLFSTR("HL7 Protocol Messaging Fields",IOM)
W !,$$REPEAT^XLFSTR("=",IOM)
W !,"This 'HL7 Protocol Messaging Fields' report holds information that will help"
W !,"you determine the effects from changes to routing-related fields in the MSH"
W !,"segment when messages are sent between or within VistA HL7 systems."
W !,"Additional explanation is included at the bottom of the report."
Q
;
EXPL N I,T QUIT:'$$EXPL1("Press RETURN for 'printout help', or '^' to exit... ") X "F I=1:1 S T=$T(EXPL+I) QUIT:T'["";;"" W !,$P(T,"";;"",2,99)" S I=$$EXPL1("Press RETURN to exit... ",1)
;;
;;When messages are received, their SENDING APPLICATION (MSH-3), MESSAGE
;;TYPE (MSH-9), EVENT TYPE (MSH-9), and HL7 VERSION (MSH-12) fields are used to
;;find the event driver protocol to be used in processing the just-received
;;message. After the event protocol is found, that protocol's subscriber
;;protocols are evaluated. The subscriber protocol with a RECEIVING
;;APPLICATION value that matches the RECEIVING APPLICATION field in the MSH
;;segment (MSH-5) is used.
;;
;;The first line for every "section" in the printout is the event driver
;;protocol. Lines preceded by dashes, are related subscriber protocols. An
;;example is shown below.
;;
;;Snd/Rec App's mTYP eTYP Ver Protocol Link
;;------------------------------------------------------------------------------
;;AC-VOICERAD ORU R01 2.3 | AC ORU SERVER
;;-AC-RADIOLOGY ORU R01 2.3 | AC ORU CLIENT NC TCP
;;
;;In this example, the 'AC-VOICERAD' line holds information for the 'AC ORU
;;SERVER' event protocol. And, the '-AC-RADIOLOGY' line holds information for
;;the 'AC ORU CLIENT' subscriber protocol.
Q
;
EXPL1(PMT,FF) ;
N DIR,DIRUT,DTOUT,DUOUT,X,Y
QUIT:$E($G(IOST),1,2)'="C-" 1 ;->
F X=1:1:$G(FF) W !
S DIR(0)="EA",DIR("A")=PMT
D ^DIR
QUIT $S(Y=1:1,1:"")
;
M ; Covered by Integration Agreement #3988
; Application developers may call here when creating new messages,
; when experimenting with M code to evaluate and conditionally change
; routing-related fields.
;
; This API is called immediately before the MSH segment is created.
N IOINHI,IOINORM,MSHOLD,MSHNEW,MSHPRE,X
;
S X="IOINHI;IOINORM" D ENDR^%ZISS
;
S MSHOLD=$$MSHBUILD(0),MSHPRE=$$MSHBUILD(1)
W !!,"The original MSH segment is...",!!,IOINHI,MSHOLD,IOINORM
I MSHPRE'=MSHOLD D
. W !!,"The MSH segment, after modification by passed-in data, is..."
. W !!,IOINHI,MSHPRE,IOINORM
;
D MVAR("SENDING APPLICATION","HLMSHSAN","SERAPP")
D MVAR("SENDING FACILITY","HLMSHSFN","SERFAC")
D MVAR("RECEIVING APPLICATION","HLMSHRAN","CLNTAPP")
D MVAR("RECEIVING FACILITY","HLMSHRFN","CLNTFAC")
;
S MSHNEW=$$MSHBUILD
I MSHNEW'=MSHPRE D
. W !!,"Before your changes above, the modified MSH segment was..."
. W !!,IOINHI,MSHPRE,IOINORM
. W !!,"After your changes, the MSH segment is..."
. W !!,IOINHI,MSHNEW,IOINORM
W !!,$$REPEAT^XLFSTR("-",IOM)
W !!,"Message being sent..."
W !
;
Q
;
MVAR(FLD,VAR,VARO) ; Generic resetting of variable...
;IOINHI,IOINORM -- req
N ANS
W !!,?4,"Protocol-derived value of ",FLD,": "
W IOINHI,@VARO,IOINORM
W !,"Passed-in value of ",FLD," (",VAR,"): "
W IOINHI,@VAR,IOINORM
W !,?10,"Enter new value for ",FLD,": "
R ANS:60 Q:'$T ;->
I ANS[U!(ANS']"") D
. W !!,?10,"No changes will be made..."
I ANS'[U&(ANS]"") D
. S @VAR=ANS
. W !!,?10,"The variable ",IOINHI,VAR,IOINORM
. W " will be changed to '",IOINHI,ANS,IOINORM,"'."
. W !,?10,"This value will be stored in the ",FLD
. W !,?10,"field in the MSH segment..."
. W !!,$$REPEAT^XLFSTR("-",IOM)
Q
;
MSHBUILD(TYPE) ; Build MSH using current variables...
N MSH,PCE,RAN,RFN,SAN,SFN
S MSH="MSH"_FS_EC
I $G(TYPE)=0 F PCE=SERAPP,SERFAC,CLNTAPP,CLNTFAC,HLDATE,SECURITY,MSGTYPE,HLID,HLPID,$P(PROT,U,9),"",$G(^HL(772,TXTP,1)),ACCACK,APPACK,CNTRY D
. S MSH=MSH_FS_PCE
I $G(TYPE)'=0 D
. S SAN=HLMSHSAN,SAN=$S(SAN]"":SAN,1:SERAPP)
. S SFN=HLMSHSFN,SFN=$S(SFN]"":SFN,1:SERFAC)
. S RAN=HLMSHRAN,RAN=$S(RAN]"":RAN,1:CLNTAPP)
. S RFN=HLMSHRFN,RFN=$S(RFN]"":RFN,1:CLNTFAC)
. F PCE=SAN,SFN,RAN,RFN,HLDATE,SECURITY,MSGTYPE,HLID,HLPID,$P(PROT,U,9),"",$G(^HL(772,TXTP,1)),ACCACK,APPACK,CNTRY D
. . S MSH=MSH_FS_PCE
QUIT MSH
;
EOR ;HLCSHDR4 - Reset MSH Segment Fields ;9/12/02 11:50
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HHLCSHDR4 8884 printed Oct 16, 2024@17:57:24 Page 2
HLCSHDR4 ;SFIRMFO/LJA - Reset MSH Segment Fields ;10/09/2007 15:05
+1 ;;1.6;HEALTH LEVEL SEVEN;**93,108,122**;Oct 13, 1995;Build 14
+2 ;Per VHA Directive 2004-038, this routine should not be modified
+3 ;
DEBUG(STORE) ; If HLP set up for debugging, capture VIEW...
+1 ; HLMSH773 -- req
+2 ;
+3 NEW NOW,NUM,VAR,VARS,X,XTMP
+4 ;
+5 ; 1=some, 2=all
+6 ;->
SET STORE=$SELECT(STORE=1:1,STORE=2:2,1:0)
if 'STORE
QUIT
+7 ;
+8 SET NOW=$$NOW^XLFDT
+9 ;
+10 SET XTMP="HLCSHDR3 "_HLMSH773
+11 if '$DATA(^XTMP(XTMP,0))
SET ^XTMP(XTMP,0)=$$FMADD^XLFDT(NOW,0,4)_U_NOW_U_"Debug data created by DEBUG~HLCSHDR4"
+12 ;
+13 SET NUM=$ORDER(^XTMP(XTMP,":"),-1)+1
+14 ;
+15 ; Grab only critical (some) variables?
+16 IF STORE=1
Begin DoDot:1
+17 +18 ; Sending information...
+19 SET ^XTMP(XTMP,NUM,"SA")=HLMSHSAO_U_HLSAN_U_HLMSHSAN
+20 SET ^XTMP(XTMP,NUM,"SF")=HLMSHSFO_U_HLSFN_U_HLMSHSFN
+21 +22 ; Receiving information...
+23 SET ^XTMP(XTMP,NUM,"RA")=HLMSHRAO_U_HLRAN_U_HLMSHRAN
+24 SET ^XTMP(XTMP,NUM,"RF")=HLMSHRFO_U_HLRFN_U_HLMSHRFN
+25 +26 ; Other information... (HLMSHPRE and HLMSHPRS hold 2 pieces!)
+27 SET ^XTMP(XTMP,NUM,0)=NOW_U_HLMSH772_U_HLMSHPRE_U_HLMSHPRS
+28 SET ^XTMP(XTMP,NUM,1)=HLMSHPRO
End DoDot:1
+29 ;
+30 ; Grab all variables?
+31 IF STORE=2
Begin DoDot:1
+32 SET X="^XTMP("""_XTMP_""","_NUM_","
+33 DO DOLRO^%ZOSV
End DoDot:1
+34 ;
+35 QUIT
+36 ;
SHOW NEW I773
+1 FOR
READ !!,"Enter 773 IEN: ",I773:60
if I773'>0
QUIT
Begin DoDot:1
+2 DO SHOW773(I773)
End DoDot:1
+3 QUIT
+4 ;
SHOW773(I773) ; Show Dynamic Routing MSH Field Reset Details
+1 NEW DIV,MSH,N90,N91
+2 ;
+3 SET N90=$GET(^HLMA(+I773,90))
SET N91=$GET(^HLMA(+I773,91))
+4 ;->
IF (N90_N91)']""
Begin DoDot:1
+5 WRITE " no debug data found..."
End DoDot:1
QUIT
+6 ;
+7 ;->
SET MSH=$GET(^HLMA(+I773,"MSH",1,0))
if MSH']""
QUIT
+8 SET DIV=$EXTRACT(MSH,4)
+9 ;
+10 WRITE !!,$$CJ^XLFSTR(" 773 # "_I773_" ",IOM,"=")
+11 ;
+12 DO HDR(90,N90)
+13 ;
+14 WRITE !
+15 DO HDR(91,N91)
+16 ;
+17 WRITE !!,$EXTRACT(MSH,1,IOM)
+18 ;
+19 SET C1=10
SET C2=30
SET C3=50
+20 WRITE !!,?C1,"Original (91)",?2,"Array (90)",?3,"MSH-Segment"
+21 WRITE !,$$REPEAT^XLFSTR("-",IOM)
+22 DO LINE("snd app",1,2,3)
+23 DO LINE("snd fac",3,3,4)
+24 DO LINE("rec app",5,4,5)
+25 DO LINE("rec fac",7,5,6)
+26 ;
+27 QUIT
+28 ;
LINE(HDR,PCE1,PCE2,PCE3) ; Print one comparison line...
+1 NEW P1,P2,P3,P4
+2 SET P1=$PIECE(N91,U,PCE1)
SET P2=$PIECE(N90,U,PCE2)
SET P3=$PIECE(MSH,DIV,PCE3)
SET P4=$PIECE(N91,U,PCE1+1)
+3 WRITE !,HDR,":",?C1,P1,?2,P2,?3,P3,$SELECT(P4]"":" ["_P4_"]",1:"")
+4 QUIT
+5 ;
HDR(NUM,DATA) NEW TXT
+1 SET TXT=$SELECT(NUM=90:"Array (90)",NUM=91:"Original (91)",1:"")
+2 WRITE !,$$CJ^XLFSTR("---------- "_TXT_" ----------",IOM)
+3 WRITE $$CJ^XLFSTR(DATA,IOM)
+4 QUIT
+5 ;
SET(NEW,VAR,PCE) ; This subroutine performs these actions:
+1 ; (1) Resets variables used in MSH segment
+2 ; (2) Resets SERAPP and CLNTAPP in ^HLMA(#,0)
+3 ; (3) Sets HLMSH91 nodes if overwrite occurs by ARRAY value.
+4 ; If overwrite occurs by M code, the overwrite has already
+5 ; been recorded in HLMSH91. (An overwrite produced by M code
+6 ; is never overwritten by ARRAY data.)
+7 ;
+8 NEW IEN771N,IEN771O,HLTCP
+9 ;
+10 ; VAR is the name of the variable, and not it's value...
+11 ; PRE is now the value of the VAR (pre-overwrite) variable...
SET PRE=@VAR
+12 ;
+13 ; Tests whether anything was changed...
+14 ;-> No new value exists to change to...
if NEW']""
QUIT
+15 ;-> New value = Original value. Nothing changed...
if NEW=PRE
QUIT
+16 ;
+17 ; THIS IS THE EPICENTER!! This is where the variables used in
+18 ; the MSH segment is overwritten.
+19 SET @VAR=NEW
+20 ;
+21 ; If PRE exists at this point, it was done by M code...
+22 ;->
if $PIECE(HLMSH91,U,PCE)]""
QUIT
+23 ;
+24 ; Change was made, but not by M code. Must be by array...
+25 SET $PIECE(HLMSH91,U,PCE)=PRE
SET $PIECE(HLMSH91,U,PCE+1)="A"
+26 ;
+27 ; patch HL*1.6*122: for "^" as component separater
+28 SET $PIECE(HLMSH91,U,PCE+2,999)=""
+29 ;
+30 ; Upgrade ^HLMA(#,0)...
+31 ;->
if PCE'=1&(PCE'=5)
QUIT
+32 ;
+33 ; patch HL*1.6*108 start
+34 ;S IEN771O=$O(^HL(771,"B",PRE,0)) QUIT:IEN771O'>0 ;-> Orig IEN
+35 ;S IEN771N=$O(^HL(771,"B",NEW,0)) QUIT:IEN771N'>0 ;-> New IEN
+36 ;-> Orig IEN
SET IEN771O=$ORDER(^HL(771,"B",$EXTRACT(PRE,1,30),0))
if IEN771O'>0
QUIT
+37 ;-> New IEN
SET IEN771N=$ORDER(^HL(771,"B",$EXTRACT(NEW,1,30),0))
if IEN771N'>0
QUIT
+38 ; patch HL*1.6*108 end
+39 ;
+40 ;->
if 'IEN771O!('IEN771N)!(IEN771O=IEN771N)
QUIT
+41 ; So 773 is updated...
SET HLTCP=1
+42 IF PCE=1
DO UPDATE^HLTF0(MTIENS,"","O","","",IEN771N)
+43 IF PCE=5
DO UPDATE^HLTF0(MTIENS,"","O","",IEN771N)
+44 ;
+45 QUIT
+46 ;
FIELDS ; Display the Protocol file fields used by the VistA HL7 package,
+1 ; when messages are received, to find the event and subscriber
+2 ; protocols.
+3 NEW BY,DIC,DIOEND,L
+4 ;
+5 DO HD
+6 ;
+7 WRITE !
+8 ;
+9 SET L=""
SET DIC="^ORD(101,"
SET BY="[HL PROTOCOL MESSAGING FIELDS]"
+10 SET DIOEND="D EXPL^HLCSHDR4"
+11 DO EN1^DIP
+12 ;
+13 QUIT
+14 ;
HD WRITE @IOF,$$CJ^XLFSTR("HL7 Protocol Messaging Fields",IOM)
+1 WRITE !,$$REPEAT^XLFSTR("=",IOM)
+2 WRITE !,"This 'HL7 Protocol Messaging Fields' report holds information that will help"
+3 WRITE !,"you determine the effects from changes to routing-related fields in the MSH"
+4 WRITE !,"segment when messages are sent between or within VistA HL7 systems."
+5 WRITE !,"Additional explanation is included at the bottom of the report."
+6 QUIT
+7 ;
EXPL NEW I,T
if '$$EXPL1("Press RETURN for 'printout help', or '^' to exit... ")
QUIT
XECUTE "F I=1:1 S T=$T(EXPL+I) QUIT:T'["";;"" W !,$P(T,"";;"",2,99)"
SET I=$$EXPL1("Press RETURN to exit... ",1)
+1 ;;
+2 ;;When messages are received, their SENDING APPLICATION (MSH-3), MESSAGE
+3 ;;TYPE (MSH-9), EVENT TYPE (MSH-9), and HL7 VERSION (MSH-12) fields are used to
+4 ;;find the event driver protocol to be used in processing the just-received
+5 ;;message. After the event protocol is found, that protocol's subscriber
+6 ;;protocols are evaluated. The subscriber protocol with a RECEIVING
+7 ;;APPLICATION value that matches the RECEIVING APPLICATION field in the MSH
+8 ;;segment (MSH-5) is used.
+9 ;;
+10 ;;The first line for every "section" in the printout is the event driver
+11 ;;protocol. Lines preceded by dashes, are related subscriber protocols. An
+12 ;;example is shown below.
+13 ;;
+14 ;;Snd/Rec App's mTYP eTYP Ver Protocol Link
+15 ;;------------------------------------------------------------------------------
+16 ;;AC-VOICERAD ORU R01 2.3 | AC ORU SERVER
+17 ;;-AC-RADIOLOGY ORU R01 2.3 | AC ORU CLIENT NC TCP
+18 ;;
+19 ;;In this example, the 'AC-VOICERAD' line holds information for the 'AC ORU
+20 ;;SERVER' event protocol. And, the '-AC-RADIOLOGY' line holds information for
+21 ;;the 'AC ORU CLIENT' subscriber protocol.
+22 QUIT
+23 ;
EXPL1(PMT,FF) ;
+1 NEW DIR,DIRUT,DTOUT,DUOUT,X,Y
+2 ;->
if $EXTRACT($GET(IOST),1,2)'="C-"
QUIT 1
+3 FOR X=1:1:$GET(FF)
WRITE !
+4 SET DIR(0)="EA"
SET DIR("A")=PMT
+5 DO ^DIR
+6 QUIT $SELECT(Y=1:1,1:"")
+7 ;
M ; Covered by Integration Agreement #3988
+1 ; Application developers may call here when creating new messages,
+2 ; when experimenting with M code to evaluate and conditionally change
+3 ; routing-related fields.
+4 ;
+5 ; This API is called immediately before the MSH segment is created.
+6 NEW IOINHI,IOINORM,MSHOLD,MSHNEW,MSHPRE,X
+7 ;
+8 SET X="IOINHI;IOINORM"
DO ENDR^%ZISS
+9 ;
+10 SET MSHOLD=$$MSHBUILD(0)
SET MSHPRE=$$MSHBUILD(1)
+11 WRITE !!,"The original MSH segment is...",!!,IOINHI,MSHOLD,IOINORM
+12 IF MSHPRE'=MSHOLD
Begin DoDot:1
+13 WRITE !!,"The MSH segment, after modification by passed-in data, is..."
+14 WRITE !!,IOINHI,MSHPRE,IOINORM
End DoDot:1
+15 ;
+16 DO MVAR("SENDING APPLICATION","HLMSHSAN","SERAPP")
+17 DO MVAR("SENDING FACILITY","HLMSHSFN","SERFAC")
+18 DO MVAR("RECEIVING APPLICATION","HLMSHRAN","CLNTAPP")
+19 DO MVAR("RECEIVING FACILITY","HLMSHRFN","CLNTFAC")
+20 ;
+21 SET MSHNEW=$$MSHBUILD
+22 IF MSHNEW'=MSHPRE
Begin DoDot:1
+23 WRITE !!,"Before your changes above, the modified MSH segment was..."
+24 WRITE !!,IOINHI,MSHPRE,IOINORM
+25 WRITE !!,"After your changes, the MSH segment is..."
+26 WRITE !!,IOINHI,MSHNEW,IOINORM
End DoDot:1
+27 WRITE !!,$$REPEAT^XLFSTR("-",IOM)
+28 WRITE !!,"Message being sent..."
+29 WRITE !
+30 ;
+31 QUIT
+32 ;
MVAR(FLD,VAR,VARO) ; Generic resetting of variable...
+1 ;IOINHI,IOINORM -- req
+2 NEW ANS
+3 WRITE !!,?4,"Protocol-derived value of ",FLD,": "
+4 WRITE IOINHI,@VARO,IOINORM
+5 WRITE !,"Passed-in value of ",FLD," (",VAR,"): "
+6 WRITE IOINHI,@VAR,IOINORM
+7 WRITE !,?10,"Enter new value for ",FLD,": "
+8 ;->
READ ANS:60
if '$TEST
QUIT
+9 IF ANS[U!(ANS']"")
Begin DoDot:1
+10 WRITE !!,?10,"No changes will be made..."
End DoDot:1
+11 IF ANS'[U&(ANS]"")
Begin DoDot:1
+12 SET @VAR=ANS
+13 WRITE !!,?10,"The variable ",IOINHI,VAR,IOINORM
+14 WRITE " will be changed to '",IOINHI,ANS,IOINORM,"'."
+15 WRITE !,?10,"This value will be stored in the ",FLD
+16 WRITE !,?10,"field in the MSH segment..."
+17 WRITE !!,$$REPEAT^XLFSTR("-",IOM)
End DoDot:1
+18 QUIT
+19 ;
MSHBUILD(TYPE) ; Build MSH using current variables...
+1 NEW MSH,PCE,RAN,RFN,SAN,SFN
+2 SET MSH="MSH"_FS_EC
+3 IF $GET(TYPE)=0
FOR PCE=SERAPP,SERFAC,CLNTAPP,CLNTFAC,HLDATE,SECURITY,MSGTYPE,HLID,HLPID,$PIECE(PROT,U,9),"",$GET(^HL(772,TXTP,1)),ACCACK,APPACK,CNTRY
Begin DoDot:1
+4 SET MSH=MSH_FS_PCE
End DoDot:1
+5 IF $GET(TYPE)'=0
Begin DoDot:1
+6 SET SAN=HLMSHSAN
SET SAN=$SELECT(SAN]"":SAN,1:SERAPP)
+7 SET SFN=HLMSHSFN
SET SFN=$SELECT(SFN]"":SFN,1:SERFAC)
+8 SET RAN=HLMSHRAN
SET RAN=$SELECT(RAN]"":RAN,1:CLNTAPP)
+9 SET RFN=HLMSHRFN
SET RFN=$SELECT(RFN]"":RFN,1:CLNTFAC)
+10 FOR PCE=SAN,SFN,RAN,RFN,HLDATE,SECURITY,MSGTYPE,HLID,HLPID,$PIECE(PROT,U,9),"",$GET(^HL(772,TXTP,1)),ACCACK,APPACK,CNTRY
Begin DoDot:2
+11 SET MSH=MSH_FS_PCE
End DoDot:2
End DoDot:1
+12 QUIT MSH
+13 ;
EOR ;HLCSHDR4 - Reset MSH Segment Fields ;9/12/02 11:50