En el Tec estamos usando en estos momentos varias plataformas en los diferentes sistemas o programas, esto por que cuando se inicia con una nueva tecnología, tanto de Hardware o de Software, se requiere que se cambien o se migren estos sistemas.
Pero muchas veces no se puede migrar todo en un solo momento. Años atrás cuando yo llegué al tec al inicio de los 90's se utilizaba una computadora IBM 4361 con una base de datos Cullinet, utilizando los lenguajes de programación RPG y COBOL. En ese entonces se inició con la migración hacia Servidores Everest utilizando una red Novell, se sigui utilizando Cullinet.
Algunos sistemas se empezaron a desarrollar en otros lenguajes de programación como en FoxProln, como los sistemas de Matricula de Estudiantes.
También se adquirieron otros servidores mas modernos como los Intergraph y despues los Compaq y los HP.
Junto con los servidores se inició con otra plataforma de desarrollo en Sybase y Visual Basic 3.0. Seguidamente se utiliza la versión de Visual Basic 6.0, esto alrededor del año 93.
Después por el año 99 se inicia con tecnología asp, para iniciar con desarrollo de páginas Web. Alrededor del 2002, se inicia otra gran migración esta vez cambiando la base de datos Sybase por SqlServer2000, para iniciar con un nuevo desarrollo de .Net.
Estos últimos cambios, por el tamaño de los sistemas se fueron dando paulatinamente, ajustando solamente los nuevos desarrollos para .Net, lo cual en el 2006 se inicia con la utilización de Servicios Web para el intercambio de información entre los sistemas.
Investigando, pude averiguar una forma de que los sistemas desarrollados en Visual Basic 6.0 puedan utilizar los servicios web.
Para acceder un WebServices desde VB6 se usa la referencia Microsoft XML versión 2 (debería funcionar otra posterior)
Se utilizará el ejemplo el método de conocer el jefe de un funcionario, llamado ConsultarJefe, que recibe como parámetro la cédula del funcionario y retorna la cédula del jefe junto con el código de correo electrónico y el nombre completo.
Cuando se manda la información al servicio Web, se tiene que hacer usando los protocolos que el .NET entiende, el usado en este ejemplo es SOAP, el cliente siempre usará XML, esa es la razón de que se tiene una referencia a Microsoft XML versión 2, ya que se usará algunas de las clases incluidas en ella para poder manejar el código XML, entonces se declaran dos constantes con los encabezados del SOAP que genera:
Cuando se envía un comando POST se envía el comando al servicio Web y el servicio Web devolverá una respuesta, esa respuesta tendrá que procesarla también el objeto XMLHTTPRequest.
La pantalla que utilicé es la siguiente:
El evento del click para enviar el mensaje sería el siguiente:
Private Sub cmdEjecutar_Click()
'
Dim parser As DOMDocument
Set parser = New DOMDocument
' cargar el código SOAP para CaF
parser.loadXML cSOAPCaF
'
' Indicar el parámetro a enviar
parser.selectSingleNode("/soap:Envelope/soap:Body/ConsultarJefe/pCedula").Text = txtC.Text
'
' Mostrar el código XML enviado al servicio Web
Text1.Text = parser.xml
'
enviarComando parser.xml, "http://tempuri.org/ConsultarJefe"
'
' enviarComando
'
End Sub
El nuevo código para enviar el comando al servicio Web y el que procesa el código recibido del servicio Web.
Private Sub enviarComando(ByVal sXml As String, ByVal sSoapAction As String)
' Enviar el comando al servicio Web
'
' usar XMLHTTPRequest para enviar la información al servicio Web
Dim oHttReq As XMLHTTPRequest
Set oHttReq = New XMLHTTPRequest
'
' Enviar el comando de forma síncrona (se espera a que se reciba la respuesta)
oHttReq.open "POST", txtURL.Text, False
' las cabeceras a enviar al servicio Web
' (no incluir los dos puntos en el nombre de la cabecera)
oHttReq.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
oHttReq.setRequestHeader "SOAPAction", sSoapAction
' enviar el comando
oHttReq.send sXml
'
' este será el texto recibido del servicio Web
procesarRespuesta oHttReq.responseText
'
End Sub
Private Sub procesarRespuesta(ByVal s As String)
' procesar la respuesta recibida del servicio Web
Text1.Text = s
'
' Poner los datos en el analizador de XML
Dim parser As DOMDocument
Set parser = New DOMDocument
parser.loadXML s
'
On Error Resume Next
'
txtF.Text = "Error"
txtF.Text = parser.selectSingleNode("/soap:Envelope/soap:Body/ConsultarJefeResponse/ConsultarJefeResult//Column1").Text
txtCorreo.Text = "Error"
txtCorreo.Text = parser.selectSingleNode("/soap:Envelope/soap:Body/ConsultarJefeResponse/ConsultarJefeResult//Column2").Text
txtNombre.Text = "Error"
txtNombre.Text = parser.selectSingleNode("/soap:Envelope/soap:Body/ConsultarJefeResponse/ConsultarJefeResult//Column3").Text
'
If Err.Number > 0 Then
Text1.SetFocus
End If
End Sub
Gracias a un sitio web llamado elguille, pude reproducir el procedimiento para acceder webservices, fue de una gran ayuda. En realidad no es tan complicado y funcionó muy bien.
Referencias
http://www.elguille.info/NET/dotnet/clienteVB6servicioWeb.htm