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
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.
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(); }
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); }
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.
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.
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(); } }}
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 : récupérer des listes
Procédure : créer, mettre à jour et supprimer des listes