1 | HLOASUB1 ;IRMFO-ALB/CJM - Subscription Registry (continued) ;02/26/2007
|
---|
2 | ;;1.6;HEALTH LEVEL SEVEN;**126,134**;Oct 13, 1995;Build 30
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | INDEX(IEN,PARMARY) ;
|
---|
6 | ;Allows an application to optionally index its subscriptions.
|
---|
7 | ;so that it can find find them without storing the ien.
|
---|
8 | ;
|
---|
9 | ;Input:
|
---|
10 | ; IEN - ien of the entry
|
---|
11 | ; PARMARY (pass by reference) An array of up to 6 lookup values with
|
---|
12 | ;which to build the index. The format is: PARMARY(1)=<first parameter>,
|
---|
13 | ; up to PARMARY(6)
|
---|
14 | ;Output:
|
---|
15 | ; function returns 1 on success, 0 otherwise
|
---|
16 | ; PARMARY - left undefined
|
---|
17 | ;
|
---|
18 | N OWNER,I,NODE
|
---|
19 | Q:'$G(IEN) 0
|
---|
20 | S OWNER=$P($G(^HLD(779.4,IEN,0)),"^",2)
|
---|
21 | Q:'$L(OWNER) 0
|
---|
22 | D KILLAH(IEN)
|
---|
23 | F I=1:1:6 S:'$L($G(PARMARY(I))) PARMARY(I)=" "
|
---|
24 | D SETAH(IEN,OWNER,.PARMARY)
|
---|
25 | S NODE=""
|
---|
26 | F I=1:1:6 S NODE=NODE_$G(PARMARY(I))_"^"
|
---|
27 | S ^HLD(779.4,IEN,3)=NODE
|
---|
28 | K PARMARY
|
---|
29 | Q 1
|
---|
30 | ;
|
---|
31 | SETAH(IEN,OWNER,PARMS) ;
|
---|
32 | Q:'$G(IEN)
|
---|
33 | Q:'$L($G(OWNER))
|
---|
34 | N INDEX
|
---|
35 | S INDEX="^HLD(779.4,""AH"",OWNER,"
|
---|
36 | F I=1:1:6 D
|
---|
37 | .S:'$L($G(PARMS(I))) PARMS(I)=" "
|
---|
38 | .S INDEX=INDEX_""""_PARMS(I)_""","
|
---|
39 | S INDEX=$E(INDEX,1,$L(INDEX)-1)_")"
|
---|
40 | S @INDEX=IEN
|
---|
41 | Q
|
---|
42 | ;
|
---|
43 | SETAH1(DA,OWNER,X1,X2,X3,X4,X5,X6) ;
|
---|
44 | Q:'$G(DA)
|
---|
45 | Q:'$L($G(OWNER))
|
---|
46 | N PARMS,I
|
---|
47 | F I=1:1:6 I $L($G(@("X"_I))) S PARMS(I)=@("X"_I)
|
---|
48 | D SETAH(DA,OWNER,.PARMS)
|
---|
49 | Q
|
---|
50 | ;
|
---|
51 | KILLAH1(OWNER,LOOKUP1,LOOKUP2,LOOKUP3,LOOKUP4,LOOKUP5,LOOKUP6) ;
|
---|
52 | Q:'$L(OWNER)
|
---|
53 | N I,INDEX
|
---|
54 | S INDEX="^HLD(779.4,""AH"",OWNER"
|
---|
55 | F I=1:1:6 D
|
---|
56 | .S:'$L($G(@("LOOKUP"_I))) @("LOOKUP"_I)=" "
|
---|
57 | .S INDEX=INDEX_","_""""_@("LOOKUP"_I)_""""
|
---|
58 | S INDEX=INDEX_")"
|
---|
59 | K @INDEX
|
---|
60 | Q
|
---|
61 | ;
|
---|
62 | KILLAH(IEN) ;kills the AH x~ref on file 779.4 for a particular subscription registry entry=ien
|
---|
63 | Q:'$G(IEN)
|
---|
64 | N OWNER,X1,X2,X3,X4,X5,X6,I,NODE
|
---|
65 | S OWNER=$P($G(^HLD(779.4,IEN,0)),"^",2)
|
---|
66 | Q:'$L(OWNER)
|
---|
67 | S NODE=$G(^HLD(779.4,IEN,3))
|
---|
68 | F I=1:1:6 I $L($P(NODE,"^",I)) S @("X"_I)=$P(NODE,"^",I)
|
---|
69 | D KILLAH1(OWNER,.X1,.X2,.X3,.X4,.X5,.X6)
|
---|
70 | Q
|
---|
71 | ;
|
---|
72 | FIND(OWNER,PARMARY) ;
|
---|
73 | ;Allows an application to find a subscription
|
---|
74 | ;list. The application must maintain a private index in order to
|
---|
75 | ;utilize this function, via $$INDEX^HLOASUB()
|
---|
76 | ;
|
---|
77 | ;Input:
|
---|
78 | ; OWNER - owning application name
|
---|
79 | ; PARMARY **pass by reference** an array of up to 6 lookup value with which the index was built. The format is: PARMARY(1)=<first parameter>, PARMARY(2)=<second parameter> If PARMARY(i)=null, the parameter will be ignored
|
---|
80 | ;Output:
|
---|
81 | ; function returns the ien of the subscription list if found, 0 otherwise
|
---|
82 | ; PARMARY - left undefined
|
---|
83 | ;
|
---|
84 | N OK S OK=0
|
---|
85 | ;
|
---|
86 | D
|
---|
87 | .Q:'$D(PARMARY)
|
---|
88 | .Q:'$L($G(OWNER))
|
---|
89 | .N INDEX,I
|
---|
90 | .S INDEX="^HLD(779.4,""AH"",OWNER"
|
---|
91 | .F I=1:1:6 D
|
---|
92 | ..S:'$L($G(PARMARY(I))) PARMARY(I)=" "
|
---|
93 | ..S INDEX=INDEX_","_""""_PARMARY(I)_""""
|
---|
94 | .S INDEX=INDEX_")"
|
---|
95 | .S OK=+$G(@INDEX)
|
---|
96 | K PARMARY
|
---|
97 | Q OK
|
---|
98 | ;
|
---|
99 | UPD(FILE,DA,DATA,ERROR) ;File data into an existing record.
|
---|
100 | ; Input:
|
---|
101 | ; FILE - File or sub-file number
|
---|
102 | ; DA - Traditional DA array, with same meaning.
|
---|
103 | ; Pass by reference.
|
---|
104 | ; DATA - Data array to file (pass by reference)
|
---|
105 | ; Format: DATA(<field #>)=<value>
|
---|
106 | ;
|
---|
107 | ; Output:
|
---|
108 | ; Function Value - 0=error and 1=no error
|
---|
109 | ; ERROR - optional error message - if needed, pass by reference
|
---|
110 | ;
|
---|
111 | ; Example: To update a record in subfile 2.0361 in record with ien=353,
|
---|
112 | ; subrecord ien=68, with the field .01 value = 21:
|
---|
113 | ; S DATA(.01)=21,DA=68,DA(1)=353 I $$UPD(2.0361,.DA,.DATA,.ERROR) W !,"DONE"
|
---|
114 | ;
|
---|
115 | N FDA,FIELD,IENS,ERRORS
|
---|
116 | ;
|
---|
117 | ;IENS - Internal Entry Number String defined by FM
|
---|
118 | ;FDA - the FDA array as defined by FM
|
---|
119 | ;
|
---|
120 | I '$G(DA) S ERROR="IEN OF RECORD TO BE UPDATED NOT SPECIFIED" Q 0
|
---|
121 | S IENS=$$IENS^DILF(.DA)
|
---|
122 | S FIELD=0
|
---|
123 | F S FIELD=$O(DATA(FIELD)) Q:'FIELD D
|
---|
124 | .S FDA(FILE,IENS,FIELD)=$G(DATA(FIELD))
|
---|
125 | D FILE^DIE("","FDA","ERRORS(1)")
|
---|
126 | I +$G(DIERR) D
|
---|
127 | .S ERROR=$G(ERRORS(1,"DIERR",1,"TEXT",1))
|
---|
128 | E D
|
---|
129 | .S ERROR=""
|
---|
130 | ;
|
---|
131 | D CLEAN^DILF
|
---|
132 | Q $S(+$G(DIERR):0,1:1)
|
---|
133 | ;
|
---|
134 | ADD(FILE,DA,DATA,ERROR,IEN) ;
|
---|
135 | ;Description: Creates a new record and files the data.
|
---|
136 | ; Input:
|
---|
137 | ; FILE - File or sub-file number
|
---|
138 | ; DA - Traditional FileMan DA array with same
|
---|
139 | ; meaning. Pass by reference. Only needed if adding to a
|
---|
140 | ; subfile.
|
---|
141 | ; DATA - Data array to file, pass by reference
|
---|
142 | ; Format: DATA(<field #>)=<value>
|
---|
143 | ; IEN - internal entry number to use (optional)
|
---|
144 | ;
|
---|
145 | ; Output:
|
---|
146 | ; Function Value - If no error then it returns the ien of the created record, else returns NULL.
|
---|
147 | ; DA - returns the ien of the new record, NULL if none created. If needed, pass by reference.
|
---|
148 | ; ERROR - optional error message - if needed, pass by reference
|
---|
149 | ;
|
---|
150 | ; Example: To add a record in subfile 2.0361 in the record with ien=353
|
---|
151 | ; with the field .01 value = 21:
|
---|
152 | ; S DATA(.01)=21,DA(1)=353 I $$ADD(2.0361,.DA,.DATA) W !,"DONE"
|
---|
153 | ;
|
---|
154 | ; Example: If creating a record not in a subfile, would look like this:
|
---|
155 | ; S DATA(.01)=21 I $$ADD(867,,.DATA) W !,"DONE"
|
---|
156 | ;
|
---|
157 | N FDA,FIELD,IENA,IENS,ERRORS
|
---|
158 | ;
|
---|
159 | ;IENS - Internal Entry Number String defined by FM
|
---|
160 | ;IENA - the Internal Entry Number Array defined by FM
|
---|
161 | ;FDA - the FDA array defined by FM
|
---|
162 | ;IEN - the ien of the new record
|
---|
163 | ;
|
---|
164 | S DA="+1"
|
---|
165 | S IENS=$$IENS^DILF(.DA)
|
---|
166 | S FIELD=0
|
---|
167 | F S FIELD=$O(DATA(FIELD)) Q:'FIELD D
|
---|
168 | .S FDA(FILE,IENS,FIELD)=$G(DATA(FIELD))
|
---|
169 | I $G(IEN) S IENA(1)=IEN
|
---|
170 | D UPDATE^DIE("","FDA","IENA","ERRORS(1)")
|
---|
171 | I +$G(DIERR) D
|
---|
172 | .S ERROR=$G(ERRORS(1,"DIERR",1,"TEXT",1))
|
---|
173 | .S IEN=""
|
---|
174 | E D
|
---|
175 | .S IEN=IENA(1)
|
---|
176 | .S ERROR=""
|
---|
177 | D CLEAN^DILF
|
---|
178 | S DA=IEN
|
---|
179 | Q IEN
|
---|
180 | ;
|
---|
181 | DELETE(FILE,DA,ERROR) ;Delete an existing record.
|
---|
182 | N DATA
|
---|
183 | S DATA(.01)="@"
|
---|
184 | Q $$UPD(FILE,.DA,.DATA,.ERROR)
|
---|
185 | Q
|
---|
186 | ;
|
---|
187 | STATNUM(IEN) ;
|
---|
188 | ;Description: Given an ien to the Institution file, returns as the function value the station number. If IEN is NOT passed in, it assumes the local site. Returns "" on failure.
|
---|
189 | ;
|
---|
190 | N STATION,RETURN
|
---|
191 | S RETURN=""
|
---|
192 | I $G(IEN) D
|
---|
193 | .Q:'$D(^DIC(4,IEN,0))
|
---|
194 | .S STATION=$P($$NNT^XUAF4(IEN),"^",2)
|
---|
195 | .S RETURN=$S(+STATION:STATION,1:"")
|
---|
196 | E D
|
---|
197 | .S RETURN=$P($$SITE^VASITE(),"^",3)
|
---|
198 | Q RETURN
|
---|
199 | ;
|
---|
200 | CHECKWHO(WHO,PARMS,ERROR) ;
|
---|
201 | ;Checks the parameters provided in WHO() (see $$ADD). They must resolve
|
---|
202 | ;the link, receiving app and receiving facility.
|
---|
203 | ;INPUT:
|
---|
204 | ; WHO - (required, pass by reference) - see $$ADD.
|
---|
205 | ;
|
---|
206 | ; WHO("PORT") - if this is valued, it will be used as the remote port
|
---|
207 | ; to connect with rather than the port associated with the link
|
---|
208 | ;Output:
|
---|
209 | ; Function returns 1 if the input is resolved successfully, 0 otherwise
|
---|
210 | ; PARMS - (pass by reference) These subscripts are returned:
|
---|
211 | ; "LINK IEN" - ien of the link
|
---|
212 | ; "LINK NAME" - name of the link
|
---|
213 | ; "RECEIVING APPLICATION" - name of the receiving app
|
---|
214 | ; "RECEIVING FACILITY",1) - component 1
|
---|
215 | ; "RECEIVING FACILITY",2) - component 2
|
---|
216 | ; "RECEIVING FACILITY",3) - component 3
|
---|
217 | ; ERROR - (pass by reference) - if unsuccessful, an error message is returned.
|
---|
218 | ;
|
---|
219 | N OK
|
---|
220 | K ERROR
|
---|
221 | S OK=1
|
---|
222 | S PARMS("LINK IEN")="",PARMS("LINK NAME")=""
|
---|
223 | ;must identify the receiving app
|
---|
224 | ;
|
---|
225 | D
|
---|
226 | .N LEN
|
---|
227 | .S LEN=$L($G(WHO("RECEIVING APPLICATION")))
|
---|
228 | .I 'LEN S OK=0
|
---|
229 | .E I LEN>60 S OK=0
|
---|
230 | .S:'OK ERROR="RECEIVING APPLICATION NOT VALID"
|
---|
231 | .S PARMS("RECEIVING APPLICATION")=$G(WHO("RECEIVING APPLICATION"))
|
---|
232 | ;
|
---|
233 | ;find the station # if Institution ien known
|
---|
234 | S:$G(WHO("INSTITUTION IEN")) WHO("STATION NUMBER")=$$STATNUM^HLOASUB1(WHO("INSTITUTION IEN"))
|
---|
235 | ;
|
---|
236 | ;if destination link specified by name, get its ien
|
---|
237 | I '$G(WHO("FACILITY LINK IEN")),$L($G(WHO("FACILITY LINK NAME"))) S WHO("FACILITY LINK IEN")=$O(^HLCS(870,"B",WHO("FACILITY LINK NAME"),0))
|
---|
238 | ;
|
---|
239 | ;if destination link not specified, find it based on station #
|
---|
240 | I +$G(WHO("STATION NUMBER")),'$G(WHO("FACILITY LINK IEN")) S WHO("FACILITY LINK IEN")=$$FINDLINK^HLOTLNK(WHO("STATION NUMBER"))
|
---|
241 | ;
|
---|
242 | ;if station # not known, find it based on destination link
|
---|
243 | I '$G(WHO("STATION NUMBER")),$G(WHO("FACILITY LINK IEN")) S WHO("STATION NUMBER")=$$STATNUM^HLOTLNK(WHO("FACILITY LINK IEN"))
|
---|
244 | ;
|
---|
245 | S PARMS("RECEIVING FACILITY",1)=$G(WHO("STATION NUMBER"))
|
---|
246 | ;
|
---|
247 | ;if the destination link is known, get the domain
|
---|
248 | S PARMS("RECEIVING FACILITY",2)=$S($G(WHO("FACILITY LINK IEN")):$$DOMAIN^HLOTLNK(WHO("FACILITY LINK IEN")),1:"")
|
---|
249 | ;
|
---|
250 | S PARMS("RECEIVING FACILITY",3)="DNS"
|
---|
251 | ;
|
---|
252 | ;find the link to send over - need name & ien
|
---|
253 | I $G(WHO("IE LINK IEN")) D
|
---|
254 | .S PARMS("LINK IEN")=WHO("IE LINK IEN")
|
---|
255 | .S PARMS("LINK NAME")=$P($G(^HLCS(870,PARMS("LINK IEN"),0)),"^")
|
---|
256 | .I OK,'$L(PARMS("LINK NAME")) S OK=0,ERROR="INTERFACE ENGINE LOGICAL LINK PROVIDED BUT NOT FOUND"
|
---|
257 | E I $L($G(WHO("IE LINK NAME"))) D
|
---|
258 | .S PARMS("LINK NAME")=WHO("IE LINK NAME")
|
---|
259 | .S PARMS("LINK IEN")=$O(^HLCS(870,"B",WHO("IE LINK NAME"),0))
|
---|
260 | .I OK,'PARMS("LINK IEN") S OK=0,ERROR="INTERFACE ENGINE LOGICAL LINK PROVIDED BUT NOT FOUND"
|
---|
261 | E I $G(WHO("FACILITY LINK IEN")) D
|
---|
262 | .S PARMS("LINK IEN")=WHO("FACILITY LINK IEN")
|
---|
263 | .S PARMS("LINK NAME")=$P($G(^HLCS(870,PARMS("LINK IEN"),0)),"^")
|
---|
264 | .I OK,'$L(PARMS("LINK NAME")) S OK=0,ERROR="RECEIVING FACILITY LOGICAL LINK NOT FOUND"
|
---|
265 | E I $L($G(WHO("FACILITY LINK NAME"))) D
|
---|
266 | .S PARMS("LINK NAME")=WHO("FACILITY LINK NAME")
|
---|
267 | .S PARMS("LINK IEN")=$O(^HLCS(870,"B",WHO("FACILITY LINK NAME"),0))
|
---|
268 | .I OK,'PARMS("LINK IEN") S OK=0,ERROR="RECEIVING FACILITY LOGICAL LINK NOT FOUND"
|
---|
269 | I OK,(('PARMS("LINK IEN"))!(PARMS("LINK NAME")="")) S OK=0,ERROR="LOGICAL LINK TO TRANSMIT OVER NOT SPECIFIED"
|
---|
270 | ;
|
---|
271 | ;need the station # or domain for msg header
|
---|
272 | I OK,'$L(PARMS("RECEIVING FACILITY",2)),'PARMS("RECEIVING FACILITY",1) S OK=0,ERROR="RECEIVING FACILITY STATION # AND DOMAIN NOT SPECIFIED"
|
---|
273 | ;
|
---|
274 | ;append the port#
|
---|
275 | I '$G(WHO("PORT")) S PARMS("RECEIVING FACILITY",2)=PARMS("RECEIVING FACILITY",2)_":"_$$PORT^HLOTLNK($G(WHO("FACILITY LINK IEN")))
|
---|
276 | E S PARMS("RECEIVING FACILITY",2)=PARMS("RECEIVING FACILITY",2)_":"_WHO("PORT")
|
---|
277 | ;
|
---|
278 | Q OK
|
---|