SharePoint Latin Rotating Header Image

InfoPath 2007

Ya instalé SharePoint ¿Y ahora qué? en Video

Hace muchos años di una plática llamada Ya Instale SharePoint ¿y ahora qué? En donde pude mostrar algunas de las características del producto Microsoft Office SharePoint Server 2007 mediante ejemplos y demostraciones graficas ilustrando como podríamos hacer uso de las funcionalidades. Si por alguna razón del destino aun te encuentras dando soporte a plataformas WSS 3.0 o MOSS 2007, este webcast sin duda te será de utilidad ya que se muestra ejemplos de:


  • InfoPath Form Services
  • Content Types
  • Business Data Catalog
  • Workflows
  • Excel Services

Espero que si por alguna razón vez este video lo encuentres útil en estos tiempos.


InfoPath Form Services en ambiente SharePoint con NLB (Network Load Balancing) configurado

GenericSHAREPOINTfarm2_smUn buen amigo me preguntó como le voy a hacer para realizar el despliegue de una solución InfoPath Form Services en un ambiente SharPoint con  NLB (Network Load Balancing) configurado, esto se debe a que el formulario InfoPath cuenta con conexiones a fuentes de datos externas y cuando utilizamos NLB se configura un IP virtual asociado al FQDN que determinara hacia que WFE se direcciona la petición  con base en las reglas de balanceo y en la demanda.

Y bueno la respuesta es agregar en el archivo Host el IP local de cada WFE apuntando al mismo FQDN de tal manera cuando InfoPath hace una petición al recurso externo mediante un DNS apuntando a un IP virtual, este es transferido al WFE a través del NLB usando el mismo FQDN sin embargo por contar con el IP local asociado al FQDN en el archivos Host, quien responde es el mismo WFE donde llego la petición.

Después de la respuesta citada, este mismo buen amigo ahora comentó que hay que buscar otra solución mas elegante para  no editar manualmente el archivo Host de cada WFE.

Estos amigitos!

Smile

Como deshabilitar el uso predeterminado de marca de InfoPath Form Services

Seguro lo has visto y hasta tus usuarios te han preguntado por qué razón en los formularios electrónicos se cuenta con el logotipo de InfoPath Form Services. Yo me pregunto cuál fue el argumento del equipo de producto de Microsoft para dejar habilitada esta opción de manera automática.  

image
La realidad es que posiblemente este sería un buen lugar para colocar nuestro logotipo de empresa, sin embargo, no se cuenta con ninguna opción disponible o soportada para modificar este logotipo. Incluso cuando contamos con un control para subir un archivos se tiene la misma imagen de InfoPath Form Serivces.

Si quieres deshabilitar estas imágenes puedes utilizar la siguiente instrucción:

stsadm -o setformsserviceproperty -pn AllowBranding -pv false


Y el resultado es que se deshabilita el uso de la imagen de marca de InfoPath Form Services en nuestra barra de opciones.

image
Así como también en la ventana para adjuntar archivos y algunas otras mas.
 

image

Para mas informacion sobre los comandos disponibles para manipulación de Form Services puedes ver aquí:  http://blogs.msdn.com/b/michael_yeager/archive/2008/12/01/using-stsadm-to-set-form-services-properties.aspx

Compatibilidad hacia atras de InfoPath 2010 con InfoPath 2007 e InfoPath 2003

imageJusto con un alto nivel de presión antes de iniciar una reunión gracias al consejo del don Miguel Ángel Moran conocido como @SrBichi pude experimentar el soporte hacia atrás de InfoPath 2010 con InfoPath 2007 respecto al despliegue de plantillas administradas.

A diferencia de SharePoint Designer 2010 la historia de compatibilidad hacia atrás de otros productos de la familia office esta muchas más completa. Sucede que SharePoint Designer 2007 y 2010 son productos sin costo y por tal motivo el argumento de Microsoft es que prefieren invertir en nueva funcionalidad que soportar compatibilidad hacia atrás. Afortunadamente este argumento no aplica en los otros paquetes de la familia de Office.

Tenía que hacer el despliegue de una plantilla administrada de formulario InfoPath 2007 con soporte  Form Services sobre un ambiente Office SharePoint Server 2007 Enterprise Edition y no contábamos con ningún equipo con InfoPath 2007. Dada la urgencia, la sugerencia de @SrBichi fue hacer el despliegue utilizando InfoPath 2010 y así fue. Incluso el equipo donde estaba instalado InfoPath 2010 era un Windows 7 y al compilar la plantilla administrada debido a que contaba con código asociado el VSTA lanzaba errores respecto a la ausencia de dos archivos .dll que no estaban en el equipo, seguramente imaginaras cuales archivos son “microsoft.sharepoint.dll” y “microsoft.office.workflow.task.dll”. Procedí a copiarlos desde el servidor SharePoint y evidentemente no pudimos meterlos al GAC sino más bien hicimos la referencia dentro de VSTA y la compilación y publicación se logró exitosamente.

La demostración y presentación final con el cliente también se logró satisfactoriamente y no tuvimos un solo problema por haber implementado con InfoPath 2010.

Aqui un extracto de la ayuda de Office respecto a la compatibilidad de InfoPath 2010 con InfoPath 2007.

InfoPath 2007 Form Templates

The forms in this category are identical to the blank templates that are included in the Popular Form Templates category, except that they are InfoPath 2007 compatible and lack some of the advanced features of InfoPath 2010. Many of your users may not have upgraded to the 2010 releases of SharePoint or the InfoPath client. If you prefer to start with a blank form template, and know that you must target previous releases of Office, then the InfoPath 2007 form templates will serve as a convenient short-cut for ensuring you are in the correct mode.

Note    InfoPath 2010 also allows you to design forms that are compatible with InfoPath 2003.

Remote Desktop Connection vs Virtual PC 2007 en proyecto InfoPath 2007

Recientemente en mi ambiente de desarrollo sucedió un comportamiento extraño que definitivamente hacia que mi experiencia fuese un tanto limitada. Resulta que al trabajar con InfoPath 2007 dentro de una máquina virtual la funcionalidad de copiar y pegar no trabaja bien en modo de diseño, en ocasiones si funciona y en otras no. Dentro de InfoPath 2007 al hacer Ctrl – X y después dentro de otra celda de una tabla hacer Ctrl – Y pues si me cortaba los controles mas no los pegaba de regreso y el Ctrl – Z de nuevo rehacía los controles en su posición anterior.

Confieso que hasta el momento no del todo sé que fue lo que paso realmente, pero una alternativa de solución es conectarme desde mi equipo huésped o algún otro vía remote desktop connection y listo, todo funciona como se espera que funcione.

Asumo que es un tema relacionado con el direccionamiento de la memoria RAM cuando usamos el portapapeles dentro de una máquina virtual.

Llenado programatico de tablas repetibles en formularios InfoPath Form Services

Aquí una técnica que resulta interesante cuando trabajamos con formularios InfoPath Form Services de SharePoint Server 2007. Resulta que cuando usamos InfoPath 2007 combinado con Forms Services perdemos un tanto de funcionalidad como controles, opciones de filtrado y de conexión a datos externos es por ello que en ocasiones debemos de utilizar alternativas un tanto artesanal para simular el comportamiento esperado. Hoy quiero compartir una alternativa para poder presentar un listado de cuadros de verificación para permitir al usuario seleccionar más de una opción dentro de sus formularios InfoPath Form Services.

Una lista repetible en InfoPath es una especie de tabla de información vinculada a alguna fuente de datos que permite mostrar un arreglo de renglones con columnas y con sus correspondientes controles para el llenado o captura tabular, esta lista ya incluye la funcionalidad para agregar o eliminar renglones de forma automática. Bajo este contexto, el de mostrar una lista de cuadros de verificación para multi selección usaremos una lista para mostrar en una columna el  cuadro de verificación y en la otra su descripción, deshabilitaremos las opciones de edición de la lista para crear un efecto de despliegue.

image

Tomamos la lita repetible y la arrastramos sobre nuestro formulario, al hacerlo nos solicita que seleccionemos de cuantas columnas  requerimos la lista y seleccionamos dos.

image

El resultado es una lista repetible de forma tabular. Analisemos el esquema que InfoPath ha generado para representar esta lista con la finalidad de apreciar los nombres de los campos que estaremos utilizando en este ejemplo. group2 es un campo de tipo Grupo con la capacidad de auto repetir su contenido que en este caso son los campos field1 y field2

image

A continuacion dentro de nuestro fomulario transformamos a feld1 en cuadro de verificacion.

image

Realizamos el mismo procedimiento para la siguiente columna field2 solo que la cambiaremos a cuadro de expresion. Tambien podemos jugar con las propiedades de la lista repetible para esconder el encabezado y eliminar los bordes para generar el efecto deseado. Esto lo hacemos seleccionando las propiedades del objeto y accediendo a la pestaña de Display para deshabilitar la opcon de incluir el encabezado o Include Header. Asi mismo dentro de la pestaña Data deshabilitamos las opciones por defecto Default Settings y la de mostrar botón de inserción. Esto nos quita la opción de agregar soporte para agregar, modificar y eliminar elementos de forma automática..

image

Ya tenemos la estructura lista para poder codificar y cargar sobre ella una lista de datos que puede provenir de cualquier otra fuente de información.
A continuación desde InfoPath cargamos Visual Studio for Applications seleccionando del menú de herramientas la opción de programación y evento de carga.

image

No olvidemos primeramente guardar nuestro formulario y configurar un par de opciones dentro de la configuración de formulario o Form Options. En primer lugar dentro de Security and Trust especificamos nuestro formulario como Full Trust, esto se debe a que estaremos ejecutando código.

image

Y dentro de la sección programming seleccionemos que lenguaje de programación deseamos usar y en que carpeta guardaremos el código.

image 

Ya dentro de Visual Studio for Applications tenemos el código correspondiente al evento de carga del formulario. Es aquí donde puedes conectarte a otra fuente de datos ya sea de forma programática o directamente desde InfoPath.

De momento haremos el llenado manual de la lista repetible mediante el siguiente código de programación.

private const string STR_XPATH_Grupo = "/my:myFields/my:group1/my:group2";
        private const string STR_XPATH_Nodo = "/my:myFields/my:group1/my:group2/my:field2";
      
        private void CargaLista()
        {     
            // creamos una instancia de nuestro esquema principal
            XPathNavigator DOM = MainDataSource.CreateNavigator();

            // obtenemos una referencia del nodo repetible 
            XPathNavigator tableItem = DOM.SelectSingleNode(STR_XPATH_Grupo, this.NamespaceManager);
            XPathNavigator tableItemNode = null;
            
            // clonamos un elemento y lo asignamos a otra variable
            tableItemNode = tableItem.Clone();

            // obtenemos la ruta de donde estaremos actualizando la informacion dentro del elemento clonado          
            XPathNavigator target = tableItemNode.SelectSingleNode(STR_XPATH_Nodo, this.NamespaceManager);

            // establecemos la informacion a desplegar dentro del elemento clonado
            target.SetValue("hola");

            // insertamos el elemento clonado en la lista repetible
            tableItem.InsertAfter(tableItemNode);

            target = null;
            tableItemNode = null;


        }


 


El resultado:.



image



 



A continuación dejo una rutina un poco más elaborada donde se muestra como cargar una lista repetible que proviene de una fuente de datos externa configurada dentro de InfoPath.



  • En dataSource enviamos el nombre de nuestra conexión a otra fuente de datos configurada en InfoPath.
  • En tableRow enviamos la ruta XPath que apunta a grupo repetible de una lista repetible.
  • En fieldName especificamos el nombre del campo que deseamos mostrar en la descripción de la lista repetible.
  • En targetXPath especificamos la ruta XPath del nodo descripción de nuestra lista repetible.


 private void LoadSPListToRepeatingTable(string dataSource, string tableRow, string fieldName, string targetXPath)
        {       


            XPathNodeIterator list = DataSources[dataSource].CreateNavigator().Select("/xml/rs:data/z:row", this.NamespaceManager);
            XPathNavigator DOM = MainDataSource.CreateNavigator();
            XPathNavigator tableItem = DOM.SelectSingleNode(tableRow, this.NamespaceManager);
            XPathNavigator tableItemNode = null;
          

            foreach (XPathNavigator listItem in list)
            {

                if (tableItem != null)
                    tableItemNode = tableItem.Clone();


                string value = listItem.SelectSingleNode(fieldName, NamespaceManager).Value;
                XPathNavigator target = tableItemNode.SelectSingleNode(targetXPath, this.NamespaceManager);
                target.SetValue(value);
                tableItem.InsertAfter(tableItemNode);

                target = null;
                tableItemNode = null;


            }
            tableItem.DeleteSelf();
            tableItem = null;
            DOM = null;

        }


 



La invocación de esta rutina es:



           LoadSPListToRepeatingTable("Areas", "/my:myFields/my:Inicio/my:areas/my:areaRow", "@ows_LinkTitle", "/my:myFields/my:Inicio/my:areas/my:areaRow/my:areaDescripcion");



 



EL resultado seria algo asi:



image