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 | ;
|
---|