Llamadas a servicios web desde formularios de InfoPath 2007
Una pequeña advertencia. En muchas ocasiones queremos llamar a una fuente de datos externa al abrir un formulario de InfoPath hospedado en MOSS, y puede ser que se nos ocurra hacer esta llamada desde dentro del evento InternalStartup del formulario.
En mi caso, se trata de un formulario diseñado originalmente en blanco y en el que las llamadas a los servicios web que actúan como fuentes externas de datos se realizan “manualmente” desde código en el proyecto VSTO asociado al formulario. No se trata de un formulario creado con conexión directa a servicios web ni nada.
Sin embargo, si hacemos uso del evento InternalStartup, tendremos problemas a la hora de subir el formulario a MOSS, que nos dará un par de mensajes de error, que aunque crípticos, como es habitual en MOSS, nos apunta un poco en la dirección correcta.
Los mensajes son:
No se admite esta operación en este momento, que no ayuda demasiado cuando no se sabe de qué se trata, y Error en el método InternalStartup del código del formulario, que si que apunta un poco mejor en la dirección de la naturaleza del error.
Así pues, la solución pasa por no hacer nada dentro de InternalStartup, cuya única función es enlazar controles con sus eventos, y hacer uso del evento Loading, manejado desde FormEvents_Loading para realizar nuestras llamadas manuales a fuentes externas de datos. Creamos el evento dentro del proyecto de código VSTO mediante el menú de Herramientas -> Programacion -> Evento Loading.
Dentro de ese evento, ya podemos realizar todas las llamadas que queramos a fuentes externas. Y si todo va bien, podremos subir el formulario a MOSS tranquilamente.
La curiosidad reside en que si lanzamos el formulario en local, es decir, lanzando en modo depuración el proyecto VSTO del formulario, el código residente en el evento InternalStartup se ejecutará sin problemas y sin advertencia alguna. El problema solamente se manifiesta a la hora de publicar en MOSS.
Saludos