Insertar una tarea de SharePoint desde InfoPath usando CAML

Hace poco tuve el requerimiento de crear una minuta en InfoPath que creara tareas en una lista de SharePoint, hubiera esperado que fuera una tarea sencilla, dado lo integrado que están ambas tecnologías, pero no fue así. Por lo tanto les dejo un paso a paso de cómo insertar tareas en una lista de SharePoint usando InfoPath 2010 y nuestro viejo amigo CAML.

Vamos a trabajar en la lista de tareas que se crea en forma predeterminada en un subsitio de equipo:

image

Un paso fundamental para que este ejercicio funcione es identificar el nombre interno de las columnas de la lista, especialmente si usamos un sitio en un idioma diferente al inglés.

En la siguiente imagen pueden ver los nombre de las columnas que se muestran en la pantalla de Configuración de la lista.

image

A continuación haga clic en la columna Asignado a, lo cual los lleva a la página de Cambiar columna. Ahora quiero que naveguen al final del URL que muestra el explorador, y verán la etiqueta Field=AssignedTo, “AssignedTo” es el nombre interno de la columna y es el nombre que debemos usar en la creación de nuestra plantilla de CAML.

image

En la siguiente tabla pueden ver el nombre en español de los campos que vamos a modificar y su correspondiente nombre interno. La lista de tareas tiene más campos, pero este es el subgrupo que seleccioné para este ejemplo.

Nombre en español Nombre interno
Título Title
Descripción Body
Asignado a AssignedTo
Fecha de inicio StartDate
Fecha de vencimiento DueDate
% completado PercentComplete
Estado Status
ID ID

Ahora vamos a crear el código CAML que nos permitirá actualizar la lista.

1. Abran Notepad o su editor de texto favorito.

2. Copien el siguiente fragmento de XML:

<?xml version="1.0" encoding="UTF-8"?>
<Batch OnError="Continue">
    <Method ID="1" Cmd="New">
        <Field Name="Title"></Field>
        <Field Name="Body"></Field>
        <Field Name="AssignedTo"></Field>
        <Field Name="StartDate"></Field>
        <Field Name="DueDate"></Field>
        <Field Name='PercentComplete'></Field>
        <Field Name='Status'></Field>
        <Field Name='ID'></Field>
    </Method>
</Batch>

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

 

3. Guarden el archivo con el nombre PlantillaTareas.xml

Ahora procedemos a trabar el formulario de InfoPath, en este caso cree un formulario en blanco con InfoPath 2010.

Comenzamos agregando como un Data Source la conexión a nuestro XML.

1. En el menú de Data expandimos la opción From Other Sources y seleccionamos From XML File.

image

2. Buscamos el archivo de XML que habíamos creado y presionamos el botón Next.

image

3. Se deja marcada la opción de incluir los datos como archivo de recurso, y presionamos el botón Next.

image

4. Se deja marcada la opción obtener automáticamente los datos y presionamos el botón Finish.

image

Ahora vamos a crear la conexión de datos a la lista de tareas de SharePoint.

1. En el menú de Data seleccionamos From SharePoint List.

image

2. Escribimos la dirección del sitio donde esta la lista de tareas que vamos a consultar y presionamos el botón Next.

image

3. Seleccionamos la lista de Tareas y presionamos el botón Next.

image

4. Seleccionamos los campos que incluimos en nuestro CAML y presionamos el botón Next.

image

image

5. En este caso no voy a guardar una copia de los datos en el formulario así que presionamos el botón Next.

image

6. Se deja marcada la opción obtener automáticamente los datos y presionamos el botón Finish.

image

En la primera sección del formulario vamos a agregar la consulta a las tareas existentes.

1. En la ventana de Campos seleccionen la fuente de datos Tareas.

image

2. Expanda la sección de dataFields y haga clic derecho sobre el campo d:SharePointListItem_RW e inserte una Tabla repetitiva.

image

3. La tabla se insertó con los campos sin títulos, procedemos darle el formato que deseamos, en mi caso, sólo voy a mostrar algunos campos.

image

4. Así se ve el formulario hasta ahora, cambie el campo de vencimiento por un campo de texto y marque todos los campos como Read Only. En el campo Asignado a inserte una sección repetitiva con controles y sólo deje el campo que muestra el Display Name. También agregué una columna a la derecha para poner un botón posteriormente.

image

Ahora regresamos al datasource principal y creamos los siguientes campos de InfoPath, para facilitar el código elegí no usar tildes ni espacios en blanco:

Nombre Tipo
lista string
id string
titulo string
descripcion string
asignadoa People/Group picker
estado string
porcentaje decimal
inicio date
fin date

Nuestro campos se ven asi:

image

Ahora procedemos a agregar esos nuevos campos, excepto el campo lista,  en el formulario y le damos un formato bonito.

image

El campo ID lo marque como read only.

El campo descripción lo hice multi línea.

El campo estado lo hice de tipo DropDown y le escribí las mismas opciones que tiene la lista en SharePoint.

image

Para el formato de los campos de fecha seleccioné usar aaaa-mm-dd, de nuevo para facilitar la escritura del código, de forma que usa el mismo formato de SharePoint, pero si desea que se vea diferente, nada más debe recordar transformarlo antes de actualizar los datos.

image

Como vamos a asignar la persona responsable de la tarea, necesitamos conocer el UserID de ese usuario, es decir, el número que SharePoint le asigna al usuario la primera vez que que lo agregamos a un sitio, este dato no se obtiene del people picker, si no que consultamos el servicio Web UserGroup.asmx.

1. En la cejilla de Data seleccionan From Web Service y después From SOAP Web Service.

image

2. La dirección del servicio Web es la dirección del sitio o subsitio donde esta la lista de tareas más /_vti_bin/UserGroup.asmx y presionamos el botón Next.

image

3. Seleccionan el método GetUserInfo y presionamos el botón Next.

image

4. En la siguiente página, escriba un valor predeterminado para el login, por ejemplo su dominio y usuario, y presionamos el botón Next.

Normalmente el formato del usuario es dominio\usuario, por ejemplo contoso\vkrojas, pero si usa Office 365 debe  usar el formato de cuenta interno, por ejemplo: i:0#.f|membership|vkrojas@contoso.com

image

5. No vamos a guardar una copia de los datos en el formulario así que presionamos el botón Next.

image

6. Se deja marcada la opción obtener automáticamente los datos y presionamos el botón Finish.

image

Ahora para poder actualizar la lista de SharePoint vamos a utilizar el servicio Web UpdateListItems, que también provee SharePoint.

1. En la cejilla de Data, en la sección de Submit Form seleccionan To Other Locations y después To Web Service.

image

2. La dirección del servicio Web es la dirección del sitio o subsitio donde esta la lista de tareas más /_vti_bin/lists.asmx y presionamos el botón Next.

image

3. Seleccionan el método UpdateListItems y presionamos el botón Next.

image

4. En la siguiente página para el parámetro listName seleccionamos el campo lista de nuestro formulario y marcamos la opción de Submit data as a string.

image

5. Para el parámetro updates seleccionamos el Data Source secundario PlantillaTareas, que es el archivo XML que hicimos en Notepad.

image

6. En el campo Include seleccionamos XML subtree, including selected element. Marcamos la opción de Submit data as a string. Presionamos el botón Next para continuar.

image

7. Desmarcamos la opción Set as the default submit connection y presionamos el botón Finish.

image

Ya tenemos el escenario preparado para comenzar a trabajar en el código. Iniciemos agregando un botón para leer las tareas que están publicadas en la lista de SharePoint. Le puse a la etiqueta del botón Refrescar. A ese botón le ponemos una regla que consulte la lista de tareas.

image

Si prueban el formulario ya deben poder leer la lista de tareas de SharePoint cada vez que presionan el botón Refrescar.

image

 

 

 

Más información:

Anuncios

Mostrar historial de comentarios con InfoPath y SharePoint 2013

Con SharePoint 2013 podemos usar InfoPath 2013 para modificar directamente las listas de SharePoint y personalizar los formularios para agregar y editar datos.

La lista con que estoy trabajando tiene el manejo de versiones activado. (Menú Lista -> Configuración de la lista -> Configuración de versiones)

Normalmente, la única forma de ver los comentarios que se agregan en las versiones es con el menú historial de versiones. Ahora les voy a mostrar cómo enseñar esos campos en el formulario de edición.

Primero abrimos la lista que tiene las versiones activadas con SharePoint Designer 2013 y presionamos el botón Editar columnas.

Seleccionamos la columna que va a tener los comentarios (1) y presionamos el botón Configuración de la columna (2).

En el editor de columnas, marcamos la opción Anexar cambios al contenido existente, luego guardamos todos los cambios a la lista.

Ya podemos cerrar SharePoint Designer, ahora se abre la lista con InfoPath 2013.

Usando Internet Explorer, navegan hasta la lista que desean personalizar y en el menú de Lista presionan el botón Personalizar formulario. Deben tener instalado InfoPath 2013 para que se les habilite este botón.

Deben aceptar el mensaje de que los cambios han cambiado y deben ser actualizados.

Deben borrar el campo viejo de comentarios que ahora va a tener un mensaje que indica que no está asociado a ningún campo.

Y agregar el nuevo campo, que ahora se insertará como un campo de texto y luego una sección que tendrá el historial.

Así es como se ven los comentarios cuando se está editando el formulario:

Y así es como se ve en la vista de elementos:

Leer una lista de tareas de SharePoint desde InfoPath 2010

En este artículo vamos a ver como leer una lista de tareas en SharePoint y mostrarla en InfoPath 2010.

En un artículo posterior voy a mostrarles cómo insertar tareas desde InfoPath, pero iniciemos con lo básico.

Vamos a trabajar en la lista de tareas que se crea en forma predeterminada en un subsitio de equipo:

image_thumb[8]

Ahora vamos a crear la conexión de datos a la lista de tareas de SharePoint.

1. En el menú de Data seleccionamos From SharePoint List.

image_thumb[15]

2. Escribimos la dirección del sitio donde esta la lista de tareas que vamos a consultar y presionamos el botón Next.

image_thumb[16]

3. Seleccionamos la lista de Tareas y presionamos el botón Next.

image_thumb[17]

4. Seleccionamos los campos que deseamos mostrar (yo seleccione un poco más) y presionamos el botón Next.

image_thumb[18]

image_thumb[19]

5. En este caso no voy a guardar una copia de los datos en el formulario así que presionamos el botón Next.

image_thumb[20]

6. Se deja marcada la opción obtener automáticamente los datos y presionamos el botón Finish.

image_thumb[21]

En el formulario de InfoPath vamos a agregar los controles que muestran las tareas existentes.

1. En la ventana de Campos seleccionen la fuente de datos Tareas.

image_thumb[22]

2. Expanda la sección de dataFields y haga clic derecho sobre el campo d:SharePointListItem_RW e inserte una Tabla repetitiva.

image_thumb[23]

3. La tabla se insertó con los campos sin títulos, procedemos darle el formato que deseamos, en mi caso, sólo voy a mostrar algunos campos.

image_thumb[25]

4. Así se ve el formulario hasta ahora, cambie el campo de vencimiento por un campo de texto y marque todos los campos como Read Only.

En el campo Asignado a inserte una sección repetitiva con controles y sólo deje el campo que muestra el Display Name. También agregué una columna a la derecha para poner un botón posteriormente.

image_thumb[24]

6. Para finalizar, agregamos un botón para leer las tareas que están publicadas en la lista de SharePoint. Le puse a la etiqueta del botón Refrescar. A ese botón le ponemos una regla que consulte la lista de tareas.

image_thumb[41]

Si prueban el formulario ya deben poder leer la lista de tareas de SharePoint cada vez que presionan el botón Refrescar.

image

Error: La validación de seguridad de esta página no es correcta con InfoPath 2010 y SharePoint 2010

 

El otro día tuve un error muy extraño con InfoPath 2010 y SharePoint 2010. En un formulario Web de InfoPath sencillo (sin códigos ni fórmulas especiales) no podía adjuntar archivos, cuando traba de adjuntar un archivo recibía el siguiente error:

Error

La validación de seguridad de esta página no es correcta. Haga clic en Atrás en el explorador web, actualice la página y vuelva a intentar la operación.

A continuación pueden ver la imagen del error:

image

Después de investigar encontré que se debe a un problema que produce el Cumulative Update de Junio 2011 (el cual Microsoft recomienda instalar después del Service Pack 1 de SharePoint 2010).

Hasta que Microsoft publiqué la solución oficial a este problema, les paso la solución alterna no oficial:

1) Abrir en Notepad el archivo FormServer.aspx que esta ubicado en la ruta C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS.

2) Buscar la línea <body runat=”server” id=”PageBody”>

3) Después de esa línea inserte un reglón y escriba la etiqueta <SharePoint:FormDigest runat=”server”/>

Tenga cuidado de no invalidar el XML al dejar tags abiertos.

Listo, ahora debe ser capaz de insertar archivos adjuntos en los formularios Web de InfoPath.

A %d blogueros les gusta esto: