12/12/07

Inserción de formularios mediante acceso anónimo

Guardar un formulario InfoPath en una librería no tiene mayor problema que el de configurar nuestro Submit indicándole la librería donde vamos a insertarlo. Este problema se agrava cuando lo que tenemos son formularios accesibles anónimamente, ya que SharePoint no nos dejará guardarlos.
Podemos habilitar las Libraries para que el usuario anónimo pueda ver elementos, pero este tipo de usuario no tendrá más permisos. Para solventar esto lo que necesitamos es una estructura puente, con permisos suficientes, que nos guarde el formulario en la librería correspondiente. Esta estructura puente será un Web Service. El Web Service contendrá un único método web:

[WebMethod]
public void SubmitToFormLibrary(string siteName, string webName, string formLibraryName, string formName, string formXml)
{
formName = formName.TrimEnd('.');
SPSite site = new SPSite(siteName + "/");
SPWeb web = site.OpenWeb(webName);
SPFolder folder = web.GetFolder(formLibraryName);
foreach (SPFile file in folder.Files)
{
if (file.Name.Replace(".xml", "") == formName)
throw new Exception("El fichero ya existe.");
}
folder.Files.Add(formName + ".xml", UnicodeEncoding.UTF8.GetBytes(formXml));
}


al cual le pasaré una serie de parámetros que me determinarán el lugar donde irá a parar el formulario:
siteName: Nombre del site
webName: Nombre del web
formLibraryName: Nombre de la librería
formName: Nombre del formulario
formXml: Contenido del formulario

En el web.config de nuestro servicio web añadiremos el siguiente código:

En “identity” pondremos un usuario que tenga los permisos suficientes para poder grabar el formulario en la librería. Una vez configurado el servicio web podemos probarlo para ver que inserta correctamente:

Pinchamos en nuestro servicio web y veremos los parámetros que requiere el mismo.


Rellenamos los datos y probamos que lo inserta bien:




Ya tenemos validado que el web service funciona. Ahora pasamos a crearnos un formulario y configuraremos el Submit del mismo.

Antes de comenzar hay que tener en cuenta que necesitamos una Seccion, que estará oculta y que contendrá la información de los diferentes parámetros que se le pasarán al web service. El resto del formulario se creará como nosotros queramos.



Nos creamos el botón de ‘Submit’ y lo configuramos para que envíe datos al web service:





Añadimos una conexión de Submit:




Seleccionamos nuestro método web y asignamos los campos que tenemos del formulario a los diferentes parámetros del método web:




La única excepción será el último parámetro, que es el contenido del formulario. Para este campo seleccionaremos la opción de “Entire Form”:


Y ya tenemos nuestro formulario configurado para que haga el Submit mediante un web service. Ahora sólo nos faltará probarlo y comprobar en la librería que se ha grabado todo correctamente:


Enviamos:


Comprobamos la librería:



Saludos,
Juan Alcalá