Unofficial Content
  • This documentation is valid for:

Sincronización con WebServices

 

Introducción


Sincronizar con WebServices es una manera de sincronizar datos que nos permite independizarnos de la base de datos centralizada ya que somos nosotros los que programamos el proceso de sincronización.
Además podemos definir nuestras propias reglas o filtros.
El proceso consiste en tener un WebService o varios que se encarguen de recibir o mandar colecciones de datos, no importa en que lenguaje esté programado ese WebService .
Desde el modelo .NET Mobile se consume ese WebService y en el mismo se programa la lógica de la sincronización.
Veamos un Ejemplo

 

Ejemplo

 

Estructuras

Se tiene una Base de conocimiento sobre una base de datos cualquiera con las siguientes estructuras:
 
 


La idea es modelar un sistema donde se ingresan incidentes y se asigna un usuario para atender ese incidente.
Supongamos ahora que nos piden implementar un sistema en .NET Mobile que permita a los Usuarios obtener la información de que incidentes tiene que atender en forma remota desde su pocket.

Un primer paso a tener en cuenta es definir la colección de datos que nos interesa enviar o recibir.
En este caso definimos un SDT Datos, colección con los atributos que necesitamos
 


Estos datos son los que vamos a enviar o a recibir.
Para cada una de estas funciones vamos a hacer un procedimiento que va a ser el webservice que luego consumiremos (para que un procedimiento sea un WebService hay que definirlo como Main, con call protocol = SOAP)
 

WebServices


El Procedimiento para entregar los datos lo vamos a implementar así:
 
for each 
    where UsuarioId = &UsuarioId 
    where IncidenteAtendido <> "Y" 

        &incidente = New Datos.Incidente() 
        &incidente.IncidenteId = IncidenteId 
        &incidente.IncidenteFecha = IncidenteFecha 
        &incidente.IncidenteDsc = IncidenteDsc 
        &datos.Add(&incidente) 
      
endfor 
Con un parm:
parm(&UsuarioId, &datos); 
O sea, recibimos un usuario, cargamos en un SDT los incidentes no atendidos de ese usuario y se los entregamos en la colección.

El Procedimiento para recbir los datos lo vamos a implementar así:
 

 
&OK = 0
For &incidente in &datos 
  &OK =1
   for each
    where  &incidente.IncidenteId = IncidenteId
   
        IncidenteDsc = &incidente.IncidenteDsc
        IncidenteAtendido = "Y"
   endfor  
 endfor
Y el parm
 
parm(&UsuarioId, &datos, &OK);
En este caso recibimos un usuario y los datos modificados por el mismo, los procesamos leyendo la colección modificando los registros de la base centralizada y retornamos la cantidad de resgistros que procesamos.

 

Consumo de los WebServices


Supongamos que creamos la base de conocimiento .NET Mobile con la siguiente estructura:
 


Vamos a importar los servicios por medio del WSDL Inspector teniendo presente usar la IP de la máquina con el WebService en la URL del wsdl.
Luego el consumo de esos servicios lo hacemos de la siguiente forma.

Para el servicio de entrega de datos, vamos a implementar un procedimiento que haga lo siguiente:
 

 
&ws.Execute(&Usuario,&Datos)

for &incidente in &Datos

    new
        IncidenteId = &incidente.IncidenteId
        IncidenteFecha = &incidente.IncidenteFecha
        IncidenteDsc = &incidente.IncidenteDsc
        IncidenteAtendido = "N"
    endnew
endfor
msg(&Datos.Count.ToString()  ' registros recibidos ') 
En este caso pasamos el Usuario y recibimos los datos , con los cuales creamos registros en nuestra tabla.

Para el proceso que recibe los datos, vamos a implementarlo de la siguiente manera:
 

 
for each
      where IncidenteAtendido = "Y"

         &incidente = New Datos_Incidente()
         &incidente.IncidenteId = IncidenteId 
         &incidente.IncidenteFecha = IncidenteFecha 
         &incidente.IncidenteDsc = IncidenteDsc 
         &datos.Add(&incidente)
endfor
&ws.Execute(&usuario,&Datos, &OK)
msg(&OK.ToString()  'registros enviados')
Cargamos en la colección los incidentes que fueron atendidos y los entregamos al servicio.
 

Consideración


En caso de que el servicio no esté disponible se va a producir un error que cancelará la aplicación.
Si se quiere enmascarar ese error se debe programar de la siguiente forma.
 
&location = getlocation('Servicio_ServicioDownload') 
&location.CancelOnError = 2 
Donde &location es del tipo location y Servicio_ServicioDownload es el tipo de la variable webservice cambiando los puntos por guiones

Luego de ejecutar el Execute del WebService se debe consultar el error:
GetSoapErr(), si es distinto de 0 no hay error.

Se pueden ver los errores con GetSoapErr() y GetSoapErrMsg()
Last update: April 2024 | © GeneXus. All rights reserved. GeneXus Powered by Globant