Verwenden des Silverlight-Objektmodells
Letzte Änderung: Donnerstag, 1. Juli 2010
Gilt für: SharePoint Foundation 2010
Verfügbar in SharePoint Online
Microsoft SharePoint Foundation 2010 unterstützt die Implementierung des Silverlight-Clientobjektmodells in zwei Kontexten: in einem Silverlight-Webpart und innerhalb des Silverlight-Systems für domänenübergreifenden Datenzugriff (Cross-Domain Data Access), über das eine Silverlight-Anwendung mit Microsoft SharePoint Foundation 2010-Daten interagiert. Eine dritte Möglichkeit – das Ändern der domänenübergreifenden Richtlinie für den Clientzugriff – bringt Sicherheitsrisiken mit sich und wird in SharePoint Foundation 2010 nicht unterstützt.
Da die Abfrageausführung bei Verwendung des SharePoint Foundation Silverlight-Objektmodells asynchron ist, müssen Sie Delegaten für Rückrufmethoden als Parameter in der ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler)-Methode übergeben, ähnlich wie bei der Abfrageausführung im JavaScript-Objektmodell. Zum Ausführen von Code, der über das Silverlight-Objektmodell Änderungen an der Benutzeroberfläche (User Interface, UI) vornimmt, müssen Sie diese Aufgabe an das Dispatcher-Objekt des Threads delegieren, der die Benutzeroberfläche durch Aufrufen der BeginInvoke()-Methode erstellt hat, wie in den folgenden Beispielen gezeigt.
Bereitstellen von Code über ein Silverlight-Webpart
Wenn Sie das SharePoint Foundation Silverlight-Objektmodell in einem Silverlight-Webpart verwenden möchten, können Sie eine Silverlight-Anwendung in Visual Studio erstellen und der Page-Klasse in der standardmäßigen Page.xaml.cs-Datei Ihres Projekts den Code hinzufügen. Nachdem Sie das Projekt erstellt haben, laden Sie die Anwendungspaketdatei (XAP-Datei) des Projekts in eine Dokumentbibliothek hoch. Fügen Sie ein Silverlight-Webpart in eine Webpartseite ein, und richten Sie die URL-Quelle des Webparts auf die XAP-Datei in der Dokumentbibliothek.
Im folgenden Beispiel wird von den Definitionen eines Button-Steuerelements und eines TextBlock-Steuerelements in der MainPage.xml-Datei des Projekts ausgegangen.
Abrufen von Listendaten
Im folgenden Beispiel wird gezeigt, wie Sie SharePoint Foundation-Daten im Kontext einer Silverlight-Anwendung abrufen können. Dabei werden Ereignishandler für die erfolgreiche Abfrageausführung oder für Fehler bei der Abfrageausführung verwendet. Mit der onQuerySucceeded-Methode wird ein Delegat erstellt, UpdateUIMethod, mit dem die zurückgegebenen Listendaten auf der Benutzeroberfläche angezeigt werden.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
public partial class MainPage : UserControl
{
Web oWebsite;
ListCollection collList;
IEnumerable<List> listInfo;
public MainPage()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ClientContext clientContext = ClientContext.Current;
oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;
clientContext.Load(oWebsite,
website=>website.Title);
listInfo = clientContext.LoadQuery(
collList.Include(
list=>list.Title,
list=>list.Fields.Include(
field=>field.Title).Where(
field=>field.Required == true
&& field.Hidden != true)));
clientContext.ExecuteQueryAsync(onQuerySucceeded, onQueryFailed);
}
private void onQuerySucceeded(object sender, ClientRequestSucceededEventArgs args)
{
UpdateUIMethod updateUI = DisplayInfo;
this.Dispatcher.BeginInvoke(updateUI);
}
private void onQueryFailed(object sender, ClientRequestFailedEventArgs args)
{
MessageBox.Show = "Request failed. " + args.Message + "\n" + args.StackTrace;
}
private void DisplayInfo()
{
MyOutput.Text = "Title: " + oWebsite.Title;
collList = oWebsite.Lists;
foreach (List oList in listInfo)
{
MyOutput.Text += "\n\tList: " + oList.Title;
FieldCollection collField = oList.Fields;
foreach (Field oField in collField)
{
MyOutput.Text += "\n\t\tField: " + oField.Title;
}
}
}
private delegate void UpdateUIMethod();
}
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Net
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Shapes
Imports Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Partial Public Class MainPage
Inherits UserControl
Private oWebsite As Web
Private collList As ListCollection
Private listInfo As IEnumerable(Of List)
Public Sub New()
InitializeComponent()
End Sub
Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim clientContext As ClientContext = ClientContext.Current
oWebsite = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists
clientContext.Load(oWebsite, Function(website) website.Title)
listInfo = clientContext.LoadQuery(collList.Include(Function(list) list.Title, Function(list) list.Fields.Include(Function(field) field.Title).Where(Function(field) field.Required = True AndAlso field.Hidden <> True)))
clientContext.ExecuteQueryAsync(AddressOf onQuerySucceeded, AddressOf onQueryFailed)
End Sub
Private Sub onQuerySucceeded(ByVal sender As Object, ByVal args As ClientRequestSucceededEventArgs)
Dim updateUI As UpdateUIMethod = AddressOf DisplayInfo
Me.Dispatcher.BeginInvoke(updateUI)
End Sub
Private Sub onQueryFailed(ByVal sender As Object, ByVal args As ClientRequestFailedEventArgs)
MessageBox.Show = "Request failed. " & args.Message & vbLf & args.StackTrace
End Sub
Private Sub DisplayInfo()
MyOutput.Text = "Title: " & oWebsite.Title
collList = oWebsite.Lists
For Each oList As List In listInfo
MyOutput.Text += vbLf & vbTab & "List: " & oList.Title
Dim collField As FieldCollection = oList.Fields
For Each oField As Field In collField
MyOutput.Text += vbLf & vbTab & vbTab & "Field: " & oField.Title
Next oField
Next oList
End Sub
Private Delegate Sub UpdateUIMethod()
End Class
End Namespace
Im vorherigen Beispiel wird der aktuelle Anforderungskontext mithilfe der Current-Eigenschaft angegeben und nicht mithilfe des ClientContext(String)-Konstruktors und durch Angeben einer URL. Sie können z. B. die XAP-Datei in das Verzeichnis Freigegebene Dokumente auf der Stammwebsite der Websitesammlung hochladen, eine Webpartseite auf einer untergeordneten Website an einer beliebigen Stelle unterhalb der Stammwebsite erstellen und dieser Seite ein Silverlight-Webpart hinzufügen, das auf die XAP-Datei zeigt und somit deren Logik implementiert. Anders ausgedrückt: Der Code befindet sich auf der Stammwebsite, die zugehörige Logik wird jedoch jeder Website in der Websitesammlung zur Verfügung gestellt.
Erstellen eines Listenelements
Im folgenden Beispiel wird gezeigt, wie Sie ein Listenelement in einer bestimmten Liste erstellen können. Dabei wird ein Delegat verwendet, um Informationen über das neue Element auf der Benutzeroberfläche anzuzeigen.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
public partial class MainPage : UserControl
{
private List oList;
private string siteUrl = "http://MyServer/sites/MySiteCollection/MyWebSite";
public MainPage()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ClientContext clientContext = new ClientContext(siteUrl);
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;
oList = clientContext.Web.Lists.GetByTitle("Announcements");
ListItem oListItem = oList.AddItem(new ListItemCreationInformation());
oListItem["Title"] = "My new item";
oListItem["Body"] = "This is my new Silverlight item.";
oListItem.Update();
clientContext.Load(oList,
list => list.Title);
clientContext.ExecuteQueryAsync(onQuerySucceeded, onQueryFailed);
}
private void onQuerySucceeded(object sender, ClientRequestSucceededEventArgs args)
{
UpdateUIMethod updateUI = DisplayInfo;
this.Dispatcher.BeginInvoke(updateUI);
}
private void DisplayInfo()
{
MyOutput.Text = "New item created in " + oList.Title;
}
private delegate void UpdateUIMethod();
private void onQueryFailed(object sender, ClientRequestFailedEventArgs args)
{
MessageBox.Show("Request failed. " + args.Message + "\n" + args.StackTrace);
}
}
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Net
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Shapes
Imports Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Partial Public Class MainPage
Inherits UserControl
Private oList As List
Private siteUrl As String = "http://MyServer/sites/MySiteCollection/MyWebSite"
Public Sub New()
InitializeComponent()
End Sub
Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim clientContext As New ClientContext(siteUrl)
Dim oWebsite As Web = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists
oList = clientContext.Web.Lists.GetByTitle("Announcements")
Dim oListItem As ListItem = oList.AddItem(New ListItemCreationInformation())
oListItem("Title") = "My new item"
oListItem("Body") = "This is my new Silverlight item."
oListItem.Update()
clientContext.Load(oList, Function(list) list.Title)
clientContext.ExecuteQueryAsync(AddressOf onQuerySucceeded, AddressOf onQueryFailed)
End Sub
Private Sub onQuerySucceeded(ByVal sender As Object, ByVal args As ClientRequestSucceededEventArgs)
Dim updateUI As UpdateUIMethod = AddressOf DisplayInfo
Me.Dispatcher.BeginInvoke(updateUI)
End Sub
Private Sub DisplayInfo()
MyOutput.Text = "New item created in " & oList.Title
End Sub
Private Delegate Sub UpdateUIMethod()
Private Sub onQueryFailed(ByVal sender As Object, ByVal args As ClientRequestFailedEventArgs)
MessageBox.Show("Request failed. " & args.Message & vbLf & args.StackTrace)
End Sub
End Class
End Namespace
Siehe auch
Konzepte
Codebeispiel: Silverlight List Viewer
Richtlinien für das Clientobjektmodell
Gewusst wie: Abrufen von Listen
Gewusst wie: Erstellen, Aktualisieren und Löschen von Listenelementen
Allgemeine Programmieraufgaben