Am Wochenende habe ich mich ein wenig mit dem SharePoint 2010 Client Object Model beschäftigt. Die ein oder andere Erkenntnis will ich euch natürlich nicht vorenthalten :-).
 
Dieses neue Objektmodell soll die Entwicklung von clientseitigen Anwendungen in SharePoint 2010 erleichtern und wird auch von SharePoint Foundation 2010 unterstützt.
 
Die Namensgebung der Objekte ist denkbar einfach. SPWeb, SPSite oder SPList-Objekte werden im Client Object Model ohne den SP-prefix betitelt: Web, Site, List.
 
Und nun an’s Eingemachte!
(Um der Schritt-für-Schritt-Anleitung folgen zu können, muss SharePoint 2010 und Visual Studio 2010 Beta 2 in einer Entwicklungsumgebung vorhanden sein.)
 
Schritt 1 – Visual Studio 2010 Projekt erstellen
  • Öffne Visual Studio 2010
  • Neues Projekt erstellen (Windows Forms Application, C#)SharePoint 2010 - Client Object Model
  • Build Output einstellen: AnyCPU oder x64SharePoint 2010 - Client Object Model

Schritt 2 – Client Object Model referenzieren

  • Rechtsklick auf References und Add Reference auswählenSharePoint 2010 - Client Object Model
  • Unter Browse ins 14-Verzeichnis navigieren:
    C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14ISAPI
  • und die folgenden Dateien auswählen:
    – Microsoft.SharePoint.Client.dll
    – Microsoft.SharePoint.Client.Runtime.dllSharePoint 2010 - Client Object Model

    SharePoint 2010 - Client Object Model

  • Nun natürlich noch das folgende using-Statement hinzufügen:using SP = Microsoft.SharePoint.Client;

    Das Ergebnis sollte wie folgt aussehen:

    SharePoint 2010 - Client Object Model

Schritt 3 – Anwendung mit Steuerelementen ausstatten

In meiner Beispielanwendung habe ich die folgenden Steuerelemente verwendet:

  • Textbox (zur Eingabe der URL, oben, Name: tb_Url)
  • Button (Start der Abfrage, oben, Name: btn_Go)
  • PictureBox (Anzeige SharePointJungs-Logo, oben, Name: pictureBox1)
  • TreeView (Anzeige der SharePoint-Listen, mitte, Name: tv_WebContent)
  • Textbox (Anzeige der Informationen, unten, Name: tb_Info)

SharePoint 2010 - Client Object Model

Schritt 4 – Logik 🙂

Doppelklick auf den Button und den folgenden Quellcode hinzufügen:

private void btn_Go_Click(object sender, EventArgs e)
{
    tv_WebContent.Nodes.Clear();
    tb_Info.Clear();

    using (SP.ClientContext clientctx = new SP.ClientContext(tb_Url.Text.ToString()))
    {
        var web = clientctx.Web;

        clientctx.Load(web);
        clientctx.Load(web.Lists);

        clientctx.ExecuteQuery();
        TreeNode node = tv_WebContent.Nodes.Add(web.Title);
        node.ToolTipText = web.Description;

        foreach (SP.List list in web.Lists)
        {
            //lbLists.Items.Add(list.Title);
            TreeNode subnode = node.Nodes.Add(list.Title);
            subnode.ToolTipText = list.Description;
        }
        tv_WebContent.ExpandAll();
    }
}

Doppelklick auf das TreeView-Steuerelement und den folgenden Code einfügen:

private void tv_WebContent_AfterSelect(object sender, TreeViewEventArgs e)
{
    if (tv_WebContent.SelectedNode.Parent != null)
    {
        using (SP.ClientContext clientctx = new SP.ClientContext(tb_Url.Text.ToString()))
        {
            var list = clientctx.Web.Lists.GetByTitle(tv_WebContent.SelectedNode.Text.ToString());

            clientctx.Load(list);
            clientctx.ExecuteQuery();

            string infos =
                string.Format(“Title: {0}ItemCount: {1}IsHidden: {2}GUID: {3}Attachements: {4}”,
                list.Title + Environment.NewLine,
                list.ItemCount + Environment.NewLine,
                list.Hidden.ToString() + Environment.NewLine,
                list.Id.ToString() + Environment.NewLine,
                list.EnableAttachments);

            tb_Info.Text = infos;
        }
    }
    else
    {
        using (SP.ClientContext clientctx = new SP.ClientContext(tb_Url.Text.ToString()))
        {
            var web = clientctx.Web;
            clientctx.Load(web);
            clientctx.Load(web.Lists);
            clientctx.Load(web.Webs);
            clientctx.ExecuteQuery();

            string infos =
                string.Format(“Title: {0}SubWebs: {1}ListCount: {2}GUID: {3}LCID: {4}”,
                web.Title + Environment.NewLine,
                web.Webs.Count.ToString() + Environment.NewLine,
                web.Lists.Count.ToString() + Environment.NewLine,
                web.Id.ToString() + Environment.NewLine,
                web.Language.ToString());

            tb_Info.Text = infos;

        }
    }

}

Schritt 5 – Ergebnis begutachten

In die Textbox kann nun die URL des SharePoint 2010-Webs eingetragen werden. Mit dem Klick auf Go! wird die Abfrage gestartet.

Ein Klick auf den Root-Knoten zeigt Informationen zur Website an:

SharePoint 2010 - Client Object Model

Informationen zur Liste werden wie folgt angezeigt:

SharePoint 2010 - Client Object Model

Ich hoffe, ich konnte euch die Entwicklung einer clientseitigen Anwendung etwas näher bringen.

Die fertige Solution kann hier herunter geladen werden:
Download Beispielanwendung – Client Object Model