| 1 | XWB2HL7A ;;ISF/AC - Remote RPCs via HL7. ;03/14/2000 00:36
|
---|
| 2 | ;;1.1;RPC BROKER;**12**;Mar 28, 1997
|
---|
| 3 | RPCINFO ;RPC Information
|
---|
| 4 | ;Msg Type: SPQ - stored procedure request (event Q01)
|
---|
| 5 | ;--------------
|
---|
| 6 | ;MSH Message Header
|
---|
| 7 | ;SPR Store Procedure Request
|
---|
| 8 | ; Query Tag^Query/Response Format Code^Stored Proc Name^Param List
|
---|
| 9 | ;[ RDF ] Table Row Definition
|
---|
| 10 | ; # of Columns per Row^Column Description
|
---|
| 11 | ;[ DSC ] Continuation Pointer
|
---|
| 12 | ;--------------
|
---|
| 13 | ;Response Msg Type: TBR - tabular data response
|
---|
| 14 | ;--------------
|
---|
| 15 | ;MSH Message Header
|
---|
| 16 | ;MSA Message Acknowledgment
|
---|
| 17 | ;[ERR] Error
|
---|
| 18 | ;QAK Query Acknowledgment
|
---|
| 19 | ;RDF Table Row Definition
|
---|
| 20 | ; # of Columns per Row^Column Description
|
---|
| 21 | ;{ RDT } Table Row Data
|
---|
| 22 | ; Column Value
|
---|
| 23 | ;[ DSC ] Continuation Pointer
|
---|
| 24 | ;-------------
|
---|
| 25 | DIRECT(XWB2SPN,XWB2HNDL,XWB2RET,XWB2DEST,XWB2PRAM,XWB2PARY) ;DIR RPC CALL
|
---|
| 26 | N XWB2DRCT
|
---|
| 27 | S XWB2DRCT=1
|
---|
| 28 | G D2
|
---|
| 29 | ;
|
---|
| 30 | ;-------------
|
---|
| 31 | ;This is where the RPC calls to send the RPC to the remote system
|
---|
| 32 | ;(procedurename, query tag, error return, destination, Parameter array)
|
---|
| 33 | CALL(XWB2SPN,XWB2HNDL,XWB2RET,XWB2DEST,XWB2PRAM,XWB2PARY) ;RPC CALL
|
---|
| 34 | ;
|
---|
| 35 | D2 N I,J,HL,HLA,HLL,XWB2LSTI,HLERR,XWB2EMAP,XWB2FLD,XWB2LPRM,XWB2MAP2,XWB2PARM,XWB2QTAG,XWB2SPRL,XWB2SPR,XWB2X,XWB2EID,XWB2MIEN,XWB2OVFL,XWB2RSLT,Y
|
---|
| 36 | S XWB2QTAG=$G(XWB2HNDL)
|
---|
| 37 | S XWB2SPN=$G(XWB2SPN)
|
---|
| 38 | S XWB2FLD="@SPR.4.2"
|
---|
| 39 | S (XWB2RET,XWB2PARM)=""
|
---|
| 40 | D BLDDIST($G(XWB2DEST))
|
---|
| 41 | I '$O(HLL("LINKS",0)) S $P(XWB2RET,"^",2,3)="-1^Station # not found" Q
|
---|
| 42 | S XWB2EID=+$$FIND1^DIC(101,,"MX","XWB RPC EVENT")
|
---|
| 43 | I 'XWB2EID S $P(XWB2RET,"^",2,3)="-1^RPC Broker Protocol not setup" Q
|
---|
| 44 | D INIT^HLFNC2(.XWB2EID,.HL)
|
---|
| 45 | I $O(HL(""))']"" S $P(XWB2RET,"^",2,3)="-1^RPC Broker Params not setup" Q
|
---|
| 46 | ;XWB2EMAP=encoding characters to map by order.
|
---|
| 47 | ;XWB2MAP2=escaped characters used for mapping encoding characters.
|
---|
| 48 | S Y=""
|
---|
| 49 | F I=3,0,1,2,4 S Y=Y_$S(I:$E(HL("ECH"),I),1:HL("FS"))
|
---|
| 50 | S XWB2EMAP=Y,XWB2MAP2="EFSRT"
|
---|
| 51 | F I=0:0 S I=$O(XWB2PRAM(I)) Q:I'>0!$P(XWB2RET,"^",2) D
|
---|
| 52 | .I $L(XWB2PRAM(I))>255 S $P(XWB2RET,"^",2,3)="-1^RPC Parameter(s) exceed length of 255." Q
|
---|
| 53 | .S XWB2PRAM(I)=$$XLATE(XWB2PRAM(I),.XWB2OVFL)
|
---|
| 54 | .S J=0
|
---|
| 55 | .I $O(XWB2OVFL(0)) D K XWB2OVFL
|
---|
| 56 | ..F K=1,2 I $D(XWB2OVFL(K)) D
|
---|
| 57 | ...S XWB2PRAM(I,(K/10))=XWB2OVFL(1)
|
---|
| 58 | ...S J=(K/10) K XWB2OVFL(K)
|
---|
| 59 | .F S J=$O(XWB2PRAM(I,J)) Q:J'>0!$P(XWB2RET,"^",2) D
|
---|
| 60 | ..I $L(XWB2PRAM(I))>255 S $P(XWB2RET,"^",2,3)="-1^RPC Parameter(s) exceed length of 255." Q
|
---|
| 61 | ..S XWB2PRAM(I,J)=$$XLATE(XWB2PRAM(I,J),.XWB2OVFL)
|
---|
| 62 | ..I $O(XWB2OVFL(0)) D K XWB2OVFL
|
---|
| 63 | ...F K=1,2 I $D(XWB2OVFL(K)) D
|
---|
| 64 | ....S XWB2PRAM(I,J+(K/10))=XWB2OVFL(1)
|
---|
| 65 | ....S J=J+(K/10) K XWB2OVFL(K)
|
---|
| 66 | I $P(XWB2RET,"^",2) Q
|
---|
| 67 | D RPCSEND
|
---|
| 68 | M XWB2RET=XWB2RSLT ;Move the return info into return var.
|
---|
| 69 | CALLXIT ;Cleanup before exit.
|
---|
| 70 | Q
|
---|
| 71 | ;
|
---|
| 72 | RPCSEND ;
|
---|
| 73 | N I,J
|
---|
| 74 | S HLA("HLS",1)="SPR"_HL("FS")_XWB2QTAG_HL("FS")_"T"_HL("FS")_XWB2SPN_HL("FS")_XWB2FLD_$E(HL("ECH"))
|
---|
| 75 | S XWB2SPRL=$L(HLA("HLS",1)),XWB2SPR=$NA(HLA("HLS",1))
|
---|
| 76 | S I=$O(XWB2PRAM(0)) Q:I'>0 D
|
---|
| 77 | .S XWB2LSTI=I,XWB2X=XWB2PRAM(I)
|
---|
| 78 | .I (XWB2SPRL+$L(XWB2X))>255!$O(XWB2PRAM(I,0)) D NXTNODE
|
---|
| 79 | .S @XWB2SPR=@XWB2SPR_XWB2X,XWB2SPRL=$L(@XWB2SPR)
|
---|
| 80 | .F J=0:0 S J=$O(XWB2PRAM(I,J)) Q:J'>0 D
|
---|
| 81 | ..S XWB2X=XWB2PRAM(I,J)
|
---|
| 82 | ..D NXTNODE
|
---|
| 83 | ..S @XWB2SPR=@XWB2SPR_XWB2X,XWB2SPRL=$L(@XWB2SPR)
|
---|
| 84 | ..Q
|
---|
| 85 | F S I=$O(XWB2PRAM(I)) Q:I'>0 D
|
---|
| 86 | .S XWB2X=XWB2PRAM(I)
|
---|
| 87 | .I (XWB2SPRL+$L(XWB2X)+1)>255!$O(XWB2PRAM(I,0)) D NXTNODE
|
---|
| 88 | .S @XWB2SPR=@XWB2SPR_$E(HL("ECH"),4)_XWB2X,XWB2SPRL=$L(@XWB2SPR)
|
---|
| 89 | .F J=0:0 S J=$O(XWB2PRAM(I,J)) Q:J'>0 D
|
---|
| 90 | ..S XWB2X=XWB2PRAM(I,J)
|
---|
| 91 | ..D NXTNODE
|
---|
| 92 | ..S @XWB2SPR=@XWB2SPR_XWB2X,XWB2SPRL=$L(@XWB2SPR)
|
---|
| 93 | ..Q
|
---|
| 94 | S HLA("HLS",2)="RDF"_HL("FS")_"1"_HL("FS")_"@DSP.3"_$E(HL("ECH"))_"TX"_$E(HL("ECH"))_"300"
|
---|
| 95 | I $D(XWB2DRCT) D DIRECT^HLMA(XWB2EID,"LM",1,.XWB2RSLT) Q
|
---|
| 96 | D GENERATE^HLMA(XWB2EID,"LM",1,.XWB2RSLT,.XWB2MIEN)
|
---|
| 97 | Q
|
---|
| 98 | ;
|
---|
| 99 | NXTNODE ;Get next node
|
---|
| 100 | N XWB2QL,XWB2QS
|
---|
| 101 | S XWB2QL=$QL($NA(@XWB2SPR))
|
---|
| 102 | I XWB2QL=2 S XWB2SPR=$NA(@XWB2SPR@(1)),@XWB2SPR="" Q
|
---|
| 103 | I XWB2QL=3 D Q
|
---|
| 104 | .S XWB2QS=+$QS($NA(@XWB2SPR),3)+1
|
---|
| 105 | .S XWB2SPR=$NA(@$NA(@XWB2SPR,2)@(XWB2QS)),@XWB2SPR=""
|
---|
| 106 | Q
|
---|
| 107 | ;
|
---|
| 108 | ;
|
---|
| 109 | BLDDIST(X) ;Build distribution list -- HLL("LINKS") ARRAY.
|
---|
| 110 | N %,XWB2LIST
|
---|
| 111 | D LINK^HLUTIL3(X,.XWB2LIST,"I")
|
---|
| 112 | S %=+$O(XWB2LIST(0)) Q:'%
|
---|
| 113 | S HLL("LINKS",1)="XWB RPC SUBSCRIBER"_U_XWB2LIST(%)
|
---|
| 114 | Q
|
---|
| 115 | XLATE(X,%) ;TRANSLATE FS and Encoding characters to Formating codes.
|
---|
| 116 | ;
|
---|
| 117 | N I,I1,I2,L,L1,L2,LCNT,LOVFL,LS,X1,X2,Y
|
---|
| 118 | S X(0)=X
|
---|
| 119 | F I=0:1:2 S L=0 D Q:L'>255
|
---|
| 120 | .S LS=$L(X(I))
|
---|
| 121 | .F I1=1:1:5 S X1=$E(XWB2EMAP,I1),X2=$E(XWB2MAP2,I1) S L=L+(($L(X(I),X1)-1)*2)
|
---|
| 122 | .S L=L+LS
|
---|
| 123 | .I L>255 D
|
---|
| 124 | ..S LOVFL=L-255
|
---|
| 125 | ..S L1=(LS+1)-$S(LOVFL<170:LOVFL,1:170)
|
---|
| 126 | ..S L1=$S(L1<86:86,1:L1)
|
---|
| 127 | ..S L2=LS-$S(LOVFL<170:LOVFL,1:170)
|
---|
| 128 | ..S L2=$S(L2>85:L2,1:85)
|
---|
| 129 | ..S X(I+1)=$E(X(I),L1,LS)
|
---|
| 130 | ..S X(I)=$E(X(I),1,L2)
|
---|
| 131 | ;
|
---|
| 132 | S %(0)=X(0)
|
---|
| 133 | F I2=0:1:2 Q:'$D(X(I2)) S X=X(I2) D
|
---|
| 134 | .S Y=""
|
---|
| 135 | .F I1=1:1:5 S X1=$E(XWB2EMAP,I1),X2=$E(XWB2MAP2,I1) D
|
---|
| 136 | ..S LS=$L(X)
|
---|
| 137 | ..S L=$L(X,X1)
|
---|
| 138 | ..I L>1 D
|
---|
| 139 | ...F I=1:1:L S Y=Y_$P(X,X1,I)_$S(I'=L:$$ECODE(X2),1:"")
|
---|
| 140 | ...S X=Y,Y=""
|
---|
| 141 | .S %(I2)=X
|
---|
| 142 | S Y=%(0) K %(0)
|
---|
| 143 | Q Y
|
---|
| 144 | ECODE(X) ;
|
---|
| 145 | N Y
|
---|
| 146 | S Y=$E(HL("ECH"),3)_X_$E(HL("ECH"),3)
|
---|
| 147 | Q Y
|
---|
| 148 | ;
|
---|