Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Vamos a crear una aplicacin en Visual Basic para conectarnos a un Web Services que nos entregar los indicadores econmicos de Chile, los cuales podemos usar en cualquier aplicacin si la necesidad de tener que ingresar nosotros mismos estos valores a una base de datos. Empecemos.
Ahora que ya tenemos todo listo, nuestro formulario debera quedar as:
Antes de comenzar a escribir cdigo en nuestro proyecto, necesitamos agregar una referencia a Microsoft XML, V3.0 y eso lo hacemos de:
Le dejamos el nombre que nos da por defecto (Module1) y escribimos la siguiente funcin: Function InvokeWebService(strSoap, strSOAPAction, strURL, ByRef xmlResponse) As Boolean Dim xmlhttp As MSXML2.XMLHTTP30 Dim blnSuccess As Boolean Set xmlhttp = New MSXML2.XMLHTTP30 xmlhttp.open "POST", strURL, False xmlhttp.setRequestHeader "Man", "POST " & strURL & " HTTP/1.1" xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8" xmlhttp.setRequestHeader "SOAPAction", strSOAPAction Call xmlhttp.send(strSoap) If xmlhttp.Status = 200 Then blnSuccess = True Else blnSuccess = False End If Set xmlResponse = xmlhttp.responseXML InvokeWebService = blnSuccess Set xmlhttp = Nothing End Function
Ahora que ya tenemos lista la funcin que se encargar de conectarse al Web Services, nos queda poder llamarla desde nuestro botn Consultar. Damos doble clic sobre el botn y escribimos:
Private Sub Consultar_Click() Dim xmlResponse As MSXML2.DOMDocument30 Dim strSoap As String Dim strSOAPAction As String Dim strWsdl As String strSoap = Soap.Text strSOAPAction = Action.Text strWsdl = Wsdl.Text If InvokeWebService(strSoap, strSOAPAction, strWsdl, xmlResponse) Then Resultado.Text = xmlResponse.xml Else Resultado.Text = "Error" End If Set xmlResponse = Nothing End Sub
Bueno, ya tenemos lista nuestra aplicacin que se encargar de consultar un Web Services, pero ahora debemos aprender como usarla. Para nuestro ejemplo, vamos a consultar la pgina de Indicadores Financieros de Chile desde la siguiente direccin (siempre que el servicio se encuentre disponible, o sino, pueden usar otro web services):http://www.desachile.com. Una vez aqu buscamos la direccin que nos llevar a la pgina del Web Serviceshttp://www.desachile.com/webservice.asmx
Analicemos un poco esta pgina. En el link Service Description, si haces clic sobre el, veremos que nos lleva a la pgina http://www.desachile.com/webservice.asmx? WSDL en donde WSDL son las siglas de Web Services Description Language, un formato XML que se utiliza para describir los Servicios Web. Volvamos atrs.
Si hacemos clic en el Link Indicadores, nos llevar a http://www.desachile.com/webservice.asmx?op=Indicadoresque es la pgina que nos interesa, por que nos dir que informacin debemos enviar para consultar el Web Services de Indicadores Financieros.
La primera seccin nos indica que es lo que debemos enviar y la segunda seccin nos indica que es lo que recibiremos. Como vemos, debemos enviar un XML con una fecha de consulta y nos retornar un XML con los resultados.
Vamos a copiar la primera seccin y pegarla en nuestra aplicacin en el cuadro que tenemos para el Soap. No olviden colocar la fecha de consulta con el formato ao mes da (ej: 20081203):
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Indicadores xmlns="Indicadores"> <Fecha>20081203</Fecha> </Indicadores> </soap:Body> </soap:Envelope>
Ahora copiamos el SOAPAction ("Indicadores/Indicadores") y lo pegamos en Action de nuestra aplicacin sin las comillas.
Ya solo nos queda la direccin Wsdl que como ya vimos antes es: http://www.desachile.com/webservice.asmx?WSDL la copiamos y la pegamos en nuestra aplicacin.
<?xml version="1.0" ?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/ " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <IndicadoresResponse xmlns="Indicadores"> <IndicadoresResult> <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemasmicrosoft-com:xml-msdata"> <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="indicadores"> <xs:complexType> <xs:sequence> <xs:element name="id" type="xs:int" minOccurs="0" /> <xs:element name="uf" type="xs:double" minOccurs="0" /> <xs:element name="usd" type="xs:double" minOccurs="0" /> <xs:element name="euro" type="xs:double" minOccurs="0" /> <xs:element name="utm" type="xs:double" minOccurs="0" /> <xs:element name="tcm" type="xs:double" minOccurs="0" /> <xs:element name="fecha" type="xs:int" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType>
</xs:element> </xs:schema> <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xmldiffgram-v1"> <NewDataSet xmlns=""> <indicadores diffgr:id="indicadores1" msdata:rowOrder="0"> <id>432</id> <uf>21429.37</uf> <usd>666.84</usd> <euro>847.53</euro> <utm>37652</utm> <tcm>127.49</tcm> <fecha>20081203</fecha> </indicadores> </NewDataSet> </diffgr:diffgram> </IndicadoresResult> </IndicadoresResponse> </soap:Body> </soap:Envelope>
Ahora ya solo queda recorrer el XML para obtener los valores, pero eso se los dejo a ustedes. Saludos y espero les sirva.