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:

Anexos obligatorios en listas de SharePoint

Hoy hice una lista sencilla para automatizar la aprobación de solicitudes de crédito, pero ocupaba que los usuarios anexaran al menos un archivo, lo cual no es muy sencillo en SharePoint.

1) El primer paso fue crear un archivo de texto (requiredAttachment.txt) con el siguiente script:

<script type=»text/javascript» language=»javascript»>
function PreSaveAction() {

            var elm = document.getElementById(«idAttachmentsTable»);
            if (elm == null || elm.rows.length == 0)
{
                document.getElementById(«idAttachmentsRow»).style.display=’none’;

alert(«Por favor agregue el archivo usando el botón Attach File»);
return false ;
}
else { return true ;}
}
</script>

2) Después lo subí a la biblioteca de activos del sitio

image

3) En la lista donde voy a realizar la personalización desactivé la opción de abrir los formularios en cuadros de diálogo.

image

4) En la lista que desea hacer obligatorios los anexos, presione el botón Nuevo elemento, y agregue en el URL Toolpaneview=2

image

5) En la nueva pantalla, presione el botón Add a Web Part.

image

6) Agregue el Web Part de Editor de Contenido.

image

7) Edite las propiedades del Editor de Contenido.

image

8) Cambie el tipo de borde a Ninguno.

image

9) En el campo de vínculo al contenido, escriba el URL del archivo que contiene el código javascript (paso 2 de este post).

image

10) Presione el botón OK para guardar los cambios.

image

 

11) Debe repetir estos pasos para el formulario de editar elementos, como se muestra en la siguiente imagen:

image

12) Cuando terminó de agregar los scripts, puede volver a marcar que los formularios se abran como cuadros de diálogo.

image

Cómo aprender SharePoint

Muchas veces me preguntan como iniciar en el campo de SharePoint, así que publiqué una página que estaré actualizando periódicamente con recomendaciones de sitios y libros.

Estos no son todos los recursos que hay, así que si tienen sugerencias para esta lista por favor escríbanme.

Como borrar el caché de SharePoint Designer 2010

A veces, problemas misteriosos al desarrollar flujos con SharePoint Designer pueden ser resueltos borrando el caché, así que a continuación les explico cómo:

1. Deben habilitar el ver los archivos ocultos.

2. Cierren SharePoint Designer si lo tienen abierto.

3. Naveguen a la dirección C:\Users\<usuario>\AppData\Local\Microsoft\WebsiteCache

image

4. Borran todo el contenido de la carpeta.

La siguiente vez que abran SharePoint Designer, les va a aparecer como la primera vez, sin rutas almacenadas.

Web Part de Cumpleaños

Una de las listas que se pueden implementar en la Intranet es la famosa lista de los cumpleañeros del mes. Como nuestra intranet utiliza SharePoint Online, no podemos instalar ningún elemento Web que nos muestre esta información, así que procedí a realizar los siguiente.

Vista del web part

En una lista de contactos, ya que también la usamos como directorio telefónico, tenemos las siguientes columnas:

columnas de la lista

Las columnas más importantes de esta vista, para el web part de cumpleaños  son:

Nombre Completo – tipo persona– contiene el nombre del cumpleañero

Cumple – tipo fecha – contiene el día del cumpleaños, con el año actual, por ejemplo 18 de febrero del 2011.

Cumpleaños – tipo Calculado – Esta fórmular muestra el día y el mes del día de cumpleaños, con el mes en formato de texto, para que se vea más amigable.

image

Por último creamos una vista donde se muéstre el nombre de la persona y la columna calculada con la fecha de cumpleaños en formato día/mes.

image

Y la parte más importante es el filtro de esta vista, en este caso, se muestran los cumpleañeros de los últimos 15 días y los próximos 15 días a la fecha actual. Por eso es importante que la fecha de cumpleaños use el año en curso.

image

Anualmente hay que actualizar las fechas de cumpleaños para el año actual, es decir, el próximo año se debería editar esa lista y cambiar todas las fechas para el año 2012.

O si se desea automatizar el proceso, se puede crear un flujo de trabajo que envíe un correo electrónico de felicitación al cumpleañero, y además actualice el año de la fecha de cumpleaños. Este será el tema del próximo post.

03/04/2011: Aquí esta el vínculo al post donde discuto como hacer el flujo de envío de felicitación

Como aprender a desarrollar para SharePoint 2007 y 2010

Una pregunta que me hacen a menudos es el camino a seguir para aprender a desarrollar con SharePoint.

Desarrollo en SharePoint 2007

Si les gustan las clases de Microsoft, los cursos que deben llevar son el 5061A y el 50064. El primero es para desarrollar en WSS y el segundo para MOSS. Es importante llevar ambos porque el desarrollo para WSS es la base para desarrollar en MOSS, pueden verlo como un curso básico y otro avanzado.

En opciones virtuales hay muchos cursos interesantes, especialmente el sitio web SharePoint Developer.

image

 

Pongan especial atención a la sección de la derecha, donde esta la lista de cursos.

 

 

 

 

Desarrollo en SharePoint 2010

Los cursos oficiales de Microsoft aún no están disponibles. Pero en Microsoft Learning tienen disponibles dos clínicas gratuitas (son cursos pequeños con un vistazo general de la tecnología) para profesionales de TI y para desarrolladores.

Microsoft Virtual Academy tiene un curso de SharePoint 2010 en ESPAÑOL

Centro de desarrollo de SharePoint 2010 en ESPAÑOL

Centro de desarrollo de SharePoint 2010

SharePoint 2010 Hands-on Labs