martes, 31 de marzo de 2009

[Infopath] Control de selección de usuario

Cuando diseñamos un formulario para ser utilizado en Infopath Forms Services debemos tener en cuenta que no todos los controles son compatibles con el explorador. Esto se debe a que el cliente de Infopath es mucho más rico que el motor de Infopath Form Service, debemos verificar en el diseño si nuestro control es compatible en modo explorador.

Nos puede surgir el caso en el que el cliente nos solicite que el formulario pueda seleccionar un usuario del dominio, ¿Es este control compatible?, pues sí (a medias), pero debemos agregarlo a los controles personalizados ya que no aparece en la lista de controles estándar.

Desde la ventana de “Tareas de diseño” > seleccionamos agregar u ocultar controles personalizados > agregar… > control activex > contact selector

Para poder utilizarlo tendremos que tenerlo registrado, aunque también podemos hacer que el propio fichero xsn incluya el fichero .cab con la instalación del Activex.

Para que sea compatible con Infopath Forms Service debemos marcar “No incluir un fichero cab”.

En la pantalla siguiente de enlace de propiedades seleccionamos “value”. A continuación indicamos a Infopath como se guardarán los datos, seleccionamos “Campo o grupo (cualquier tipo de datos)”.

Al finalizar dispondremos del control para ser arrastrado al formulario. Solo quedaría asociarlo a un grupo de datos, pero este debe tener una estructura determinada.


En la sección de orígenes de datos “agregamos un campo o grupo” > seleccionamos > grupo > indicamos un nombre de grupo. Repetimos el mismo proceso e indicamos el nombre que representa el registro que se repetirá por cada uno de los controles, no os olbideis de marcar “repetir”. Por último agregamos al anterior grupo los campos de tipo texto: DisplayName, AccountId y AccountType.

Solo quedaría enlazar el control al grupo extensible seleccionando el control y con el botón derecho "cambiar enlace".


Al probar nuestro formulario sobre Sharepoint veremos algo similar a la siguiente imagen:


La entrada original la podéis encontrar en: Using the Contact Selector Control

lunes, 30 de marzo de 2009

[Infopath] Mostrar un formulario desde un WebPart

Siguiendo con el post anterior “[Infopath] Orígenes de datos”, veremos como visualizar un formulario de Infopath desde un WebPart. Recordar que para poder renderizar un formulario necesitaremos de Infopath Services, además tendremos que haber habilitado la compatibilidad del formulario para que se pueda abrir en el explorador, desde la opciones del formulario > Compatibilidad > compatibilidad de explorador > marcaremos “Diseñe una plantilla de formulario que se pueda abrir en un explorador o infopath”.

Utilizaremos el WebPart “XmlFormView” que está alojado en la librería Microsoft.Office.InfoPath.Server.dll. Antes de poder agregarlo debemos asegurarnos que lo tenemos registrado correctamente como safecontrol, agregaremos en el fichero web.config la entrada:

<SafeControl Assembly="Microsoft.Office.InfoPath.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.Office.InfoPath.Server.Controls" TypeName="*" Safe="True" />

A continuación iremos a la galería de elementos web en la configuración de nuestro sitio > seleccionaremos la opción “Nuevo” > marcaremos el webpart “Microsoft.Office.InfoPath.Server.Controls.XmlFormView” > Llenar galería. Esto hará que el webpart esté disponible para ser agregado desde cualquiera de las páginas de nuestra colección.

En la página que deseemos agregar el WP la editaremos y agregaremos el WP con título “XmlFormView”. La primera vez puede que nos muestre un error de infopath diciendo que no tenemos la plantilla adecuada, esto se debe a que todavía no lo hemos configurado y está intentando renderizar el formulario.

Editaremos entonces las propiedades del webpart añadido y en la sección “Enlace de datos” indicaremos el fichero xsn y la librería donde se guardarán los datos xml generados por el formulario.

En la propiedad XsnLocation indicaremos la ruta del fichero xsn, en mi caso he publicado desde Infopath el formulario de notas de gasto en una biblioteca de documentos de forma que la ruta queda: http://w2k3r2:17092/FormServerTemplates/EjemploNotasDeGastos.xsn

Si os aparece siempre el mensaje “Formulario cerrado” verificar el fichero de log de Sharepoint, que tenéis la url correctamente, que habéis indicado una ruta para SaveLocation y la propiedad “EditingStatus”. Aseguraros además que habéis publicado correctamente el formulario desde la administración central y lo habéis activado para la colección actual.


domingo, 29 de marzo de 2009

[Infopath] Orígenes de datos

Con infopath podremos manejar datos procedentes de distintos orígenes: Xml, Una base de datos, un servicio web y una lista de sharepoint.

Para manejar los orígenes de datos iremos al menú Tareas de diseño > Orígenes de datos, siempre tendremos al menos el origen de datos Principal como comentábamos en el anterior post “Formularios con Infopath”. Recordar que el origen de datos principal contiene la estructura del xml que generará Infopath al guardar el formulario.

Para agregar una nueva conexión seleccionaremos “Agregar conexiones de datos…”. Al seleccionar esta opción se abrirá una ventana con las conexiones de los distintos orígenes configuradas. Para agregar un origen de datoa tendremos que configurar primero la conexión y el tipo de acción lectura/escritura.

Los datos sensibles de las conexiones como pueda ser el usuario y contraseña se pueden guardar o bien incrustados en el infopath o en una librería de conexiones. Si incrustamos los datos de conexiones se guardarán dentro del fichero y solo podremos modificarlos editando el fichero xsn dede Infopath. Lo recomendable es que usemos fichero de conexiones, que consisten en ficheros con los datos de conexión y se alojan en sahrepoint, en caso de cambiar algún dato de conexión (por ejemplo al cambiar de entorno), solo tenemos que tocar el fichero de conexión y subirlo de nuevo. 

Leer datos

Agregaremos entonces una nueva conexión e indicaremos que deseamos “recibir datos”, a continuación indicamos desde donde queremos leerlos.

Leer de una base de datos

Mediante esta opción podremos ejecutar una consulta SQL contra una base de datos. Indicamos entonces que queremos leer de una base de datos y agregamos una nueva conexión. En mi ejemplo he creado una tabla con los tipos de gastos en mi SqlServer. La primer vez tendremos que crear un fichero de conexión de datos que se almacenará en nuestro pc, seleccionando la opción “Nuevo origen de datos” indicamos el tipo de conexión, en mi caso “Microsoft Sql Server“ y a continuación los datos de conexión (servidor, usuario, contraseña, etc). En caso de disponer del fichero solo tendremos que seleccionarlo.

Una vez hemos conectado con nuestra bbdd, elegiremos las tablas y campos a consultar o bien editamos nuestra consulta sql.

Por último, podremos indicar si queremos que almacene los datos en el propio fichero xsn y si queremos que ejecute la consulta al abrirse el formulario.

 

Ahora que tenemos configurado nuestro origen de datos, haremos que el control de tipo de gastos muestre los datos de este origen. En las propiedades del control seleccionamos “Buscar valores desde un origen de datos externo” > indicamos el origen previamente configurado. En el campo Entradas seleccionamos la tabla o la entrada de registro que queremos mostrar, en “valor” el campo que contiene valor del elemento seleccionado  y en “nombre para mostrar” el campo con la descripción que visualizará el usuario.

Para verificar que hemos configurado correctamente todo podemos realizar una vista preliminar y comprobar que se cargan todos los datos.

 

Leer datos de un servicio web

Seleccionamos como antes “agregar conexión de datos” > recibir > servicio web, indicamos la url de nuestro servicio web, para el ejemplo voy utilizar los servicios de Sharepoint para leer el contenido de una lista con los tipos de gastos, de manera que la url sería “http://w2k3r2:17092/_vti_bin/lists.asmx?WSDL”. Al darle a “Siguiente” el asistente de conexión mostrará todos los métodos disponibles, para el ejemplo he seleccionado “GetListItems” que corresponde con el método que devuelve todos los elementos de una lista de Sharepoint. Como existe un problema de interpretación de tipos entre Infopath y los servicios de Sharepoint, he necesitado de un servicio web intermedio que tenga una definición de tipos de parámetros que entienda Sharepoint (ver ejemplo : http://wssdev.blogspot.com/2007/06/infopath-use-sharepoint-web-services.html).

Al aplicar el servicio de proxy los tipos los he convertido a “string”, con lo que puedo establecer los parámetros obligatorios desde Infopath con la opción “establecer valor”. Una vez agregado el origen de datos volveremos a configurar nuestro control para que lo utilice. Fijaros que en este caso la estructura XML del origen de datos generada por el servicio es más compleja que la anterior.

Podéis descargaros el código del servicio web intermedio en http://blogs.renacimiento.com/mcortes/Documentos/WebService1.zip

 

 

Insertar Datos

Solo nos queda ver como guardar los datos introducido en el formulario. A este proceso Infopath lo llama “Envío de datos” y disponemos de los siguientes tipos de orígenes de datos: a un servicio web, a una biblioteca de sharepoint, por correo electrónico y a una página ASP.NET. En este caso no disponemos de la opción de una bbdd por lo que si queremos guardarlos en una tabla tendremos que utilizar un servicio web o una página ASP.Net. El problema que podemos encontrarnos si lo hacemos de este modo es que el envío puede que sea de un nuevo elemento o de una actualización, por lo que tendremos que ser nosotros los que detectemos esto.

Si lo queremos guardar en una biblioteca de sharepoint tenemos dos opciones, o bien definimos nuestro formulario como plantilla de una biblioteca o hacemos que el envío se haga hacia una biblioteca independientemente de donde se aloje nuestro formulario.

Para hacer que nuestro formulario aparezca al darle a´l menú “Nuevo elemento” de una biblioteca seleccionaremos la opción de archivo > publicar > en un servidor de sharepoint > indicamos la url.

Para enviar los datos a una biblioteca de documentos, seleccionamos Administrar conexiones de datos > agregar > enviar > a una biblioteca de documentos. Una vez creado el origen de envío indicaremos al formulario que debe usarlo para enviar los datos desde la opción Herramientas > opciones de envío > permitir a los usuarios enviar este formulario > biblioteca de documentos de sharepoint > Seleccionamos nuestra conexión de envío. Esto hará que al visualizar nuestro formulario aparezca una opción con el título “Enviar” y al seleccionarlo enviará el xml generado por infopath a la biblioteca indicada.

 

Ficheros de conexiones de datos

Hasta ahora las configuraciones de las conexiones a nuestros orígenes de datos se han guardado de forma embebida en el fichero xsn. Si ahora tuviéramos que utilizar nuestro formulario en otro entorno tendríamos que volver a editarlo y modificar los datos de conexión. Una forma de evitar esto es mediante el uso de ficheros de conexión, básicamente son ficheros xml con los datos de conexión que tendremos que subir a Sharepoint.

Podemos alojar los ficheros en dos sitios en una biblioteca de conexiones de una colección de sitios específica o en una biblioteca de conexiones de la administración central. Os recomiendo guardarlos en la administración central, aunque dependiendo del tamaño de vuestra granja puede ser recomendable la otra opción.

Para crear un fichero de conexión abriremos la lista de conexiones en “Administrar conexiones de datos” > Convertir > indicamos la url de la biblioteca de conexiones > seleccionamos el tipo de biblioteca de conexión.

Una vez guardado el fichero podéis descargarlo de la biblioteca y editarlo como un fichero xml.

Mi fichero de conexión a la bbdd es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<?MicrosoftWindowsSharePointServices ContentTypeID="0x010100B4CBD48E029A4ad8B62CB0E41868F2B0"?>
<udc:DataSource MajorVersion="2" MinorVersion="0" xmlns:udc="http://schemas.microsoft.com/office/infopath/2006/udc">
    <udc:Name>TiposDeGastos</udc:Name>
    <udc:Description>Format: UDC V2; Connection Type: Database; Purpose: ReadOnly; Generated by Microsoft Office InfoPath 2007 on 2009-03-30 at 01:29:53 by PIGNOISE\Administrador.</udc:Description>
    <udc:Type MajorVersion="2" MinorVersion="0" Type="Database">
        <udc:SubType MajorVersion="0" MinorVersion="0" Type=""/>
    </udc:Type>
    <udc:ConnectionInfo Purpose="ReadOnly" AltDataSource="">
        <udc:WsdlUrl/>
        <udc:SelectCommand>
            <udc:ListId/>
            <udc:WebUrl/>
            <udc:ConnectionString>Provider=SQLOLEDB.1;Password=misgastos;Persist Security Info=True;User ID=misgastos;Initial Catalog=Pruebas;Data Source=w2k3r2;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=PIGNOISE;Use Encryption for Data=False;Tag with column collation when possible=False</udc:ConnectionString>
            <udc:ServiceUrl UseFormsServiceProxy="false"/>
            <udc:SoapAction/>
            <udc:Query>select "IdTipo","Descripcion","Activo" from "dbo"."TiposDeGastos" as "TiposDeGastos"</udc:Query>
        </udc:SelectCommand>
        <udc:UpdateCommand>
            <udc:ServiceUrl UseFormsServiceProxy="false"/>
            <udc:SoapAction/>
            <udc:Submit/>
            <udc:FileName>Specify a filename or formula</udc:FileName>
            <udc:FolderName AllowOverwrite=""/>
        </udc:UpdateCommand>
        <!--udc:Authentication><udc:SSO AppId='' CredentialType='' /></udc:Authentication-->
    </udc:ConnectionInfo>
</udc:DataSource>

 

La forma de subir los ficheros está muy bien explicada en el post de Juan Carlos González enMOSS: Publicación de formularios Infopath…el otro camino!.

 

Podéis descargaros la nueva plantilla en http://blogs.renacimiento.com/mcortes/Documentos/EjemploNotasDeGasto2.xsn

Podéis descargaros el código del servicio web intermedio en http://blogs.renacimiento.com/mcortes/Documentos/WebService1.zip

 

Hasta aquí los orígenes de datos, hay muchas más opciones pero lo que no hay es tiempo, así que os dejo trastear.

jueves, 26 de marzo de 2009

[Sharepoint Online] Error Privacy Statement

Al manejar los servicios web de Sharepoint Online nos encontraremos con el siguiente error al consultar la estructura WSDL:

The requested page does not contain a link to the Microsoft Online Services Privacy Statement. The page cannot be displayed until a link to the Privacy Statement is added

Si intentamos acceder desde Internet explorer veremos un mensaje de error de formato de Xml.

Si vemos el código fuente de la página de error veremos el mensaje y además nos recomienda consultar el siguiente enlace Add the Privacy Statement to your SharePoint Online Site. Esta página de ayuda nos informa que debemos tener en nuestras páginas, en especial la masterpage, la siguiente entrada:

<microsoftOnline:RequiredContentPlaceHolder id="RequiredContentPlaceHolder" runat="server"/>

Al parecer parece que es un error que van a solucionar en breve, de momento, como solución tendremos que implementar nuestra claxe proxy conectando contra un servicio de un MOSS o WSS normal y luego cambiaremos las credenciales y la url apuntando al servicio de Sharepoint Online.


Dependemos del Software o de las personas?

En estos momentos de crisis en los que todo el mundo recurre a los recortes como primera medida se pueden plantear situaciones peculiares, me quiero dirigir sobre a todo a los recortes que se hacen desde las grandes cifras y no desde el conocimiento del negocio. Es de todos conocidos los despidos masivos que se están realizando en estos últimos meses, no quiero entrar a valorarlos, pero si plantear ¿qué pasa cuando prescindimos del personal de TI o encargado de mantener grandes sistemas de los que depende nuestra empresa?.

Los sistemas o aplicativos se construyen para ser utilizados por personas, ya sea para aumentar la productividad o bien para prestar un servicio a los clientes. La interacción de las personas para el funcionamiento y provisionamiento de los sistemas debería ser muy inferior a la que se necesitaría para realizar ese servicio de forma manual. Esa es la teoría de los grandes números, pero ¿qué pasa cuando el sistema es muy grande y no se disponen de las personas suficientes para mantenerlo adecuadamente?.

Mantener un sistema no se aprende de la noche a la mañana, tienes que conocer el negocio, la tecnología y cómo está implantado. Aunque documentemos mucho nuestros sistemas y tengamos a personal cualificado, siempre existirá un conocimiento que reside en las personas y no en la empresa, esto puede producirse en mayor o menor medida en función del tamaño de la empresa y la organización de los departamentos.

Se están produciendo casos en los que algunas organizaciones (e incluso organismos oficiales) están haciendo tantos recortes en personas que de repente se encuentran con que no son capaces de mantener los sistemas que ya tienen implantados, “¿y esto cómo se hacía?”, “¿y esto quien lo lleva?”, son los que quedan los que entonces tienen que hacer apretones para intentar pasar el temporal.

Se puede dar el caso que algunos recortes excesivos se hagan conscientemente para hacer una “limpieza” con la idea de “metemos a un chavalito que lo aprende en dos días y ya verás que bien”, jeje, Esto si se hace como costumbre al final es perjudicial, debe existir un equilibrio de perfiles y experiencias, si esto no existe tenemos “parche sobre parche”.

También puede ocurrir que nuestro negocio dependa de un sistema, ¿ qué pasará si prescindimos entonces de una parte importante de los que lo mantienen?.

 

Bueno, mi conclusión es que se debe llegar a un equilibrio entre la dependencia del software y de las personas, debemos tomar medidas para evitar una dependencia extrema de alguno de los dos. Hay que enfatizar el documentar, planificar, organizar, la motivación de las personas y lo más importante de todo: preparar a las personas. También debemos evitar las parcelas de conocimiento, el knowhouse es beneficioso para todos.

 

Así que, “a trabajar Fonseca!!

domingo, 22 de marzo de 2009

Un año en Renacimiento

Ya hace un año que me incorporé a Renacimiento, como pasa el tiempo. Hace un año tomé la dura decisión de saltar de empresa y aposté por Renacimiento como una oportunidad profesional. Haciendo balance creo que no me equivoqué.

Al principio me costó adaptarme a algunas formas de trabajo, ya que venía de un formato muy distinto. Me acuerdo en el primer proyecto hasta me preguntó mi primer gerente que porqué estaba “haciendo horas de más”, algo inconcebible para mí siempre trabajaba más de 8 horas. Me argumentaba que “si tenía que trabajar más horas era porque se había estimado mal o había un problema no detectado”, cosa que no era el caso. Con el tiempo me fui adaptando a esta forma de trabajar, no es que trabaje menos, sino que te organizas mejora para salir a tu hora.

Otro de los aspectos importantes es el de la calidad en la documentación, planificación y desarrollo. En este sentido hay una exigencia muy alta, ya que si no fuera así no se podría conseguir unos resultados aceptables trabajando ocho horas y no se podría dar la calidad que se vende como valor añadido. Para favorecer este objetivo se intenta que como máximo cada persona esté asignada a un proyecto. Esto permite centrarte muchísimo en el proyecto, cuando llevas varios proyectos al mismo tiempo al final trabajas apagando fuegos y no puedes atender como debiera a cada cliente.

El conocimiento también es uno de los pilares importantes. Renacimiento destaca por ser una de las empresas punteras en España en proyectos de nuevas tecnologías. El conocimiento también tiene que ver con la calidad y la productividad. Para conseguirlo se fomenta la formación de las personas mediante cursos internos, talleres, charlas, blogs y herramientas de soporte y conocimiento.

El resultado ha sido bastante positivo, he ganado en calidad de vida y he participado en proyectos muy interesantes. Creo que profesionalmente ha sido un acierto.

Formularios con Infopath

Después de unos días preparando una serie de materiales por fin he sacado un hueco para continuar con la temática de infopath. En el post anterior hablábamos acerca de la diferencia entre “Infopath Form Services y Office Forms Server” y “Empezando con Infopath”. En este post veremos cómo definir un formulario en Infopath y las opciones de publicación.

Para crear un formulario Infopath tendremos que diseñar una “plantilla de formulario”, que consiste en un fichero con extensión “.xsn” que contendrá la definición del formulario, los recurso adjuntos, consultas sql o servicios web, código .net (dll).

Empezaremos abriendo el cliente Microsoft Office Infopath y seleccionaremos la opción “Diseñar una plantilla de formulario”, a continuación seleccionamos una plantilla en blanco. Se abrirá entonces una ventana en blanco sobre la que diseñaremos nuestro formulario. entre los elementos disponibles distinguimos los siguientes:

  • El menú superior con todas las opciones disponibles.
  • El menú lateral de tareas de diseño, básicamente un acceso directo a las opciones de diseño del formulario. La zona de diseño, corresponde con la zona central sobre la que desplazaremos los controles para diseñar nuestro formulario.

Para el ejemplo vamos a diseñar un formulario con el que podamos insertar las notas de gasto (podéis descargaros la plantilla de ejemplo), para ello tendremos que solicitar al usuario los datos personales para saber de quien son los gastos, la fecha de los gastos, el concepto, el importe y un campo de observaciones.

Lo primero que vamos a hacer es insertar una tabla para distribuir el contenido de forma uniforme. Seleccionamos en el menú de tareas de diseño > diseño >Tabla personalizada ... Nos aparecerá un cuadro de diálogo preguntando por la distribución de columnas y filas de la tabla, en nuestro ejemplo insertamos 1 columna y el menos 3-5 filas. La primera fila la utilizaré para insertar una imagen con el logo de la empresa y un texto con el título del formulario. Si queremos alinearlo un poco más podemos insertar otra tabla dentro de la primera fila.

Para insertar la imagen tendemos dos opciones: agregarla como recurso incrustado en la plantilla o como vínculo a un campo del formulario. En nuestro caso la agregaremos como recurso del formulario, es decir, la imagen se almacenará dentro del fichero xsn. Podremos hacerlo desde el menú de tareas de diseño > controles > imagen o bien arrastrando el fichero de la imagen sobre la superficie de diseño.

Para disponer de una vista preliminar del formulario podemos seleccionar la opción Archivo > Vista previa > formulario. Esto nos abrirá otra instancia de Infopath con el formulario actual.

Ahora insertaremos una sección con los datos personales, en nuestro caso he agregado una tabla en la 2º fila para añadir los distintos campos. Solicitaremos el nombre, apellidos, email, nº empleado, departamento etc.

Para agregar un texto podemos poner el foco directamente sobre la zona de diseño y escribiremos el texto. A continuación añadimos un control del tipo textbox desde tareas de diseño > controles > Cuadro de texto. Al añadirlo veremos que nos añade una caja intentando ocupar el 100% del ancho de la casilla de la tabla. Para establecer el tamaño podemos establecerlo desde el panel de propiedades del textbox pinchando dos veces > tamaño ,o con botón derecho > propiedades > tamaño. También podemos establecerlo encogiéndolo con el ratón, pero ojo hacerlo desde el lado izquierdo de la caja ya que si lo hacemos desde la derecha nos encogerá además el ancho de la columna.


Otra de las cosas que podemos ver al añadir el textbox es que en las propiedades nos aparece un campo con el texto “Nombre del campo”. Este campo no es en realidad el nombre del control, sino el nombre del campo donde se almacenará el dato insertado.

Orígenes de datos


Ya hemos comentado que Infopath genera un xml a partir de los datos introducidos en el formulario.

Este xml se maneja desde el origen de datos principal. Para visualizar su estructura podemos entrar en tareas de diseño > orígenes de datos y seleccionaremos en el combo “Orígenes de datos” el valor “Principal”. Según vaya creciendo nuestro formulario el origen de datos irá creciendo.

Desde esta ventana podemos editar además el tipo de campo del origen de datos, podemos establecerlo como cadena, numérico, fecha, hora, etc..

Desde las propiedades del control podemos especificar como se realizará la entrada de datos. En caso que queramos cambiar el campo en el que se guardarán los datos del control podremos hacerlos in tener que escribir el nombre, seleccionando con el botón derecho el control > cambiar enlace.

Podemos tener más orígenes de datos, estos orígenes de datos los utilizaremos para leer datos de una bbdd, un servicio web, un fichero xml o una lista de sharepoint.

En el siguiente post veremos cómo manejar los orígenes de datos.

Tablas extensibles

Las tablas extensibles serán la forma que tengamos de definir un conjunto de datos de forma conjunta, podremos definir tablas de controles de manera que en tiempo diseño especifiquemos que controles aparecerán por cada una de las líneas de la tabla y a que nodo del Xml del origen de datos primario se asociará. Las tablas extensibles permiten al usuario agregar o quitar líneas en tiempo de ejecución. Cada una de estas filas corresponde con un nodo xml que agrupa a otra seeríe de nodos hijos.

Añadiremos la tabla extensible desde tareas de diseño > controles > Tabla extensible, a continuación indicaremos el número de columnas de nuestra tabla. En la siguiente imagen vemos como los nodos del xml para almacenar la fecha el tipo de gasto y el importe se agrupan de un nodo con el título “grupo1” y “grupo2”. Esto hará que al generarse el xml con los datos del usuario se creará un nodo “grupo2” por cada una de las líneas que se inserten en la tabla extensible. Si hacemos una vista previa de nuestro formulario dispondremos de una opción “Insertar elemento” para agregar una línea en la tabla. Para eliminarla podremos posivionarnos sobre la fila y nos aparecerá un botón a la izquierda con la opción de “Quitar”.






Al guardar el formulario tendremos un xml con el siguiente formato:

<?xml version="1.0" encoding="UTF-8"?>
<?mso-infoPathSolution solutionVersion="1.0.0.4" productVersion="12.0.0" PIVersion="1.0.0.0" href="file:///C:\Users\Administrador\AppData\Local\Microsoft\InfoPath\Designer2\7d8c9a95df2b42bc\manifest.xsf" ?><?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?><my:misCampos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance%22 xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-03-20T16:27:26%22 xmlns:xd="http://schemas.microsoft.com/office/infopath/2003%22 xml:lang="es-ES">
<my:txtNombre>Mario</my:txtNombre>
<my:txtEmail>mariocortesflores@hotmail.com</my:txtEmail>
<my:txtApellidos>Cortés</my:txtApellidos>
<my:txtNumeroEmpleado>22334</my:txtNumeroEmpleado>
<my:grupo1>
<my:grupo2>
<my:txtFecha>2009-03-10</my:txtFecha>
<my:campo3></my:campo3>
<my:txtImporte>10.5</my:txtImporte>
<my:tipoDeGasto>Taxi</my:tipoDeGasto>
</my:grupo2>
<my:grupo2>
<my:txtFecha>2009-03-12</my:txtFecha>
<my:txtImporte>5.4</my:txtImporte>
<my:tipoDeGasto>Parking</my:tipoDeGasto>
</my:grupo2>
<my:grupo2>
<my:txtFecha>2009-03-12</my:txtFecha>
<my:txtImporte>36.5</my:txtImporte>
<my:tipoDeGasto>Comida</my:tipoDeGasto>
</my:grupo2>
</my:grupo1>
<my:txtObservaciones></my:txtObservaciones>
</my:misCampos>

Publicación

Una vez finalizado nuestro formulario publicaremos la plantilla en Sharepoint. Para hacerlo disponemos de dos mecanismos: Desde el asistente de Infopath o desde la administración central de Sahrepoint.

Cómo esto ya está explicado muy bien Juan Carlos González en su post MOSS: Publicación de formularios Infopath…el otro camino! echarle un vistazo.