Creamos un SDT para guardar todos los ingredientes de una receta.
La Estructura del SDT es la siguiente:
Luego creamos un procedimiento y editaremos su propiedad Call protocol a SOAP
En las reglas del procedimiento se recibirá un nombre de receta y le devolveremos el SDT con todos los ingredientes que se necesitan para realizar la receta:
En el source recorro la tabla Receta filtrando por el nombre que recibo por parámetros, luego recorro la tabla hija y guardo todos los ingredientes de la receta en el SDT:
Source del procedimiento:
&SDTIngredientes.Clear()
For each Receta
Where RecetaNombre.ToUpper().Trim() = &RecetaNombre.ToUpper().Trim()
For each Receta.Ingrediente
&SDTIngredientesItem = New()
&SDTIngredientesItem.IngredienteNombre = IngredienteNombre
&SDTIngredientesItem.IngredienteCantidad = IngredienteCantidad
&SDTIngredientesItem.IngredienteUnidad = IngredienteUnidad
&SDTIngredientes.Add(&SDTIngredientesItem)
Endfor
Endfor
Compilamos y visitamos este procedimiento, nuestro servidor de aplicaciones (en este ejemplo uso Tomcat) debe devolver un WSDL como este:
Ahora todo está listo para consumir el servicio desde otra Aplicación.
Para esto, en una KB distinta, debemos importar el WSDL haciendo:
Se abrirá un popup donde indicaremos donde está alojado el servicio a consumir (URL del WS), y presionamos next.
Luego indicamos un nombre para el objeto externo que creara GeneXus, y le damos next
En el siguiente popup se mostrara información importante con respecto al objeto externo, ejemplo: que parámetros recibe, que devuelve, etc. Le damos import.
Genexus automáticamente generará en la KB 2 objetos nuevos, el objeto externo y el SDT de los ingredientes:
Si procedemos a abrir el objeto externo podremos visualizar que tiene un método llamada Execute el cual recibe el nombre de la receta, este método es el que nos permitirá consumir el servicio:
WebForm:
Eventos del web panel:
Como se puede observar en el código el consumo del servicio se hace cuando se invoca el método Execute. Luego mostramos los datos consultados por WS en la grilla.
Eventos del web panel:
Event 'ConsumirServicio'
&SDTIngredientes.Clear()
If &Nombre_Receta.IsEmpty()
Msg('Debe seleccionar una receta a consultar')
Else
&SDTIngredientes = &WebService.Execute(&Nombre_Receta)
Endif
Grid1.Refresh()
EndEvent
Event Grid1.Load
For &SDTIngredientesItem in &SDTIngredientes
&IngredienteNombre = &SDTIngredientesItem.IngredienteNombre
&IngredienteCantidad = &SDTIngredientesItem.IngredienteCantidad
&IngredienteUnidad = &SDTIngredientesItem.IngredienteUnidad
Load
Endfor
EndEvent
Como se puede observar en el código el consumo del servicio se hace cuando se invoca el método Execute. Luego mostramos los datos consultados por WS en la grilla.
Muy útil la información, gracias!
ResponderBorrarActualmente tengo la duda de como modificar el header del response de un WS publicado con Genexus 16 para agregar datos como token o usuario y contraseña. ¿Has desarrollado algo similar con ws expuestos por genexus?