[613] | 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
|
---|