Implementación de la interfaz REST de SharePoint Foundation

Última modificación: viernes, 03 de diciembre de 2010

Hace referencia a: SharePoint Foundation 2010

Esta parte del tutorial sobre la creación de un servicio web de Windows Communication Foundation (WCF) personalizado muestra cómo crear una aplicación de Windows Forms en Microsoft Visual Studio 2010 que use servicios de datos de ADO.NET y la interfaz de transferencia de estado de representación (REST) de Microsoft SharePoint Foundation para interactuar con datos de lista a través de dos controles DataGridView. La interfaz REST de SharePoint Foundation proporciona el contexto de datos para interactuar con una lista de proyectos y una lista de empleados a través de los dos controles. El control de empleados muestra los empleados que están asociados con el elemento de proyecto que los usuarios han seleccionado en el control de proyectos. Además, el control de proyectos permite a los usuarios realizar cambios en los elementos en el origen de datos de proyectos y actualizar datos de lista de SharePoint con dichos cambios.

Creación de una aplicación de Windows Forms para interactuar con datos de lista

  1. Abra Visual Studio y haga clic en Archivo. Elija Nuevo y haga clic en Proyecto. En el cuadro de diálogo Nuevo proyecto, seleccione Visual Basic o Visual C# en el cuadro Plantillas instaladas y, a continuación, seleccione Windows, seleccione Aplicación de Windows Forms y escriba ProjectTracker en el cuadro Nombre. Haga clic en Aceptar.

  2. Para conectarse a datos almacenados en un sitio de SharePoint, haga clic en Datos y, a continuación, haga clic en Agregar nuevo origen de datos. En el Asistente para la configuración de orígenes de datos, seleccione SharePoint y, a continuación, haga clic en Siguiente.

  3. En el cuadro Agregar referencia de servicio, escriba la ruta de acceso a ListData.svc, el servicio que proporciona acceso a la interfaz REST de SharePoint Foundation. Esta ruta de acceso debe incluir el sitio web que contiene las listas y debe especificar el directorio virtual _vti_bin, por ejemplo, http:// Server/sites/SiteCollection/WebSite/_vti_bin/ListData.svc. Para agregar la referencia de servicio al proyecto, haga clic en Ir, haga clic en Aceptar y, a continuación, haga clic en Finalizar. La referencia de servicio conecta la aplicación a la interfaz REST y recupera un modelo de datos de entidad del sitio SharePoint Foundation para definir las clases de entidad. La lista de datos SharePoint Foundation está asociada a esta referencia de servicio como un origen de datos fuertemente tipado.

  4. En la vista Diseño de Form1.cs, haga clic en Datos y, a continuación, haga clic en Mostrar orígenes de datos para abrir el cuadro Orígenes de datos. Para proporcionar la interfaz de usuario para interactuar con datos de lista, arrastre controles DataGridView para las listas de proyectos y empleados hasta Form1.

  5. Para quitar las columnas no deseadas de la pantalla de cada control de DataGridView, haga clic con el botón secundario en el control, haga clic en Editar columnas y, en el cuadro Editar columnas, seleccione cada columna en el cuadro Columnas seleccionadas y haga clic en Quitar. Desde el control DataGridView de proyectos, quite todas las columnas excepto Title, Description y Due Date. Desde el control DataGridView de empleados, quite todas las columnas excepto Full Name, Job Title y Team. En el cuadro Propiedades de columnas enlazadas, establezca la columna Title de la lista de proyectos y la columna Full Name de la lista de empleados en Rellenar y, a continuación, haga clic en Aceptar.

  6. Para rellenar los controles DataGridView con datos de lista del sitio web de SharePoint Foundation, haga doble clic en el borde de Form1, para ver su código. Agregue una instrucción using para importar el espacio de nombres ServiceReference1 que creó y use un constructor para crear un contexto de datos fuertemente tipado para representar los datos de lista. Puede usar este contexto de datos para enviar solicitudes al sitio web. En el constructor, especifique la dirección URL del servicio WCF que proporciona la interfaz REST para tener acceso a datos de lista del sitio web especificado, como se indica a continuación.

    Imports ProjectTracker.ServiceReference1
    Imports System.Net
    
    Public Class Form1
    
        Private Shared websiteUrl As String = "http://YourServer/sites/YourSiteCollection/YourSite"
    
        Private context As New MyWebsiteDataContext(
            New Uri(websiteUrl + "/_vti_bin/listdata.svc"))
    
        Public Sub New()
            InitializeComponent()
        End Sub
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace ProjectTracker
    {
        using ServiceReference1;
        using System.Net;    
    
        public partial class Form1 : Form
        {
    
        private static string websiteUrl= "http://YourServer/sites/YourSiteCollection/YourSite";
    
            MyWebsiteDataContext context = new MyWebsiteDataContext(
                new Uri(websiteUrl + "/_vti_bin/listdata.svc"));
    
            public Form1()
            {
                InitializeComponent();
            }
    
  7. En el evento Form1_Load, establezca la autenticación de la solicitud. Agregue una instrucción using para importar el espacio de nombres System.Net. La autenticación integrada de Windows permite usar las credenciales predeterminadas de la memoria caché de credenciales. Además, en el evento Form1_Load, rellene el origen de datos generado por Visual Studio para el control DataGridView de proyectos mediante el uso de la clase de contexto de datos, como se indica a continuación.

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            context.Credentials = CredentialCache.DefaultCredentials
    
            ProjectsBindingSource.DataSource = context.Projects
        End Sub
    
        private void Form1_Load(object sender, EventArgs e)
        {
            context.Credentials = CredentialCache.DefaultCredentials;
            projectsBindingSource.DataSource = context.Projects;
        }
    
  8. Para rellenar el control DataGridView de empleados con datos de lista, cree un controlador para el evento CurrentChanged en el origen de datos Projects. Cuando el usuario selecciona un proyecto en la DataGridView de Projects, se rellenará la DataGridView de empleados con una lista filtrada de los empleados de acuerdo con el proyecto seleccionado. Para agregar el evento CurrentChanged a la vista Diseño, haga clic con el botón secundario en projectsBindingSource debajo del formulario. Después, haga clic en Propiedades y en el icono de eventos en la ventana Propiedades y, a continuación, haga doble clic en el evento CurrentChanged.

  9. Use una consulta de Language Integrated Query (LINQ) para filtrar los empleados en función de aquellos cuyo identificador de proyecto coincida con el identificador del proyecto seleccionado actualmente. Para obtener el proyecto seleccionado actualmente, use la propiedad Current del origen de datos del proyecto y convierta el elemento actual en un tipo ProjectsItem, como se indica a continuación.

        Private Sub ProjectsBindingSource_CurrentChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProjectsBindingSource.CurrentChanged
            EmployeesBindingSource.DataSource =
                From emp In context.Employees _
                Where emp.Project.Id = DirectCast(ProjectsBindingSource.Current, ProjectsItem).Id _
                Select emp
        End Sub
    
        private void projectsBindingSource_CurrentChanged(object sender, EventArgs e)
        {
            employeesBindingSource.DataSource =
                from emp in context.Employees
                where emp.Project.Id == ((ProjectsItem)projectsBindingSource.Current).Id
                select emp;
        }
    

    Tenga en cuenta que en el ejemplo se usa la propiedad de navegación de proyecto de la lista de proyectos que se asigna desde la columna de búsqueda de proyectos en la lista de empleados.

  10. Para agregar compatibilidad con la actualización, de modo que cuando los usuarios modifiquen datos en el formulario estos se modifiquen también en el sitio web, habilite el botón Guardar en la vista de diseño. Para ello, haga clic con el botón secundario en el icono Guardar del menú Form1 y haga clic en Habilitado. Haga doble clic en el botón Guardar para ver el código e insertar un controlador de eventos projectsBindingNavigatorSaveItem_Click. Agregue la siguiente línea de código para indicar a los Servicios de datos de ADO.NET que guarden los cambios en el sitio web también.

        Private Sub ProjectsBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProjectsBindingNavigatorSaveItem.Click
            context.SaveChanges()
        End Sub
    
        private void projectsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            context.SaveChanges();
        }
    
  11. Debido a que se va a crear una aplicación de Windows Forms, se debe agregar código que indique al contexto de datos los objetos que se van a cambiar. Para agregar un evento CurrentItemChanged, haga clic con el botón secundario en projectBindingSource en la vista Diseño y haga clic en Propiedades. A continuación, haga clic en el icono de eventos en la ventana Propiedades y haga doble clic en el evento CurrentItemChanged para insertar el controlador en Form1.cs. Use el método UpdateObject(Object) del contexto de datos de ADO.NET en este controlador y use la propiedad Current para indicar qué propiedad ha cambiado, como se indica a continuación.

        Private Sub ProjectsBindingSource_CurrentItemChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProjectsBindingSource.CurrentItemChanged
            context.UpdateObject(ProjectsBindingSource.Current)
        End Sub
    End Class
    
        private void projectsBindingSource_CurrentItemChanged(object sender, EventArgs e)
        {
            context.UpdateObject(projectsBindingSource.Current);
        }
    }}
    
  12. Para probar el formulario, presione F5 y realice algunos cambios en un elemento de la DataGridView de proyectos. Al hacer clic en Guardar, se propagarán los cambios que realice al sitio web.

    Nota

    Es posible que deba hacer clic fuera de la celda en la que realiza los cambios antes de hacer clic en el botón Guardar para ver si los cambios surten efecto.

Para obtener el ejemplo de código completo Form1, vea Ejemplo completo de Form1 de WCF de SharePoint Foundation.

Vea también

Conceptos

Implementación de la interfaz REST de SharePoint Foundation

Consultas a SharePoint Foundation con los servicios de datos de ADO.NET

Otros recursos

WCF REST Programming Model