Implementación del modelo de objetos del cliente

Última modificación: lunes, 07 de febrero de 2011

Hace referencia a: SharePoint Foundation 2010

En la parte anterior de este tutorial, Implementación de la interfaz REST de SharePoint Foundation, se muestra cómo usar los servicios de datos de ADO.NET y la interfaz de REST de SharePoint Foundation para trabajar con datos almacenados en listas y bibliotecas. Sin embargo, la interfaz de REST no proporciona acceso a otros datos de sitios de SharePoint Foundation, lo cual puede ser necesario en aplicaciones más avanzadas. En versiones anteriores de SharePoint Foundation, es posible que haya usado los servicios web predeterminados para obtener acceso a los datos, haya definido clases contenedoras y haya convertido el XML de SOAP devuelto en objetos para la aplicación. Microsoft SharePoint Foundation 2010 presenta un modelo de objetos de cliente administrado que proporciona acceso a un conjunto más amplio de objetos de SharePoint Foundation que la nueva interfaz de REST, en el nivel del sitio web o uno inferior dentro de la jerarquía de objetos, y facilita el trabajo con datos en una aplicación remota en lugar de usar los servicios web.

En este ejemplo se supone que ya creó la aplicación de Windows Forms descrita en Implementación de la interfaz REST de SharePoint Foundation. En el ejemplo se usa el modelo de objetos de cliente para establecer el texto de la barra de título del formulario igual que el título del sitio web y para cambiar la descripción de la lista Projects del sitio en función del elemento de proyecto seleccionado cuando el usuario hace clic en un botón Star Project en el formulario.

Uso del modelo de objetos de cliente para cambiar el título del formulario y la descripción de la lista

  1. Agregue una referencia a dos ensamblados del modelo de objetos de cliente, Microsoft.SharePoint.Client.dll y Microsoft.SharePoint.Client.Runtime.dll. Haga clic con el botón secundario en Referencias en el Explorador de soluciones y, a continuación, haga clic en Agregar referencia. En la ficha .NET del cuadro de diálogo Agregar referencia, seleccione Microsoft.SharePoint.Client y Microsoft.SharePoint.Client.Runtime y, a continuación, haga clic en Aceptar.

  2. En Form1.cs o Form1.vb, agregue instrucciones para importar el espacio de nombres Microsoft.SharePoint.Client al proyecto. Use el contexto de cliente para entrar al modelo de objetos de cliente, mediante un constructor ClientContext() para conectarse al sitio web, como se muestra a continuación.

    Imports ProjectTracker.ServiceReference1
    Imports System.Net
    Imports Microsoft.SharePoint.Client
    
    Public Class Form1
    
        Private Shared websiteUrl As String = "http://YourServer/sites/YourSiteCollection/YourWebSite"
    
        Private context As New TestWebsDataContext(
            New Uri(websiteUrl  + "/_vti_bin/listdata.svc"))
    
        Private clientContext As New ClientContext(websiteUrl)
    
        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;
    using Microsoft.SharePoint.Client;
    
    namespace ProjectTracker
    {
        using ServiceReference1;
        using System.Net;
    
        public partial class Form1 : Form
        {
    
            private static string websiteUrl= "http://YourServer/sites/YourSiteCollection/YourWebSite";
    
            TestWebsDataContext context = new TestWebsDataContext(
                new Uri(websiteUrl + "/_vti_bin/listdata.svc"));
    
            ClientContext clientContext = new ClientContext(websiteUrl);
    
            public Form1()
            {
                InitializeComponent();
            }
    
  3. Use el evento Form1_Load para enviar la solicitud al servidor de SharePoint Foundation. El modelo de objetos de cliente usa automáticamente las credenciales predeterminadas. Para usar un objeto, debe llamar al método Load<T>(T, []) para solicitar explícitamente la carga de las propiedades del objeto y, a continuación, llamar al método ExecuteQuery() (o en la versión de Microsoft Silverlight del modelo de objetos, al método ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler)), para enviar la solicitud a SharePoint Foundation y rellenar el objeto del sitio web con datos. En el siguiente fragmento de código, la barra de título del formulario se establece igual que el título del sitio web.

        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
    
            clientContext.Load(clientContext.Web)
            clientContext.ExecuteQuery()
            Me.Text = clientContext.Web.Title
        End Sub
    
        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 Sub ProjectsBindingSource_CurrentItemChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProjectsBindingSource.CurrentItemChanged
            context.UpdateObject(ProjectsBindingSource.Current)
        End Sub
    
        Private Sub ProjectsBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProjectsBindingNavigatorSaveItem.Click
            context.SaveChanges()
        End Sub
    
            private void Form1_Load(object sender, EventArgs e)
            {
                context.Credentials = CredentialCache.DefaultCredentials;
                projectsBindingSource.DataSource = context.Projects;
    
                clientContext.Load(clientContext.Web);
                clientContext.ExecuteQuery();
    
                this.Text = clientContext.Web.Title;
    
            }
    
            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;
            }
    
            private void projectsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
            {
                context.SaveChanges();
            }
    
            private void projectsBindingSource_CurrentItemChanged(object sender, EventArgs e)
            {
                context.UpdateObject(projectsBindingSource.Current);
            }
    
  4. Además de cambiar el título del formulario, en este ejemplo también se cambia la descripción de la lista Projects mostrada en el sitio web en función de la selección del usuario. Cuando el usuario selecciona un elemento de la lista Projects y hace clic en un botón, la descripción de la lista cambia y resalta el proyecto seleccionado. Para agregar un botón a Form1, haga clic con el botón secundario en la barra de título del formulario situada junto al botón Guardar y seleccione Botón en la lista desplegable que aparece.

  5. En la ventana Propiedades del botón, establezca DisplayStyle en Text y escriba Star Project como el valor de la opción Text.

  6. Haga doble clic en el botón del formulario para abrir su evento Click y agregue el siguiente código, que usa el método GetByTitle(String) del modelo de objetos de cliente para devolver la lista y obtener acceso a su descripción. En el ejemplo se usa el origen de datos Projects de los servicios de datos de ADO.NET para obtener el título del proyecto seleccionado actualmente y se convierte el elemento seleccionado en un objeto ProjectsItem para obtener acceso a la propiedad Title del elemento.

        Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click
            Dim oList As List = clientContext.Web.Lists.GetByTitle("Projects")
    
            oList.Description = String.Format("Star Project of the Week is {0}!!!", DirectCast(ProjectsBindingSource.Current, ProjectsItem).Title)
    
            oList.Update()
            clientContext.ExecuteQuery()
        End Sub
    End Class
    
            private void toolStripButton1_Click(object sender, EventArgs e)
            {
                List oList = clientContext.Web.Lists.GetByTitle("Projects");
    
                oList.Description = string.Format("Star Project of the Week is {0}!!!",
                    ((ProjectsItem)projectsBindingSource.Current).Title);
    
                oList.Update();
                clientContext.ExecuteQuery();
            }
    }}
    
  7. Presione F5 para ejecutar la aplicación para comprobar que el título del formulario ha cambiado. Seleccione uno de los elementos en el control DataGridView de la lista Projects y, a continuación, haga clic en Star Project para cambiar la descripción de la lista.

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

Vea también

Conceptos

Tutorial: Creación e implementación de un servicio personalizado de WCF en SharePoint Foundation

Procedimiento para recuperar listas

Procedimiento para crear, actualizar y eliminar listas

Otros recursos

Modelo de objetos cliente administrado