| 1 | C0CSOAP  ; CCDCCR/GPL - SOAP WEB SERVICE utilities; 8/25/09
 | 
|---|
| 2 |         ;;1.2;C0C;;May 11, 2012;Build 47
 | 
|---|
| 3 |         ;Copyright 2008 George Lilly.  Licensed under the terms of the GNU
 | 
|---|
| 4 |         ;General Public License See attached copy of the License.
 | 
|---|
| 5 |         ;
 | 
|---|
| 6 |         ;This program is free software; you can redistribute it and/or modify
 | 
|---|
| 7 |         ;it under the terms of the GNU General Public License as published by
 | 
|---|
| 8 |         ;the Free Software Foundation; either version 2 of the License, or
 | 
|---|
| 9 |         ;(at your option) any later version.
 | 
|---|
| 10 |         ;
 | 
|---|
| 11 |         ;This program is distributed in the hope that it will be useful,
 | 
|---|
| 12 |         ;but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
|---|
| 13 |         ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
|---|
| 14 |         ;GNU General Public License for more details.
 | 
|---|
| 15 |         ;
 | 
|---|
| 16 |         ;You should have received a copy of the GNU General Public License along
 | 
|---|
| 17 |         ;with this program; if not, write to the Free Software Foundation, Inc.,
 | 
|---|
| 18 |         ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
|---|
| 19 |         ;
 | 
|---|
| 20 |         W "This is an SOAP utility library",!
 | 
|---|
| 21 |         W !
 | 
|---|
| 22 |         Q
 | 
|---|
| 23 |         ;
 | 
|---|
| 24 | TEST1   
 | 
|---|
| 25 |         S url="https://ec2-75-101-247-83.compute-1.amazonaws.com:8181/ccr/CCRService?wsdl"
 | 
|---|
| 26 |         D GET1URL^C0CEWD2(url)
 | 
|---|
| 27 |         Q
 | 
|---|
| 28 |         ;
 | 
|---|
| 29 | INITFARY(ARY)   ;initialize the Fileman Field array for SOAP processing
 | 
|---|
| 30 |         ; ARY is passed by name
 | 
|---|
| 31 |         S @ARY@("XML FILE NUMBER")="178.301"
 | 
|---|
| 32 |         S @ARY@("BINDING SUBFILE NUMBER")="178.3014"
 | 
|---|
| 33 |         S @ARY@("MIME TYPE")="2.3"
 | 
|---|
| 34 |         S @ARY@("PROXY SERVER")="2.4"
 | 
|---|
| 35 |         S @ARY@("REPLY TEMPLATE")=".03"
 | 
|---|
| 36 |         S @ARY@("TEMPLATE NAME")=".01"
 | 
|---|
| 37 |         S @ARY@("TEMPLATE XML")="3"
 | 
|---|
| 38 |         S @ARY@("URL")="1"
 | 
|---|
| 39 |         S @ARY@("WSDL URL")="2"
 | 
|---|
| 40 |         S @ARY@("XML")="2.1"
 | 
|---|
| 41 |         S @ARY@("XML HEADER")="2.2"
 | 
|---|
| 42 |         S @ARY@("XPATH REDUCTION STRING")="2.5"
 | 
|---|
| 43 |         S @ARY@("CCR VARIABLE")="4"
 | 
|---|
| 44 |         S @ARY@("FILEMAN FIELD NAME")="1"
 | 
|---|
| 45 |         S @ARY@("FILEMAN FIELD NUMBER")="1.2"
 | 
|---|
| 46 |         S @ARY@("FILEMAN FILE POINTER")="1.1"
 | 
|---|
| 47 |         S @ARY@("INDEXED BY")=".05"
 | 
|---|
| 48 |         S @ARY@("SQLI FIELD NAME")="3"
 | 
|---|
| 49 |         S @ARY@("VARIABLE NAME")="2"
 | 
|---|
| 50 |         Q
 | 
|---|
| 51 |         ;
 | 
|---|
| 52 | RESTID(INNAM,INFARY)    ;EXTRINSIC TO RESOLVE TEMPLATE PASSED BY NAME
 | 
|---|
| 53 |         ; FILE IS IDENTIFIED IN FARY, PASSED BY NAME
 | 
|---|
| 54 |         I '$D(INFARY) D  ; NO FILE ARRAY PASSED
 | 
|---|
| 55 |         . S INFARY="FARY"
 | 
|---|
| 56 |         . D INITFARY(INFARY)
 | 
|---|
| 57 |         N ZN,ZREF,ZR
 | 
|---|
| 58 |         S ZN=@INFARY@("XML FILE NUMBER")
 | 
|---|
| 59 |         S ZREF=$$FILEREF^C0CRNF(ZN)
 | 
|---|
| 60 |         S ZR=$O(@ZREF@("B",INNAM,""))
 | 
|---|
| 61 |         Q ZR
 | 
|---|
| 62 |         ;
 | 
|---|
| 63 | TESTSOAP        ;
 | 
|---|
| 64 |         ; USING ICD9 WEB SERVICE TO TEST SOAP
 | 
|---|
| 65 |         S G("CODE")="E*"
 | 
|---|
| 66 |         S G("CODELN")=3
 | 
|---|
| 67 |         D SOAP("GPL","ICD9","G")
 | 
|---|
| 68 |         Q
 | 
|---|
| 69 |         ;
 | 
|---|
| 70 | SOAP(C0CRTN,C0CTID,C0CVA,C0CVOR,ALTXML,IFARY)   ; MAKES A SOAP CALL FOR 
 | 
|---|
| 71 |         ; TEMPLATE ID C0CTID
 | 
|---|
| 72 |         ; RETURNS THE XML RESULT IN C0CRTN, PASSED BY NAME
 | 
|---|
| 73 |         ; C0CVA IS PASSED BY NAME AND IS THE VARIABLE ARRAY TO PASS TO BIND
 | 
|---|
| 74 |         ; C0CVOR IS THE NAME OF A VARIABLE OVERRIDE ARRAY, WHICH IS APPLIED 
 | 
|---|
| 75 |         ; BEFORE MAPPING
 | 
|---|
| 76 |         ; IF ALTXML IS PASSED, BIND AND MAP WILL BE SKIPPED AND 
 | 
|---|
| 77 |         ; ALTXML WILL BE USED INSTEAD
 | 
|---|
| 78 |         ;
 | 
|---|
| 79 |         ; ARTIFACTS SECTION
 | 
|---|
| 80 |         ; THE FOLLOWING WILL SET UP DEBUGGING ARTIFACTS FOR A POSSIBLE FUTURE
 | 
|---|
| 81 |         ; ONLINE DEBUGGER. IF DEBUG=1, VARIABLES CONTAINING INTERMEDIATE RESULTS
 | 
|---|
| 82 |         ; WILL NOT BE NEWED.
 | 
|---|
| 83 |         I $G(WSDEBUG)="" N C0CV ; CATALOG OF ARTIFACT VARIABLES AND ARRAYS
 | 
|---|
| 84 |         S C0CV(100,"C0CXF","XML TEMPLATE FILE NUMBER")=""
 | 
|---|
| 85 |         S C0CV(200,"C0CHEAD","SOAP HEADER VARIABLE NAME")=""
 | 
|---|
| 86 |         S C0CV(300,"HEADER","SOAP HEADER")=""
 | 
|---|
| 87 |         S C0CV(400,"C0CMIME","MIME TYPE")=""
 | 
|---|
| 88 |         S C0CV(500,"C0CURL","WS URL")=""
 | 
|---|
| 89 |         S C0CV(550,"C0CPURL","PROXY URL")=""
 | 
|---|
| 90 |         S C0CV(600,"C0CXML","XML VARIABLE NAME")=""
 | 
|---|
| 91 |         S C0CV(700,"XML","OUTBOUND XML")=""
 | 
|---|
| 92 |         S C0CV(800,"C0CRSLT","RAW XML RESULT RETURNED FROM WEB SERVICE")=""
 | 
|---|
| 93 |         S C0CV(900,"C0CRHDR","RETURNED HEADER")=""
 | 
|---|
| 94 |         S C0CV(1000,"C0CRXML","XML RESULT NORMALIZED")=""
 | 
|---|
| 95 |         S C0CV(1100,"C0CR","REPLY TEMPLATE")=""
 | 
|---|
| 96 |         S C0CV(1200,"C0CREDUX","REDUX STRING")=""
 | 
|---|
| 97 |         S C0CV(1300,"C0CIDX","RESULT XPATH INDEX")=""
 | 
|---|
| 98 |         S C0CV(1400,"C0CARY","RESULT XPATH ARRAY")=""
 | 
|---|
| 99 |         S C0CV(1500,"C0CNOM","RESULT DOM DOCUMENT NAME")=""
 | 
|---|
| 100 |         S C0CV(1600,"C0CID","RESULT DOM ID")=""
 | 
|---|
| 101 |         I $G(DEBUG)'="" G NOTNEW ; SKIP NEWING THE VARIABLES IF IN DEBUG
 | 
|---|
| 102 |         N ZI,ZJ S ZI=""
 | 
|---|
| 103 | NEW     
 | 
|---|
| 104 |         S ZI=$O(C0CV(ZI))
 | 
|---|
| 105 |         S ZJ=$O(C0CV(ZI,"")) ; SET UP NEW COMMAND
 | 
|---|
| 106 |         ;W ZJ,!
 | 
|---|
| 107 |         N @ZJ ; NEW THE VARIABLE
 | 
|---|
| 108 |         I $O(C0CV(ZI))'="" G NEW ;LOOP TO GET NEW IN CONTEXT
 | 
|---|
| 109 | NOTNEW  
 | 
|---|
| 110 |         ; END ARTIFACTS
 | 
|---|
| 111 |         ;
 | 
|---|
| 112 |         I '$D(IFARY) D INITFARY("C0CF") ; SET FILE NUMBER AND PARAMATERS 
 | 
|---|
| 113 |         E  D  ; 
 | 
|---|
| 114 |         . K C0CF
 | 
|---|
| 115 |         . M C0CF=@IFARY
 | 
|---|
| 116 |         S C0CXF=C0CF("XML FILE NUMBER") ; FILE NUMBER FOR THE XML TEMPLATE FILE
 | 
|---|
| 117 |         I +C0CTID=0 D  ; A STRING WAS PASSED FOR THE TEMPLATE NAME
 | 
|---|
| 118 |         . S C0CUTID=$$RESTID(C0CTID,"C0CF") ;RESOLVE TEMPLATE IEN FROM NAME
 | 
|---|
| 119 |         E  S C0CUTID=C0CTID ; AN IEN WAS PASSED
 | 
|---|
| 120 |         N XML,TEMPLATE,HEADER
 | 
|---|
| 121 |         N C0CFH S C0CFH=C0CF("XML HEADER")
 | 
|---|
| 122 |         S C0CHEAD=$$GET1^DIQ(C0CXF,C0CUTID_",",C0CFH,,"HEADER")
 | 
|---|
| 123 |         N C0CFM S C0CFM=C0CF("MIME TYPE")
 | 
|---|
| 124 |         S C0CMIME=$$GET1^DIQ(C0CXF,C0CUTID_",",C0CFM)
 | 
|---|
| 125 |         N C0CFP S C0CFP=C0CF("PROXY SERVER")
 | 
|---|
| 126 |         S C0CPURL=$$GET1^DIQ(C0CXF,C0CUTID_",",C0CFP)
 | 
|---|
| 127 |         N C0CFU S C0CFU=C0CF("URL")
 | 
|---|
| 128 |         S C0CURL=$$GET1^DIQ(C0CXF,C0CUTID_",",C0CFU)
 | 
|---|
| 129 |         N C0CFX S C0CFX=C0CF("XML")
 | 
|---|
| 130 |         S C0CXML=$$GET1^DIQ(C0CXF,C0CUTID_",",C0CFX,,"XML")
 | 
|---|
| 131 |         N C0CFT S C0CFT=C0CF("TEMPLATE XML")
 | 
|---|
| 132 |         S C0CTMPL=$$GET1^DIQ(C0CXF,C0CUTID_",",C0CFT,,"TEMPLATE")
 | 
|---|
| 133 |         I C0CTMPL="TEMPLATE" D  ; there is a template to process
 | 
|---|
| 134 |         . K XML ; going to replace the xml array
 | 
|---|
| 135 |         . N VARS
 | 
|---|
| 136 |         . I $D(C0CVOR) M @C0CVA=@C0CVOR ; merge in varible overrides
 | 
|---|
| 137 |         . I '$D(ALTXML) D  ; if ALTXML is passed in, don't bind
 | 
|---|
| 138 |         . . D BIND("VARS",C0CVA,C0CUTID,"C0CF")
 | 
|---|
| 139 |         . . D MAP("XML","VARS",TPTR,"C0CF")
 | 
|---|
| 140 |         . . K XML(0)
 | 
|---|
| 141 |         . E  M XML=@ALTXML ; use ALTXML instead
 | 
|---|
| 142 |         I $G(C0CPROXY) S C0CURL=C0CPURL
 | 
|---|
| 143 |         K C0CRSLT,C0CRHDR
 | 
|---|
| 144 |         B
 | 
|---|
| 145 |         S ok=$$httpPOST^%zewdGTM(C0CURL,.XML,C0CMIME,.C0CRSLT,.HEADER,"",.gpl5,.C0CRHDR)
 | 
|---|
| 146 |         K C0CRXML
 | 
|---|
| 147 |         D NORMAL("C0CRXML","C0CRSLT(1)") ;RETURN XML IN AN ARRAY
 | 
|---|
| 148 |         N C0CFR S C0CFR=$G(C0CF("REPLY TEMPLATE"))
 | 
|---|
| 149 |         S C0CR=$$GET1^DIQ(C0CXF,C0CUTID_",",C0CFR,"I") ; REPLY TEMPLATE
 | 
|---|
| 150 |         ; reply templates are optional and are specified by populating a
 | 
|---|
| 151 |         ; template pointer in field 2.5 of the request template
 | 
|---|
| 152 |         ; if specified, the reply template is the source of the REDUX string
 | 
|---|
| 153 |         ; used for XPath on the reply, and for UNBIND processing
 | 
|---|
| 154 |         ; if no reply template is specified, REDUX is obtained from the request
 | 
|---|
| 155 |         ; template and no UNBIND processing is performed. The XPath array is
 | 
|---|
| 156 |         ; returned without variable bindings
 | 
|---|
| 157 |         I C0CR'="" D  ; REPLY TEMPLATE EXISTS
 | 
|---|
| 158 |         . I +$G(DEBUG)'=0 W "REPLY TEMPLATE:",C0CR,!
 | 
|---|
| 159 |         . S C0CTID=C0CR ;
 | 
|---|
| 160 |         N C0CFRDX S C0CFRDX=C0CF("XPATH REDUCTION STRING")
 | 
|---|
| 161 |         S C0CREDUX=$$GET1^DIQ(C0CXF,C0CUTID_",",C0CFRDX) ;XPATH REDUCTION STRING
 | 
|---|
| 162 |         K C0CIDX,C0CARY ; XPATH INDEX AND ARRAY VARS
 | 
|---|
| 163 |         S C0CNOM="C0CWS"_$J ; DOCUMENT NAME FOR THE DOM
 | 
|---|
| 164 |         S C0CID=$$PARSE^C0CXEWD("C0CRXML",C0CNOM) ;CALL THE PARSER
 | 
|---|
| 165 |         S C0CID=$$FIRST^C0CXEWD($$ID^C0CXEWD(C0CNOM)) ;ID OF FIRST NODE
 | 
|---|
| 166 |         D XPATH^C0CXEWD(C0CID,"/","C0CIDX","C0CARY","",C0CREDUX) ;XPATH GENERATOR
 | 
|---|
| 167 |         ; Next, call UNBIND to map the reply XPath array to variables
 | 
|---|
| 168 |         ; This is only done if a Reply Template is provided
 | 
|---|
| 169 |         D DEMUXARY(C0CRTN,"C0CARY")
 | 
|---|
| 170 |         ; M @C0CRTN=C0CARY
 | 
|---|
| 171 |         Q
 | 
|---|
| 172 |         ;
 | 
|---|
| 173 | DEMUXARY(OARY,IARY)     ;CONVERT AN XPATH ARRAY PASSED AS IARY TO
 | 
|---|
| 174 |         ; FORMAT @OARY@(x,xpath) where x is the first multiple
 | 
|---|
| 175 |         N ZI,ZJ,ZK,ZL S ZI=""
 | 
|---|
| 176 |         F  S ZI=$O(@IARY@(ZI)) Q:ZI=""  D  ;
 | 
|---|
| 177 |         . D DEMUX^C0CMXP("ZJ",ZI)
 | 
|---|
| 178 |         . S ZK=$P(ZJ,"^",3)
 | 
|---|
| 179 |         . S ZK=$RE($P($RE(ZK),"/",1))
 | 
|---|
| 180 |         . S ZL=$P(ZJ,"^",1)
 | 
|---|
| 181 |         . I ZL="" S ZL=1
 | 
|---|
| 182 |         . S @OARY@(ZL,ZK)=@IARY@(ZI)
 | 
|---|
| 183 |         Q
 | 
|---|
| 184 |         ;
 | 
|---|
| 185 | NORMAL(OUTXML,INXML)    ;NORMALIZES AN XML STRING PASSED BY NAME IN INXML
 | 
|---|
| 186 |         ; INTO AN XML ARRAY RETURNED IN OUTXML, ALSO PASSED BY NAME
 | 
|---|
| 187 |         ;
 | 
|---|
| 188 |         N ZI,ZN,ZTMP
 | 
|---|
| 189 |         S ZN=1
 | 
|---|
| 190 |         S @OUTXML@(ZN)=$P(@INXML,"><",ZN)_">"
 | 
|---|
| 191 |         S ZN=ZN+1
 | 
|---|
| 192 |         F  S @OUTXML@(ZN)="<"_$P(@INXML,"><",ZN) Q:$P(@INXML,"><",ZN+1)=""  D  ;
 | 
|---|
| 193 |         . S @OUTXML@(ZN)=@OUTXML@(ZN)_">"
 | 
|---|
| 194 |         . S ZN=ZN+1
 | 
|---|
| 195 |         Q
 | 
|---|
| 196 |         ;
 | 
|---|
| 197 | MAP(RARY,IVARS,TPTR,INFARY)     ;RETURNS MAPPED XML IN RARY PASSED BY NAME
 | 
|---|
| 198 |         ; IVARS IS AN XPATH ARRAY PASSED BY NAME
 | 
|---|
| 199 |         ; TPTR IS A POINT TO THE C0C XML TEMPLATE FILE USED TO RETRIEVE THE TEMPLATE
 | 
|---|
| 200 |         ;
 | 
|---|
| 201 |         N ZT ;THE TEMPLATE
 | 
|---|
| 202 |         K ZT,@RARY
 | 
|---|
| 203 |         I '$D(INFARY) D  ;
 | 
|---|
| 204 |         . S INFARY="FARY"
 | 
|---|
| 205 |         . D INITFARY(INFARY)
 | 
|---|
| 206 |         N ZF,ZFT
 | 
|---|
| 207 |         S ZF=@INFARY@("XML FILE NUMBER")
 | 
|---|
| 208 |         S ZFT=@INFARY@("TEMPLATE XML")
 | 
|---|
| 209 |         I $$GET1^DIQ(ZF,TPTR_",",ZFT,,"ZT")'="ZT" D  Q  ; ERROR GETTING TEMPLATE
 | 
|---|
| 210 |         . W "ERROR RETRIEVING TEMPLATE",!
 | 
|---|
| 211 |         D MAP^C0CXPATH("ZT",IVARS,RARY) ;DO THE MAPPING
 | 
|---|
| 212 |         Q
 | 
|---|
| 213 |         ;
 | 
|---|
| 214 | TESTBIND        ;
 | 
|---|
| 215 |         S G1("TESTONE")=1
 | 
|---|
| 216 |         S G1("TESTTWO")=2
 | 
|---|
| 217 |         D BIND("G","G1","TEST")
 | 
|---|
| 218 |         W !
 | 
|---|
| 219 |         ZWR G
 | 
|---|
| 220 |         Q
 | 
|---|
| 221 |         ;
 | 
|---|
| 222 | BIND(RARY,IVARS,INTPTR,INFARY)  ;RETURNS AN XPATH ARRAY IN RARY FOR USE WITH MAP
 | 
|---|
| 223 |         ; TO BUILD AN INSTANTIATED TEMPLATE
 | 
|---|
| 224 |         ; TPTR IS THE IEN OF THE XML TEMPATE IN THE C0C XML TEMPLATE FILE
 | 
|---|
| 225 |         ; LOOPS THROUGHT THE BINDING SUBFILE TO PULL OUT XPATHS AND 
 | 
|---|
| 226 |         ; EITHER ASSIGNS VARIABLES OR DOES A FILEMAN CALL TO GET VALUES
 | 
|---|
| 227 |         ; VARIABLES ARE IN IVARS WHICH IS PASSED BY NAME
 | 
|---|
| 228 |         I '$D(INFARY) D  ;
 | 
|---|
| 229 |         . S INFARY="FARY"
 | 
|---|
| 230 |         . D INITFARY(INFARY) ;INITIALIZE FILE ARRAY IF NOT PASSED
 | 
|---|
| 231 |         I +INTPTR>0 S TPTR=INTPTR
 | 
|---|
| 232 |         E  S TPTR=$$RESTID(INTPTR,INFARY)
 | 
|---|
| 233 |         N C0CFF,C0CBF,C0CXI,C0CFREF,C0CXREF
 | 
|---|
| 234 |         S C0CFF=@INFARY@("XML FILE NUMBER") ;fileman file number of XML file
 | 
|---|
| 235 |         S C0CFREF=$$FILEREF^C0CRNF(C0CFF) ; closed file reference to the file
 | 
|---|
| 236 |         S C0CBF=@INFARY@("BINDING SUBFILE NUMBER") ; BINDING SUBFILE NUMBER
 | 
|---|
| 237 |         S C0CXI=$G(@INFARY@("XPATH INDEX")) ; index to the XPath bindings
 | 
|---|
| 238 |         I C0CXI="" S C0CXI="XPATH" ; default is the XPATH index
 | 
|---|
| 239 |         ; this needs to be a whole file index on the XPath subfile with
 | 
|---|
| 240 |         ; the Template IEN perceding the XPath in the index
 | 
|---|
| 241 |         N ZI
 | 
|---|
| 242 |         S ZI=""
 | 
|---|
| 243 |         S C0CXREF=$NA(@C0CFREF@(C0CXI,TPTR)) ; where the xref is
 | 
|---|
| 244 |         ;F  S ZI=$O(^C0CX(TPTR,5,"B",ZI)) Q:ZI=""  D  ; FOR EACH XPATH
 | 
|---|
| 245 |         F  S ZI=$O(@C0CXREF@(ZI)) Q:ZI=""  D  ; for each XPath in this template
 | 
|---|
| 246 |         . ;W !,ZI," ",$O(@C0CXREF@(ZI,TPTR,""))
 | 
|---|
| 247 |         . N ZIEN,ZFILE,ZFIELD,ZVAR,ZIDX,ZINDEX ;
 | 
|---|
| 248 |         . S ZIEN=$O(@C0CXREF@(ZI,TPTR,"")) ; IEN OF THE BINDING RECORD
 | 
|---|
| 249 |         . N ZFF S ZFF=@INFARY@("FILEMAN FILE POINTER")
 | 
|---|
| 250 |         . S ZFILE=$$GET1^DIQ(C0CBF,ZIEN_","_TPTR_",",ZFF,"I")
 | 
|---|
| 251 |         . N ZFFLD S ZFFLD=@INFARY@("FILEMAN FIELD NUMBER")
 | 
|---|
| 252 |         . S ZFIELD=$$GET1^DIQ(C0CBF,ZIEN_","_TPTR_",",ZFFLD,"I")
 | 
|---|
| 253 |         . N ZFV S ZFV=@INFARY@("VARIABLE NAME")
 | 
|---|
| 254 |         . S ZVAR=$$GET1^DIQ(C0CBF,ZIEN_","_TPTR_",",ZFV,"E")
 | 
|---|
| 255 |         . N ZFX S ZFX=("INDEXED BY")
 | 
|---|
| 256 |         . S ZIDX=$$GET1^DIQ(C0CBF,ZIEN_","_TPTR_",",ZFX,"I")
 | 
|---|
| 257 |         . S ZINDEX=""
 | 
|---|
| 258 |         . I ZIDX="DUZ" S ZINDEX=$G(DUZ) ; FILE IS INDEXED BY DUZ
 | 
|---|
| 259 |         . I ZIDX="DFN" S ZINDEX=$G(DFN) ; BY DFN
 | 
|---|
| 260 |         . E  I ZIDX'="" S ZINDEX=$G(@ZIDX) ; index variable
 | 
|---|
| 261 |         . ;I ZIDX="ACCT" S ZINDEX=C0CACCT ; BY ACCOUNT RECORD POINT TO C0C WS ACCT
 | 
|---|
| 262 |         . ;I ZIDX="LOC" S ZINDEX=C0CLOC ; BY LOCATION
 | 
|---|
| 263 |         . I ZVAR'="" D  ; VARIABLES TAKE PRESCIDENCE OVER FILEMAN FIELDS
 | 
|---|
| 264 |         . . S @RARY@(ZI)=@IVARS@(ZVAR) ; 
 | 
|---|
| 265 |         . E  D  ; IF NO VARIABLE, TRY ACCESSING FROM FILEMAN
 | 
|---|
| 266 |         . . I (ZFILE="")!(ZFIELD="") Q  ;QUIT IF FILE OR FIELD NOT THERE
 | 
|---|
| 267 |         . . D CLEAN^DILF
 | 
|---|
| 268 |         . . S @RARY@(ZI)=$$GET1^DIQ(ZFILE,ZINDEX_",",ZFIELD) ;GET THE VALUE
 | 
|---|
| 269 |         . . I $D(^TMP("DIERR",$J,1)) D  B ;
 | 
|---|
| 270 |         . . . W "ERROR!",!
 | 
|---|
| 271 |         . . . ZWR ^TMP("DIERR",$J,*)
 | 
|---|
| 272 |         Q
 | 
|---|
| 273 |         ;
 | 
|---|