[613] | 1 | ONCSAPIR ;Hines OIFO/SG - COLLABORATIVE STAGING (REQUEST) ; 2/8/07 8:28am
|
---|
| 2 | ;;2.11;ONCOLOGY;**40,41,44,47**;Mar 07, 1995;Build 19
|
---|
| 3 | ;
|
---|
| 4 | ; ONC8DST ------------- DESCRIPTOR OF THE DESTINATION BUFFER
|
---|
| 5 | ; (a parameter of HEADER, PUT, and TRAILER)
|
---|
| 6 | ;
|
---|
| 7 | ; ONC8DST( Closed root of the destination buffer
|
---|
| 8 | ; "PTR") Pointer in the destination buffer
|
---|
| 9 | ; "PTRC") Continuation pointer (optional)
|
---|
| 10 | ; "REQ") Name of the root tag of the request
|
---|
| 11 | ;
|
---|
| 12 | Q
|
---|
| 13 | ;
|
---|
| 14 | ;***** APPENDS THE STRING TO THE LAST LINE OF THE DESTINATION BUFFER
|
---|
| 15 | ;
|
---|
| 16 | ; .ONC8DST Reference to a descriptor of the destination buffer.
|
---|
| 17 | ;
|
---|
| 18 | ; STR String
|
---|
| 19 | ;
|
---|
| 20 | ; [NOENC] Disable XML encoding (enabled by default)
|
---|
| 21 | ;
|
---|
| 22 | ; This procedure appends the string as the continuation node
|
---|
| 23 | ; to the last line added by the PUT^ONCSAPIR.
|
---|
| 24 | ;
|
---|
| 25 | APPEND(ONC8DST,STR,NOENC) ;
|
---|
| 26 | Q:$G(ONC8DST("PTR"))'>0
|
---|
| 27 | N ENCSTR,I1,I2,S1
|
---|
| 28 | S ENCSTR=$S('$G(NOENC):$$SYMENC^MXMLUTL(STR),1:STR)
|
---|
| 29 | S I2=0
|
---|
| 30 | F S I1=I2+1,I2=I1+249,S1=$E(ENCSTR,I1,I2) Q:S1="" D
|
---|
| 31 | . S ONC8DST("PTRC")=$G(ONC8DST("PTRC"))+1
|
---|
| 32 | . S @ONC8DST@(ONC8DST("PTR"),ONC8DST("PTRC"))=S1
|
---|
| 33 | Q
|
---|
| 34 | ;
|
---|
| 35 | ;***** CHECKS FOR PARSING AND WEB SERVICE ERRORS
|
---|
| 36 | ;
|
---|
| 37 | ; .ONCXML Reference to the XML parsing descriptor
|
---|
| 38 | ;
|
---|
| 39 | ; [ONC8INFO] Closed root of the variable that contains
|
---|
| 40 | ; additional information related to the error
|
---|
| 41 | ;
|
---|
| 42 | ; Return values:
|
---|
| 43 | ;
|
---|
| 44 | ; <0 Error Descriptor
|
---|
| 45 | ; 0 Ok
|
---|
| 46 | ; 1 Warning(s)
|
---|
| 47 | ;
|
---|
| 48 | CHKERR(ONCXML,ONC8INFO) ;
|
---|
| 49 | N RC,TMP
|
---|
| 50 | I $G(ONCXML("ERR"))>0 Q $$ERROR^ONCSAPIE(-5)
|
---|
| 51 | I $G(ONCXML("FAULTCODE"))'="" D Q RC
|
---|
| 52 | . S TMP=$TR($G(ONCXML("FAULTSTRING")),"^","~")
|
---|
| 53 | . S:TMP="" TMP="Unknown error"
|
---|
| 54 | . S RC="-2"_U_ONCXML("FAULTCODE")_": "_TMP
|
---|
| 55 | . D STORE^ONCSAPIE(RC,$G(ONC8INFO))
|
---|
| 56 | . ;--- Error code -11 is returned by the web-service if the
|
---|
| 57 | . ; CStage_calculate function calculated only some staging
|
---|
| 58 | . ;--- values and returned warning(s).
|
---|
| 59 | . S:+$G(ONCXML("RC"))=-11 RC=1
|
---|
| 60 | Q 0
|
---|
| 61 | ;
|
---|
| 62 | ;***** STORES THE REQUEST HEADER INTO THE DESTINATION BUFFER
|
---|
| 63 | ;
|
---|
| 64 | ; .ONC8DST Reference to a descriptor of the destination buffer.
|
---|
| 65 | ;
|
---|
| 66 | ; REQUEST Name of the root tag of the request.
|
---|
| 67 | ;
|
---|
| 68 | ; [.ATTS] Reference to a local variable that stores a list
|
---|
| 69 | ; of attribute values (ATTS(name)=value).
|
---|
| 70 | ;
|
---|
| 71 | HEADER(ONC8DST,REQUEST,ATTS) ;
|
---|
| 72 | ;;<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
|
---|
| 73 | ;; soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
|
---|
| 74 | ;;<soap:Body>
|
---|
| 75 | ;
|
---|
| 76 | N I,TAG,TMP
|
---|
| 77 | S ONC8DST("PTR")=0 K @ONC8DST
|
---|
| 78 | D PUT(.ONC8DST,,$$XMLHDR^MXMLUTL())
|
---|
| 79 | F I=1:1 S TMP=$P($T(HEADER+I),";;",2) Q:TMP="" D
|
---|
| 80 | . D PUT(.ONC8DST,,TMP)
|
---|
| 81 | S TAG=REQUEST,I=""
|
---|
| 82 | F S I=$O(ATTS(I)) Q:I="" D
|
---|
| 83 | . S TAG=TAG_" "_I_"="""_$$SYMENC^MXMLUTL(ATTS(I))_""""
|
---|
| 84 | S TAG=TAG_" ver=""2.0"" xmlns=""http://websrv.oncology.med.va.gov"""
|
---|
| 85 | D PUT(.ONC8DST,TAG,,1)
|
---|
| 86 | S ONC8DST("REQ")=REQUEST
|
---|
| 87 | Q
|
---|
| 88 | ;
|
---|
| 89 | ;***** CONVERTS INPUT PARAMETERS INTO XML FORMAT
|
---|
| 90 | ;
|
---|
| 91 | ; ONC8DST Closed root of the destination buffer
|
---|
| 92 | ;
|
---|
| 93 | ; REQUEST Name of the root tag of the request.
|
---|
| 94 | ;
|
---|
| 95 | ; [.INPUT] Reference to a local variable containg
|
---|
| 96 | ; input parameters.
|
---|
| 97 | ;
|
---|
| 98 | ; Return values:
|
---|
| 99 | ;
|
---|
| 100 | ; <0 Error Descriptor
|
---|
| 101 | ; 0 Ok
|
---|
| 102 | ;
|
---|
| 103 | PARAMS(ONC8DST,REQUEST,INPUT) ;
|
---|
| 104 | N I,NAME,VAL
|
---|
| 105 | D HEADER(.ONC8DST,REQUEST)
|
---|
| 106 | ;---
|
---|
| 107 | S NAME=""
|
---|
| 108 | F S NAME=$O(INPUT(NAME)) Q:NAME="" D
|
---|
| 109 | . S VAL=$G(INPUT(NAME)) D:VAL'="" PUT(.ONC8DST,NAME,VAL)
|
---|
| 110 | ;---
|
---|
| 111 | D TRAILER(.ONC8DST)
|
---|
| 112 | Q 0
|
---|
| 113 | ;
|
---|
| 114 | ;***** ADDS THE ELEMENT/TEXT TO THE DESTINATION BUFFER
|
---|
| 115 | ;
|
---|
| 116 | ; .ONC8DST Reference to a descriptor of the destination buffer.
|
---|
| 117 | ;
|
---|
| 118 | ; [NAME] Name of the element. If omitted or empty then the
|
---|
| 119 | ; text line defined by the second parameter is added
|
---|
| 120 | ; to the buffer.
|
---|
| 121 | ;
|
---|
| 122 | ; [VAL] Value of the element.
|
---|
| 123 | ;
|
---|
| 124 | ; [TAGONLY] Ignore the value and output only the tag defined
|
---|
| 125 | ; by the NAME parameter
|
---|
| 126 | ;
|
---|
| 127 | PUT(ONC8DST,NAME,VAL,TAGONLY) ;
|
---|
| 128 | S (ONC8DST("PTR"),PTR)=ONC8DST("PTR")+1 K ONC8DST("PTRC")
|
---|
| 129 | I $G(NAME)="" S @ONC8DST@(PTR)=$G(VAL) Q
|
---|
| 130 | I $G(TAGONLY) S @ONC8DST@(PTR)="<"_NAME_">" Q
|
---|
| 131 | I $G(VAL)="" S @ONC8DST@(PTR)="<"_NAME_"/>" Q
|
---|
| 132 | S @ONC8DST@(PTR)="<"_NAME_">"_$$SYMENC^MXMLUTL(VAL)_"</"_NAME_">"
|
---|
| 133 | Q
|
---|
| 134 | ;
|
---|
| 135 | ;***** SENDS THE REQUEST AND GETS THE RESPONSE
|
---|
| 136 | ;
|
---|
| 137 | ; URL URL (http://host:port/path)
|
---|
| 138 | ;
|
---|
| 139 | ; ONC8RSP Closed root of the variable where the
|
---|
| 140 | ; response text will be returned.
|
---|
| 141 | ;
|
---|
| 142 | ; [ONC8REQ] Closed root of the variable containing
|
---|
| 143 | ; the text of the request.
|
---|
| 144 | ;
|
---|
| 145 | ; Return Values:
|
---|
| 146 | ; 0 Ok
|
---|
| 147 | ; <0 Error code
|
---|
| 148 | ;
|
---|
| 149 | REQUEST(URL,ONC8RSP,ONC8REQ) ;
|
---|
| 150 | N HS,ONCINFO,ONCRHDR,ONCSHDR,RC,REPCNT,REPEAT,TMP
|
---|
| 151 | ;--- Prepare the request header
|
---|
| 152 | S ONCSHDR("Content-Type")="text/xml"
|
---|
| 153 | ;---
|
---|
| 154 | S (RC,REPCNT)=0 D
|
---|
| 155 | . F S REPEAT=0 D Q:'REPEAT
|
---|
| 156 | . . ;--- Call the web service
|
---|
| 157 | . . S RC=$$GETURL^ONCX10(URL,60,ONC8RSP,.ONCRHDR,$G(ONC8REQ),.ONCSHDR)
|
---|
| 158 | . . S HS=+RC Q:HS=200
|
---|
| 159 | . . ;--- Temporary redirection
|
---|
| 160 | . . I HS=302 D Q
|
---|
| 161 | . . . S REPCNT=REPCNT+1
|
---|
| 162 | . . . I REPCNT>5 S RC=$$ERROR^ONCSAPIE(-12,,REPCNT) Q
|
---|
| 163 | . . . S URL=$G(ONCRHDR("LOCATION"))
|
---|
| 164 | . . . I URL?." " S RC=$$ERROR^ONCSAPIE(-18) Q
|
---|
| 165 | . . . D ERROR^ONCSAPIE(-7,,URL) S REPEAT=1,RC=0
|
---|
| 166 | . . ;--- Permanent redirection
|
---|
| 167 | . . I HS=301 D Q
|
---|
| 168 | . . . S REPCNT=REPCNT+1
|
---|
| 169 | . . . I REPCNT>5 S RC=$$ERROR^ONCSAPIE(-12,,REPCNT) Q
|
---|
| 170 | . . . S URL=$G(ONCRHDR("LOCATION"))
|
---|
| 171 | . . . I URL?." " S RC=$$ERROR^ONCSAPIE(-18) Q
|
---|
| 172 | . . . S RC=$$UPDCSURL^ONCSAPIU(URL) Q:RC<0
|
---|
| 173 | . . . D ERROR^ONCSAPIE(-8,,URL) S REPEAT=1,RC=0
|
---|
| 174 | . . ;--- Record the HTTP client error
|
---|
| 175 | . . K ONCINFO S ONCINFO(1)=$P(RC,U,2)_" ("_$P(RC,U)_")"
|
---|
| 176 | . . S RC=$$ERROR^ONCSAPIE(-10,.ONCINFO)
|
---|
| 177 | . Q:RC<0
|
---|
| 178 | ;---
|
---|
| 179 | Q $S(RC<0:RC,1:0)
|
---|
| 180 | ;
|
---|
| 181 | ;***** APPENDS THE REQUEST TRAILER TO THE DESTINATION BUFFER
|
---|
| 182 | ;
|
---|
| 183 | ; .ONC8DST Reference to a descriptor of the destination buffer.
|
---|
| 184 | ;
|
---|
| 185 | TRAILER(ONC8DST) ;
|
---|
| 186 | S ONC8DST("PTR")=+$O(@ONC8DST@(""),-1)
|
---|
| 187 | D PUT(.ONC8DST,"/"_ONC8DST("REQ"),,1)
|
---|
| 188 | D PUT(.ONC8DST,"/soap:Body",,1)
|
---|
| 189 | D PUT(.ONC8DST,"/soap:Envelope",,1)
|
---|
| 190 | Q
|
---|