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

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s

A %d blogueros les gusta esto: