Freigeben über


Implementieren des clientseitigen Objektmodells

Letzte Änderung: Montag, 7. Februar 2011

Gilt für: SharePoint Foundation 2010

Im vorherigen Teil dieser exemplarischen Vorgehensweise, Implementieren der SharePoint Foundation REST-Schnittstelle, wurde die Verwendung von ADO.NET Data Services und der SharePoint Foundation-REST-Schnittstelle zum Arbeiten mit in Listen und Bibliotheken gespeicherten Daten gezeigt. Die REST-Schnittstelle stellt jedoch keinen Zugriff auf andere Daten in SharePoint Foundation-Websites bereit, wie es in komplexeren Anwendungen erforderlich sein kann. In vorherigen Versionen von SharePoint Foundation haben Sie möglicherweise die standardmäßigen Webdienste zum Zugreifen auf Daten verwendet, anschließend Wrapperklassen definiert und den zurückgegebenen SOAP XML-Code in Objekte für die Anwendung konvertiert. In Microsoft SharePoint Foundation 2010 wird ein verwaltetes clientseitiges Objektmodell eingeführt, das Zugriff auf eine umfassendere Gruppe von SharePoint Foundation-Objekten bereitstellt als die neue REST-Schnittstelle, und zwar auf Websiteebene oder darunter innerhalb der Objekthierarchie. Es erleichtert auch die Arbeit mit Daten in einer Remoteanwendung im Vergleich zur Verwendung der Webdienste.

In diesem Beispiel wird vorausgesetzt, dass Sie die in Implementieren der SharePoint Foundation REST-Schnittstelle beschriebene Windows Forms-Anwendung erstellt haben. Im Beispiel wird das Clientobjektmodell verwendet, um den Text in der Titelleiste des Formulars auf den Titel der Website festzulegen und um die Beschreibung der Projects-Liste auf der Website auf der Grundlage des Projektelements zu ändern, das beim Klicken auf die Schaltfläche Star Project im Formular ausgewählt wird.

Verwenden des Clientobjektmodells zum Ändern des Formulartitels und der Listenbeschreibung

  1. Fügen Sie zwei Clientobjektmodell-Assemblys einen Verweis hinzu: Microsoft.SharePoint.Client.dll und Microsoft.SharePoint.Client.Runtime.dll. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Verweise, und klicken Sie auf Verweis hinzufügen. Wählen Sie auf der Registerkarte .NET des Dialogfelds Verweis hinzufügen die Optionen Microsoft.SharePoint.Client und Microsoft.SharePoint.Client.Runtime aus, und klicken Sie dann auf OK.

  2. Fügen Sie in Form1.cs oder Form1.vb Anweisungen zum Importieren des Microsoft.SharePoint.Client-Namespaces in das Projekt hinzu. Verwenden Sie den Clientkontext für den Eintritt in das Clientobjektmodell, wobei ein ClientContext()-Konstruktor wie folgt zum Herstellen einer Verbindung mit der Website verwendet wird.

    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. Verwenden Sie das Form1_Load-Ereignis, um die Anforderung an den SharePoint Foundation-Server zu senden. Vom Clientobjektmodell werden automatisch die Standardanmeldeinformationen verwendet. Zur Verwendung eines Objekts müssen Sie die Load<T>(T, [])-Methode aufrufen, um das Laden der Objekteigenschaften explizit anzufordern, und dann müssen Sie die ExecuteQuery()-Methode (oder in der Microsoft Silverlight-Version des Objektmodells die ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler)-Methode) aufrufen, um die Anforderung an SharePoint Foundation zu senden und das Websiteobjekt mit Daten zu füllen. Im folgenden Codeausschnitt wird die Titelleiste des Formulars auf den Titel der Website festgelegt.

        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. Zusätzlich zum Ändern des Formulartitels wird in diesem Beispiel auch die Beschreibung der Projects-Liste geändert, die auf der Website auf der Grundlage der Benutzerauswahl angezeigt wird. Wenn der Benutzer ein Element in der Projects-Liste auswählt und auf eine Schaltfläche klickt, wird die Beschreibung der Liste geändert und das ausgewählte Projekt hervorgehoben. Klicken Sie zum Hinzufügen einer Schaltfläche zu Form1 mit der rechten Maustaste auf die Formulartitelleiste neben der Schaltfläche Speichern, und wählen Sie in der geöffneten Dropdownliste die Option Schaltfläche aus.

  5. Legen Sie im Fenster Eigenschaften für die Schaltfläche die Option Anzeigestil auf Text fest, und geben Sie Star Project als Wert für die Einstellung Text ein.

  6. Doppelklicken Sie auf die Schaltfläche im Formular, um das Click-Ereignis zu öffnen, und fügen Sie dann den folgenden Code ein, der die GetByTitle(String)-Methode des Clientobjektmodells verwendet, um die Liste zurückzugeben und auf die Beschreibung zuzugreifen. Im Beispiel wird die Projects-Datenquelle von ADO.NET Data Services zum Abrufen des Titels des zurzeit ausgewählten Projekts verwendet, und das ausgewählte Element wird in ein ProjectsItem-Objekt umgewandelt, um auf die Title-Eigenschaft des Elements zuzugreifen.

        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. Drücken Sie F5, um die Anwendung auszuführen und zu sehen, dass der Titel des Formulars geändert wurde. Wählen Sie eines der Elemente im DataGridView-Steuerelement von Projects aus, und klicken Sie auf Star Project, um die Beschreibung der Liste zu ändern.

Das vollständige Form1-Codebeispiel finden Sie unter Vollständiges SharePoint Foundation WCF-Beispiel "Form1".

Siehe auch

Konzepte

Exemplarische Vorgehensweise: Erstellen und Implementieren eines benutzerdefinierten WCF-Diensts in SharePoint Foundation

Gewusst wie: Abrufen von Listen

Gewusst wie: Erstellen, Aktualisieren und Löschen von Listen

Weitere Ressourcen

Verwaltetes Clientobjektmodell