Conectividad con WS externos

G·Forms es capaz de conectarse a servicios web externos a su sistema para realizar validaciones, autorellenos o bien obtener opciones. Dicha funcionalidad se hace posible a través de las expresiones de tipo Web Service.

Dichos servicios web tienen que ser tipo REST, de tal forma que G·Forms pueda invocar la URL del servicio y capturar los datos que este devuelva.

Para crear una expresión de tipo WS bastará con hacerlo desde el catálogo de expresiones, definiéndola como tipo ConsultaSQL, estableciendo el tipo de retorno y el texto de la misma así como introducir el código DRL que se le quiera asignar. Es importante que el código DRL comience con el prefijo URL para que G·Forms identifique la expresión como tipo WS.

Por defecto, G·Forms cachea las invocaciones a los WS para que únicamente se invoquen una vez en cada refresco del formulario. Si se desea deshabilitar el cacheo para un WS concreto se debe añadir al código DRL la cadena "NoCache".

Por último, en datos extra se pondrá la URL del Web Service. Cuando la llamada al ws vaya a ser ejecutada, G·Forms le enviará una serie de parámetros para que desde el servicio web se pueda identificar desde donde se está invocando. A continuación se describen los parámetros enviados así como el modo en que se envían.

Un ejemplo de una defición de servicio web para una validación (que siempre devuelva true) podría ser la siguiente:

@RequestMapping(value = { "/myService/{responseValue}" }, method = RequestMethod.GET)
public ModelAndView myService(
    @RequestParam(value = "instance") String externalId,
    @RequestParam(value = "question_id") String questionId,
    @PathVariable String responseValue,
    @RequestParam(value = "readonly") String readOnly,
    @RequestParam(value = "selectedLocale") String selectedLocale,
    @RequestParam(value = "admittedLocales") String admittedLocales,
    @RequestParam(value = "defaulLocale") String defaulLocale) {
        GenericListResponse glr = new GenericListResponse();
        String[] returnValue = { "true" };
        List<String[]> values = new ArrayList<String[]>();
        values.add(value);
        glr.setValores(values);
        return new ModelAndView("xmlMarshaller", "object", glr);
}

El tipo de retorno del WS rest debe ser XML para que G·Forms pueda interpretarlo correctamente.