Partager via


Implémentation du modèle objet côté client

Dernière modification : lundi 7 février 2011

S’applique à : SharePoint Foundation 2010

La partie précédente de cette procédure pas à pas, Implémentation de l’interface REST SharePoint Foundation, montre comment utiliser ADO.NET Data Services et l’interface REST de SharePoint Foundation pour exploiter des données stockées dans des listes et des bibliothèques. Toutefois, l’interface REST ne donne pas accès aux autres données dans les sites SharePoint Foundation, alors que cet accès peut être nécessaire dans les applications plus avancées. Dans les versions antérieures de SharePoint Foundation, vous avez peut-être utilisé les services Web par défaut pour accéder aux données, puis défini des classes wrapper et converti le XML SOAP retourné en objets pour votre application. Microsoft SharePoint Foundation 2010 introduit un modèle objet côté client géré qui donne accès à un ensemble plus large d’objets SharePoint Foundation que par le biais de la nouvelle interface REST, au niveau du site Web ou à un inférieur au sein de la hiérarchie d’objets, et qui permet d’utiliser les données dans une application distante plus facilement que par l’intermédiaire des services Web.

Cet exemple suppose que vous avez créé l’application Windows Forms décrite dans Implémentation de l’interface REST SharePoint Foundation. L’exemple utilise le modèle objet client pour attribuer au texte de la barre de titre du formulaire le titre du site Web et pour modifier la description de la liste Projects sur le site en fonction de l’élément de projet sélectionné lorsque l’utilisateur clique sur un bouton Star Project dans le formulaire.

Utilisation du modèle objet client pour modifier le titre du formulaire et la description de la liste

  1. Ajoutez une référence à deux assemblys de modèle objet client, Microsoft.SharePoint.Client.dll et Microsoft.SharePoint.Client.Runtime.dll. Cliquez avec le bouton droit sur Références dans l’Explorateur de solutions, puis cliquez sur Ajouter une référence. Sous l’onglet .NET de la boîte de dialogue Ajouter une référence, sélectionnez Microsoft.SharePoint.Client et Microsoft.SharePoint.Client.Runtime, puis cliquez sur OK.

  2. Dans Form1.cs ou Form1.vb, ajoutez des instructions pour importer l’espace de noms Microsoft.SharePoint.Client dans le projet. Utilisez le contexte client pour accéder au modèle objet client, en recourant à un constructeur ClientContext() pour vous connecter au site Web, comme suit.

    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. Utilisez l’événement Form1_Load pour envoyer la demande au serveur SharePoint Foundation. Le modèle objet client utilise automatiquement les informations d’identification par défaut. Pour utiliser un objet, vous devez appeler la méthode Load<T>(T, []) afin de demander explicitement le chargement des propriétés de l’objet, puis appeler la méthode ExecuteQuery() (ou dans la version Microsoft Silverlight du modèle objet, la méthode ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler)), pour envoyer la demande à SharePoint Foundation et remplir l’objet de site Web avec des données. Dans l’extrait suivant, la barre de titre du formulaire est définie sur le titre du site 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. Outre le titre du formulaire, cet exemple modifie la description de la liste Projects qui apparaît dans le site Web en fonction de la sélection de l’utilisateur. Lorsque l’utilisateur sélectionne un élément dans la liste Projects et qu’il clique sur un bouton, la description de la liste change de manière à mettre en surbrillance le projet sélectionné. Pour ajouter un bouton à Form1, cliquez avec le bouton droit sur la barre de titre du formulaire en regard du bouton Enregistrer, puis sélectionnez Bouton dans la liste déroulante qui apparaît.

  5. Dans la fenêtre Propriétés du bouton, définissez Style d’affichage sur Texte, et tapez Star Project comme valeur pour le paramètre Texte.

  6. Double-cliquez sur le bouton dans le formulaire pour ouvrir son événement Click et ajoutez le code suivant, qui utilise la méthode GetByTitle(String) du modèle objet client pour retourner la liste et accéder à sa description. L’exemple utilise la source de données Projects ADO.NET Data Services pour obtenir le titre du projet actuellement sélectionné et convertit l’élément sélectionné en un objet ProjectsItem pour accéder à la propriété Title de l’élément.

        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. Appuyez sur la touche F5 pour exécuter l’application afin de constater que le titre du formulaire a changé. Sélectionnez l’un des éléments dans le contrôle DataGridView Projects, puis cliquez sur Star Project pour modifier la description de la liste.

Pour obtenir l’exemple de code Form1 complet, voir Exemple Form1 WCF SharePoint Foundation complet.

Voir aussi

Concepts

Procédure pas à pas : création et implémentation d’un Service WCF personnalisé dans SharePoint Foundation

Procédure : récupérer des listes

Procédure : créer, mettre à jour et supprimer des listes

Autres ressources

Modèle objet client managé