Arbeiten mit Listenobjekten und Auflistungen

Letzte Änderung: Freitag, 9. April 2010

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Objekte
Auflistungen
Indexerstellung

Zum Anwenden von Aktionen auf Listendaten auf einer SharePoint-Website benötigen Sie zunächst ein SPWeb-Objekt, das als Einstiegspunkt in das Objektmodell dient und den Zugriff auf Listen, Elemente, Dokumente, Benutzer, Warnungen und usw. ermöglicht. Informationen dazu, wie SharePoint-Websites zurückgegeben werden, finden Sie unter Abrufen von Verweisen auf Websites, Webanwendungen und andere Schlüsselobjekte.

Objekte

Die meisten Klassen in den Namespaces Microsoft.SharePoint und Microsoft.SharePoint.Administration beginnen mit SP. Klassen der Microsoft.SharePoint-Assembly, die nicht mit diesem Präfix beginnen, sind zumeist Steuerelemente von Webformularen.

SharePoint Foundation speichert Änderungen von Objekteigenschaften in der Regel erst in der Datenbank, nachdem Sie die Update-Methode für das angegebene Objekt aufgerufen haben. Im folgenden Beispiel wird gezeigt, wie Sie Titel und Beschreibung der Liste "Tasks" ändern.

         
Dim oList As SPList = oWebsite.Lists("Tasks")
oList.Title = "New_Title"
oList.Description = "List_Description"
oList.Update()
SPList oList = oWebsite.Lists["Tasks"];
oList.Title="New_Title";
oList.Description="List_Description";
oList.Update();
HinweisHinweis

Metadaten für das Dokument können nicht mithilfe der Update()-Methode des SPListItem-Objekts geändert werden, wenn das Dokument aus einer Dokumentbibliothek ausgecheckt ist.

Auflistungen

So wie Listen zentraler Bestandteil einer SharePoint-Website sind, sind Auflistungen ein zentraler Bestandteil der entsprechenden Objektmodelle. Sie können die einzelnen Auflistungen zum Hinzufügen, Löschen, Aufzählen und Aktualisieren eines bestimmten Objekttyps verwenden. Auflistungsklassen haben im Allgemeinen die folgenden Merkmale:

  • Name endet auf "Collection".

  • Implementieren die System.Collections.ICollection-Schnittstelle.

  • Haben eine Count-Eigenschaft vom Typ "Int32".

  • Verfügen über eine Int32-Indexerstellung, die zum Abrufen des nth-Elements in der Auflistung verwendet werden kann.

  • Verfügen über eine Indexerstellung, die eine Element-ID verwendet.

  • Weisen die Methoden Add und Delete auf.

Durch Aufrufen der Add-Methode für eine Auflistung wird in der Regel die Datenbank des Back-End-Servers mit den entsprechenden Daten aktualisiert, es sei denn, zum Aktualisieren von Daten sind zusätzliche Informationen erforderlich. In diesem Fall gibt die Add-Methode ein Objekt zurück, das Sie zum Erfassen der Informationen verwenden können. Um beispielsweise ein Element einer Liste hinzuzufügen, verwenden Sie zunächst die Add-Methode der Microsoft.SharePoint.SPListItemCollection-Klasse zum Zurückgeben eines SPListItem-Objekts und Zuweisen von Werten zu den entsprechenden Eigenschaften des Objekts. Rufen Sie dann die Update-Methode auf, um die Änderungen in der Inhaltsdatenbank zu speichern.

Indexerstellung

Die Indexerstellung ist ein nützliches Instrument für den Zugriff auf einzelne Elemente in Auflistungen. Verwenden Sie zum Zurückgeben eines Elements in Microsoft C# eckige Klammern ([]) oder in Microsoft Visual Basic runde Klammern (()), um entweder einen Index oder eine Zeichenfolge zu erhalten, die das Element in der Auflistung bestimmt.

Wenn OWebsite beispielsweise eine Instanz der SPWeb-Klasse darstellt, gibt SPList oList = oWebsite.Lists["Announcements"] in C# die Liste "Announcements" zurück, während Dim oList As SPList = oWebsite.Lists("Announcements") dieselbe Liste in Visual Basic zurückgibt.

Um Elemente aus der Liste zurückzugeben, empfiehlt es sich, eine der GetItem*-Methoden des Listenobjekts aufzurufen und anzugeben, welche Elemente abgerufen werden sollen. Das Abrufen aller Elemente in einer Liste mithilfe der Items-Eigenschaft kann die Systemleistung beeinträchtigen, da die Rückgabe aller Spalten für alle Elemente erzwungen wird. Verwenden Sie stattdessen z. B. die GetItems-Methode, und übergeben Sie ein SPQuery-Objekt, das die Teilmenge angibt: SPListItemCollection collItem = oList.GetItems(oQuery) (in Visual Basic Dim collItem As SPListItemCollection = oList.GetItems(oQuery)).

Nachdem Sie eine Elementauflistung aus einer Liste mithilfe einer GetItem*-Methode zurückgegeben haben, können Sie für die Indexerstellung einen Feldnamen angeben und die Auflistung durchlaufen, um Werte aus dem Feld zurückzugeben. Das folgende Beispiel zeigt die Werte für "Due Date", "Status" und "Title" für jedes Element in einer Auflistung an.

Dim oItem As SPListItem

For Each oItem In  collItem

    Response.Write(SPEncode.HtmlEncode(oItem("Due Date").ToString()) + "<BR>")
    Response.Write(SPEncode.HtmlEncode(oItem("Status").ToString()) + "<BR>")
    Response.Write(SPEncode.HtmlEncode(oItem("Title").ToString()) + "<BR>")

Next oItem
foreach(SPListItem oItem in collItem)
{
    Response.Write(SPEncode.HtmlEncode(oItem["Due Date"].ToString()) + "<BR>");
    Response.Write(SPEncode.HtmlEncode(oItem["Status"].ToString()) + "<BR>");
    Response.Write(SPEncode.HtmlEncode(oItem["Title"].ToString()) + "<BR>");
}
HinweisHinweis

Zusätzlich zum Anfordern einer using-Direktive (Imports in Visual Basic) für den Microsoft.SharePoint-Namespace erfordert das vorherige Beispiel eine Direktive für den Microsoft.SharePoint.Utilities-Namespace.

Das nächste Beispiel veranschaulicht, wie alle Werte von "Title" und "Status" für die Liste "Tasks" auf einer SharePoint-Website zurückgegeben werden.

Dim oWebsite As SPWeb = SPContext.Current.Web
Dim oList As SPList = oWebsite.Lists("Tasks")
Dim collItem As SPListItemCollection = oList.GetItems("Title", "Status")

Dim oItem As SPListItem
For Each oItem In  collItem

    Response.Write(SPEncode.HtmlEncode(oItem("Title").ToString()) + " :: " _
        & SPEncode.HtmlEncode(oItem("Status").ToString()) + "<BR>")

Next oItem
SPWeb oWebsite = SPContext.Current.Web;

SPList oList = oWebsite.Lists["Tasks"];
SPListItemCollection collItem = oList.GetItems("Title", "Status");

foreach(SPListItem oItem in collItem)
{
    Response.Write(SPEncode.HtmlEncode(oItem["Title"].ToString()) + " :: " + 
        SPEncode.HtmlEncode(oItem["Status"].ToString()) + "<BR>");
}

Falls die Anforderungseinschränkung implementiert wurde, können ineffiziente Abfragen wegen Problemen aufgrund übermäßiger Anzahlen von Suchvorgängen oder Elementen blockiert werden. Sie können die Effizienz von Abfragen steigern und Probleme aufgrund der Anzahl von Suchvorgängen verringern, indem Sie ein SPQuery-Objekt definieren, das eine begrenzte Anzahl von Ansichtsfeldern angibt (ViewFields) und dieses Abfrageobjekt anschließend an die GetItems-Methode übergeben (siehe das folgende Beispiel).

Dim oQuery As New SPQuery()
oQuery.Query = "<ViewFields><FieldRef Name = ""Title"" />" & 
    "<FieldRef Name = ""Status""/></ViewFields>"
Dim collItem As SPListItemCollection = oList.GetItems(oQuery)
SPQuery oQuery = new SPQuery();
oQuery.Query  =  "<ViewFields><FieldRef Name = \"Title\" />" +
    "<FieldRef Name = \"Status\"/></ViewFields>";
SPListItemCollection collItem = oList.GetItems(oQuery);

Zum Beheben von Problemen bei der Einschränkung der Elementanzahl müssen Sie ggf. mithilfe der SPListItemCollectionPosition-Klasse für den Elementindex eine Paginierung der Ergebnisse durchführen.

HinweisHinweis

Zusätzlich zum Anfordern einer using-Direktive (Imports in Visual Basic) für den Microsoft.SharePoint-Namespace erfordert das vorherige Beispiel eine Direktive für den Microsoft.SharePoint.Utilities-Namespace.

Sie können mithilfe der Indexerstellung auch Werte in einer Liste ändern. Im folgenden Beispiel wird einer Auflistung ein neues Listenelement hinzugefügt, und die Werte für eine URL-Spalte werden dem Element zugewiesen.

Dim oNewItem As SPListItem = oList.Items.Add()

oNewItem("URL_Field_Name") = "URL, _ Field_Description"

oNewItem.Update() 
SPListItem oNewItem = oList.Items.Add();

oNewItem["URL_Field_Name"] = "URL, Field_Description";

oNewItem.Update();
HinweisHinweis

Der Feldtyp URL ist eindeutig, da er zwei Werte (getrennt durch ein Komma und ein Leerzeichen) umfasst. Im obigen Beispiel werden diese beiden Werte dem neuen Element über eine einzelne Indexerstellung zugewiesen.

Im folgenden Beispiel wird die GetItemById(Int32)-Methode verwendet, um ein Element zurückzugeben. Anschließend wird der Wert der Spalten "Status" und "Title" festgelegt.

Dim oItem As SPListItem = oList.GetItemById(1) 

oItem("Status") = "Task_Status"
oItem("Title") = "Task_Title"

oItem.Update() 
SPListItem oItem = oList.GetItemById(1);

oItem["Status"]="Task_Status";
oItem["Title"]="Task_Title";

oItem.Update();

Wenn Sie die Liste der Felder angeben können, die für das Element abgerufen werden sollen, und keines der Felder den Typ Lookup hat oder ein Feldtyp ist, der Informationen von SPFieldLookup erbt, können Sie die Leistung verbessern, indem die GetItemByIdSelectedFields(Int32, [])-Methode anstelle der GetItemById(Int32)-Methode aufgerufen wird.

HinweisHinweis

Bei der Indexerstellung wird eine ArgumentOutOfRange-Ausnahme ausgelöst, wenn das angegebene Element nicht gefunden wird.

Informationen zu bestimmten Datenformaten für Listenelemente in SharePoint Foundation finden Sie im Artikel zur SPListItem-Klasse.

Siehe auch

Referenz

Microsoft.SharePoint

Microsoft.SharePoint.Administration

Konzepte

Gewusst wie: Zurückgeben von Elementen aus einer Liste

Gewusst wie: Erstellen oder Löschen von Listen

Gewusst wie: Hinzufügen oder Löschen von Listenelementen

Gewusst wie: Lesen des Werts eines Felds in einem Listenelement

Namespaces im SharePoint Foundation-Objektmodell

Verwenden von Visual Studio für die SharePoint-Enwicklung

Abrufen von Verweisen auf Websites, Webanwendungen und andere Schlüsselobjekte

Registrieren und Importieren von Namespaces