En este ejemplo vamos a ver como podemos crear un SERVICIO WEB utilizando la libreria NUSOAP. Su forma de hacerlo es muy simple, si tienes ya conocimientos de PHP orientado a objetos, lo vas a poder hacer sin ningún problema
En nuestro caso vamos a enviar datos desde una aplicación realizada en VB.NET cuyos datos se encuentran almacenados en PostGresQL hacia una Base de datos MySQL.
PRIMER PASO
Vamos a definir un tipo de dato complejo en nuestro WEB Service, para esto tomemos en cuenta que los datos que va a manejar la estructura son los siguientes
- CODIGO
- NOMBRE
- GRADO
- CLAVE
//almaceno en la variable ruta la ruta de trabajo del servidor WEB
$ruta=$_SERVER['DOCUMENT_ROOT'];
require_once($ruta.'/nusoap/lib/nusoap.php');
require_once($ruta.'/webservices/base.php');
//procedo a crear el servidor
$server=new soap_server;
$server->configureWSDL('web service para control academico',$ruta.'/nusoap/lib/nusoap.php');
$nspace=$_SERVER['DOCUMENT_ROOT'];
$server->wsdl->schemaTargetNamespace=$nspace;
//se ha definido el esquema y el espacio de trabajo
//defino una estructura compleja para el alumno
En las líneas anteriores lo que hemos hecho es definir el espacio de trabajo del WEB SERVICE, seguido creamos un objeto del tipo soap_server, a continuación definimos información como: una descripción de lo que va a hacer el servicio WEB, la ruta o espacio de trabajo.
Ahora procedemos a crear la estructura compleja.
$server->wsdl->addComplexType(
'MySoapObject',
'complexType',
'struct',
'all',
'',
array(
'alu_cod'=>array('name'=>'alu_cod','type'=>'xsd:int'),
'alu_nom'=>array('name'=>'alu_nom','type'=>'xsd:string'),
'alu_grado'=>array('name'=>'alu_grado','type'=>'xsd:string'),
'alu_clave'=>array('name'=>'alu_clave','type'=>'xsd:string')
)
);
- La instrucción MySoapObject, es el nombre del nuevo tipo de dato se lo puede poner cualquiera.
- Definimos un array que contendrá los datos que va a manipular con sus respectivos tipos de datos, en nuestro caso son alu_cod, alu_nom, alu_grado, alu_clave.
Seguidamente nuevamente voy a crear un nuevo tipo complejo que haga referencia la tipo complejo creado anteriormente.
$server->wsdl->addcomplexType(
'ArrayObjetosSoap',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:MySoapObject[]')),
'tns:MySoapObject');
Si te fijas este nuevo tipo complejo se va a llamar ArrayObjetosSoap y va a manejar la estructura compleja llamada MySoapObject.
Una vez definidos los tipos de datos que van a permitirnos manipular la información enviada desde VB.NET, procedemos a crear la función que receptara los datos y los almacenara en MYSQL en nuestro HOSTING.
//esta funcion es la que nos permite insertar datos con el webservices en la tabla alumno
function insertadatos1($MySoapObject,$nregistros){
$db=base::getInstance();
for($j=0;$j<=$nregistros;$j++){
$vector=$MySoapObject[$j];
//saco la primera posicion o elemnto del vector
$alu_cod=current($vector);
//obtengola siguiente posicion del vector
$alu_nom=next($vector);
$alu_grado=next($vector);
$alu_clave=next($vector);
if (existendatos($alu_cod)==0) {
$db->setQuery("Insert into ALUMNO(ALU_COD,ALU_NOM,ALU_CURSO,ALU_CLAVE) values('".$alu_cod."','".$alu_nom."','".$alu_grado."','".$alu_clave."')");
if( $db->alter() ){
// return 1;
}
else{
// return 0;
}
}
}
return 0;
}
En este ejemplo hemos utilizado una referencia al MVC de joomla para acceder a la Base de Datos. Debes tomar en cuenta también que en tu Base de datos MySQL debes de tener una tabla con los mismos tipos de datos que los definidos en la estructura compleja.
Hasta este punto hemos creado un WEB SERVICE cuya función va a ser únicamente la de enviar datos hacia MySQL, podemos crear también otra función que devuelva datos, mucho mas simple.
Ahora fíjate en el código VB.NET que nos permite procesar los datos y enviarlos hacia MYSQL mediante este WEB SERVICE.
- Primer paso definir un objeto de la referencia al WEB SERVICE creado
- Diseñar un método que englobe el envío de datos
Dim metodoinsertaalumno As New datosonline.webserviceparacontrolacademico
Private Sub agregaalumnos_ws(ByVal nregistros As Integer, ByVal tbl As DataTable)
Dim objsoap(nregistros) As MySoapObject
Dim j As Integer
Dim aux As Integer
Try
For j = 0 To nregistros
objsoap(j) = New MySoapObject
objsoap(j).alu_cod = tbl.Rows(j).Item(0)
objsoap(j).alu_nom = tbl.Rows(j).Item(1)
objsoap(j).alu_grado = tbl.Rows(j).Item(2)
objsoap(j).alu_clave = tbl.Rows(j).Item(3)
Next
aux = metodoinsertaalumno.insertadatos1(objsoap, nregistros)
MessageBox.Show("Datos enviados con exito", "GMS", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Y para ejecutarlo lo hacemos mediante el siguiente código
agregaalumnos_ws(tablaalumno.Rows.Count - 1, tablaalumno)
2 comentarios:
Hola, me pareció muy interesante tu publicación, bien básica y bien explicada.
Saludos !!
puedes pasar tu codigo porfaa
Publicar un comentario