Gewusst wie: Abrufen von Listenelementen

Letzte Änderung: Freitag, 29. April 2011

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Abrufen von Elementen aus einer Liste
Verwenden der Include-Methode
Abrufen bestimmter Felder aus einer angegebenen Anzahl von Elementen
Abrufen von Elementen aus allen Listen auf einer Website
Abrufen von Elementen anhand der Position der Listenelemente in der Auflistung

Verfügbar in SharePoint Online

Wenn Sie Elemente aus einer Liste zurückgeben möchten, verwenden Sie die GetItemById()-Methode (JavaScript: getItemById(id)), um ein einzelnes Element zurückzugeben, oder die GetItems(CamlQuery)-Methode (JavaScript: getItems(query)), um mehrere Elemente zurückzugeben. Dann verwenden Sie die Load<T>(T, [])-Methode (JavaScript: load(clientObject)), um Listenelementobjekte abzurufen, die die Elemente darstellen.

Abrufen von Elementen aus einer Liste

Mit der GetItems(CamlQuery)-Methode (JavaScript: getItems(query)) können Sie eine Abfrage in Collaborative Application Markup Language (CAML) definieren, in der angegeben wird, welche Elemente zurückgegeben werden sollen. Sie können ein nicht definiertes CamlQuery-Objekt (JavaScript: CamlQuery) übergeben, um alle Elemente aus der Liste zurückzugeben, oder die ViewXml-Eigenschaft (JavaScript: viewXml) verwenden, um eine CAML-Abfrage zu definieren und Elemente zurückzugeben, die bestimmten Kriterien entsprechen.

Im folgenden Beispiel werden die ID sowie die Werte der Spalten Title und Body der ersten 100 Elemente in der Liste Announcements angezeigt, beginnend mit Listenelementen, deren Auflistungs-ID größer als 10 ist.

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveListItems
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");

            CamlQuery camlQuery = new CamlQuery();
            camlQuery.ViewXml = "<View><Query><Where><Geq><FieldRef Name='ID'/>" +
                "<Value Type='Number'>10</Value></Geq></Where></Query><RowLimit>100</RowLimit></View>";
            ListItemCollection collListItem = oList.GetItems(camlQuery);

            clientContext.Load(collListItem);

            clientContext.ExecuteQuery();

            foreach (ListItem oListItem in collListItem)
            {
                Console.WriteLine("ID: {0} \nTitle: {1} \nBody: {2}", oListItem.Id, oListItem["Title"], oListItem["Body"]);
            }
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveListItems

        Shared Sub Main ()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oList As SP.List = clientContext.Web.Lists.GetByTitle("Announcements")

            Dim camlQuery As New CamlQuery()
            camlQuery.ViewXml = "<View><Query><Where><Geq><FieldRef Name='ID'/>" + _
                "<Value Type='Number'>10</Value></Geq></Where></Query><RowLimit>100</RowLimit></View>"

            Dim collListItem As ListItemCollection = oList.GetItems(camlQuery)

            clientContext.Load(collListItem)

            clientContext.ExecuteQuery()

            Dim oListItem As ListItem
            For Each oListItem In collListItem
                Console.WriteLine("ID: {0} " + ControlChars.Lf + "Title: {1} " + _
                                  ControlChars.Lf + "Body: {2}", oListItem.Id, _
                                  oListItem("Title"), oListItem("Body"))
            Next oListItem

        End Sub
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function retrieveListItems() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');
        
    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View><Query><Where><Geq><FieldRef Name=\'ID\'/>' + 
        '<Value Type=\'Number\'>1</Value></Geq></Where></Query><RowLimit>10</RowLimit></View>');
    this.collListItem = oList.getItems(camlQuery);
        
    clientContext.load(collListItem);
        
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));        
        
}

function onQuerySucceeded(sender, args) {

    var listItemInfo = '';

    var listItemEnumerator = collListItem.getEnumerator();
        
    while (listItemEnumerator.moveNext()) {
        var oListItem = listItemEnumerator.get_current();
        listItemInfo += '\nID: ' + oListItem.get_id() + 
            '\nTitle: ' + oListItem.get_item('Title') + 
            '\nBody: ' + oListItem.get_item('Body');
    }

    alert(listItemInfo.toString());
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Im vorherigen Beispiel wird die Auflistung der durch die CAML-Abfrage angegebenen Elemente geladen. Anschließend kann in den einzelnen zurückgegebenen Listenelementobjekten auf alle Standardeigenschaften zugegriffen werden. Verwenden Sie die Include<TSource>(IQueryable<TSource>, [])-Methode, um die Leistung zu verbessern, indem Sie die verfügbaren Eigenschaften angeben, um die durch die Abfrage zurückgegebene Datenmenge zu begrenzen. Geben Sie in ECMAScript (JavaScript, JScript) die Include-Anweisung als Teil der Abfragezeichenfolge an, die der load(clientObject))-Methode übergeben wird.

Verwenden der Include-Methode

Vier Eigenschaften von ListItem (JavaScript: ListItem) sind nicht standardmäßig verfügbar, wenn Sie Listenelemente zurückgeben: DisplayName (JavaScript: displayName), EffectiveBasePermissions (JavaScript: effectiveBasePermissions), HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments) und RoleAssignments (JavaScript: roleAssignments). Im vorherigen Beispiel wird ein PropertyOrFieldNotInitializedException-Objekt zurückgegeben, wenn Sie auf eine dieser Eigenschaften zuzugreifen versuchen. Verwenden Sie zum Zugreifen auf diese Eigenschaften die Include<TSource>(IQueryable<TSource>, [])-Methode in einem LINQ-Abfrageausdruck, um die Eigenschaften explizit zurückzugeben. In ECMAScript (JavaScript, JScript) geben Sie Include als Teil der Abfragezeichenfolge an. Weitere Informationen zu nicht standardmäßigen Eigenschaften finden Sie unter Übersicht über den Datenabruf.

Wenn Sie das vorherige Beispiel so ändern möchten, dass der Wert von DisplayName (JavaScript: displayName) und HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments) zurückgegeben wird, können Sie den vorherigen Aufruf für die Load<T>(T, [])-Methode (JavaScript: load(clientObject)) durch einen Aufruf ersetzen, in dem eine LINQ-Abfrage verwendet wird. In C# ist dafür ein Verweis auf den System.Linq-Namespace erforderlich. In ECMAScript (JavaScript, JScript) geben Sie Include an.

HinweisHinweis

Wenn Sie mithilfe von LINQ Abfragen für das Clientobjektmodell erstellen, verwenden Sie LINQ to Objects, nicht den LINQ to SharePoint-Anbieter, der nur verwendet werden kann, wenn Sie Code für das Serverobjektmodell schreiben.

using System;
using System.Linq;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveListItemsInclude
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");

            CamlQuery camlQuery = new CamlQuery();
            camlQuery.ViewXml = "<View><RowLimit>100</RowLimit></View>";

            ListItemCollection collListItem = oList.GetItems(camlQuery);

            clientContext.Load(collListItem,
                 items => items.Include(
                    item => item.Id,
                    item => item.DisplayName,
                    item => item.HasUniqueRoleAssignments));

            clientContext.ExecuteQuery();

            foreach (ListItem oListItem in collListItem)
            {
                Console.WriteLine("ID: {0} \nDisplay name: {1} \nUnique role assignments: {2}",
                    oListItem.Id, oListItem.DisplayName, oListItem.HasUniqueRoleAssignments);
            }
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveListItemsInclude

        Shared Sub Main ()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oList As List = clientContext.Web.Lists.GetByTitle("Announcements")

            Dim camlQuery As New CamlQuery()
            camlQuery.ViewXml = "<View><RowLimit>100</RowLimit></View>"

            Dim collListItem As ListItemCollection = oList.GetItems(camlQuery)

            clientContext.Load(collListItem, _
                Function(items) items.Include( _
                    Function(item) item.Id, _
                    Function(item) item.DisplayName, _
                    Function(item) item.HasUniqueRoleAssignments))


            clientContext.ExecuteQuery()

            Dim oListItem As ListItem
            For Each oListItem In collListItem
                Console.WriteLine("ID: {0} " + ControlChars.Lf + _
                                  "Display name: {1} " + ControlChars.Lf + _
                                  "Unique role assignments: {2}", oListItem.Id, _
                                  oListItem.DisplayName, oListItem.HasUniqueRoleAssignments)
            Next oListItem

        End Sub
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function retrieveListItemsInclude() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('Announcements');

    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View><RowLimit>100</RowLimit></View>');
    this.collListItem = oList.getItems(camlQuery);

    clientContext.load(collListItem, 'Include(Id, DisplayName, HasUniqueRoleAssignments)');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded(sender, args) {

    var listItemInfo = '';
    var listItemEnumerator = collListItem.getEnumerator();
        
    while (listItemEnumerator.moveNext()) {
        var oListItem = listItemEnumerator.get_current();
        listItemInfo += '\nID: ' + oListItem.get_id() + 
            '\nDisplay name: ' + oListItem.get_displayName() + 
            '\nUnique role assignments: ' + oListItem.get_hasUniqueRoleAssignments();
    }

    alert(listItemInfo.toString());
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Da in diesem Beispiel die Include<TSource>(IQueryable<TSource>, [])-Methode (in ECMAScript (JavaScript, JScript)Include) verwendet wird, sind nach der Abfrageausführung nur die angegebenen Eigenschaften verfügbar. Daher erhalten Sie ein PropertyOrFieldNotInitializedException-Objekt, wenn Sie auf andere als die angegebenen Eigenschaften zuzugreifen versuchen. Außerdem wird dieser Fehler angezeigt, wenn Sie mithilfe von Eigenschaften wie beispielsweise ContentType (JavaScript: contentType) oder ParentList (JavaScript: parentList) versuchen, auf die Eigenschaften von enthaltenden Objekten zuzugreifen.

Abrufen bestimmter Felder aus einer angegebenen Anzahl von Elementen

Im folgenden Beispiel wird gezeigt, wie Sie bestimmte Felder nur aus den ersten fünf Elementen in einer Liste abrufen. Da nur die Spalten Title und Body angegeben sind, sind diese Eigenschaften als einzige verfügbar.

using System;
using System.Linq;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveSpecificItemsFields
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");

            CamlQuery camlQuery = new CamlQuery();
            ListItemCollection collListItem = oList.GetItems(camlQuery);

            clientContext.Load(
                collListItem,
                items => items.Take(5).Include(
                item => item["Title"],
                item => item["Body"]));

            clientContext.ExecuteQuery();

            foreach (ListItem oListItem in collListItem)
            {
                Console.WriteLine("Title: {0} \nBody: {1}\n", oListItem["Title"], oListItem["Body"]);
            }
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveSpecificItemsFields

        Shared Sub Main ()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oList As SP.List = clientContext.Web.Lists.GetByTitle("Announcements")

            Dim camlQuery As New CamlQuery()
            Dim collListItem As ListItemCollection = oList.GetItems(camlQuery)

            clientContext.Load(collListItem, _
                Function(items) items.Take(5).Include( _
                    Function(item) item("Title"), _
                    Function(item) item("Body")))

            clientContext.ExecuteQuery()

            Dim oListItem As ListItem
            For Each oListItem In collListItem
                Console.WriteLine("Title: {0} " + ControlChars.Lf + "Body: {1}" + _
                                  ControlChars.Lf, oListItem("Title"), oListItem("Body"))
            Next oListItem

        End Sub
    End Class
End Namespace

Im vorherigen Beispiel wird das CamlQuery-Objekt der Load<T>(T, [])-Methode übergeben, ohne eine CAML-Abfragezeichenfolge anzugeben. Durch diese würden normalerweise alle Listenelemente zurückgegeben, während in diesem Fall die Anzahl der zurückgegebenen Elemente durch die Take<TSource>(IQueryable<TSource>, Int32)-Methode begrenzt wird.

HinweisHinweis

Von der load(clientObject)-Methode des JavaScript-Objektmodells in Microsoft SharePoint Foundation 2010 wird die Verwendung der Take<TSource>(IQueryable<TSource>, Int32)-Methode aus dem vorherigen Beispiel nicht unterstützt.

Abrufen von Elementen aus allen Listen auf einer Website

Im folgenden Beispiel wird gezeigt, wie Sie die Titel der ersten 10 Elemente in allen Listen einer Website abrufen.

using System;
using System.Linq;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveFirstTenItemsAllLists
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            ListCollection collList = clientContext.Web.Lists;

            clientContext.Load(
                collList,
                lists => lists.Where(
                    list => list.Hidden == false).Include(
                    list => list.Title,
                    list => list.Items.Take(10)));

            clientContext.ExecuteQuery();

            foreach (SP.List oList in clientContext.Web.Lists)
            {
                string listTitle = oList.Title;
                int itemCount = oList.Items.Count;

                Console.WriteLine("List {0} returned with {1} items", listTitle, itemCount);
            }
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveFirstTenItemsAllLists

        Shared Sub Main ()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim collList As ListCollection = clientContext.Web.Lists

            clientContext.Load(collList, _
                Function(lists) lists.Where( _
                    Function(list) list.Hidden = False).Include( _
                        Function(list) list.Title, _
                        Function(list) list.Items.Take(10)))

            clientContext.ExecuteQuery()

            Dim oList As SP.List
            For Each oList In clientContext.Web.Lists
                Dim listTitle As String = oList.Title
                Dim itemCount As Integer = oList.Items.Count

                Console.WriteLine("List {0} returned with {1} items", listTitle, itemCount)
            Next oList

        End Sub
    End Class
End Namespace
HinweisHinweis

In SharePoint Foundation 2010 wird von der load(clientObject)-Methode von JavaScript die Verwendung der Where<TSource>(IQueryable<TSource>, Expression<Func<TSource, Boolean>>)-Methode aus dem vorherigen Beispiel nicht unterstützt.

Abrufen von Elementen anhand der Position der Listenelemente in der Auflistung

Sie können die ListItemCollectionPosition-Klasse verwenden, um den Abruf von Seitenverwaltungs-Listenelementen anhand der Position der Elemente relativ zur jeweiligen Auflistung zu implementieren. Verwenden Sie das RowLimit-Element, um die Anzahl der Elemente anzugeben, die pro Seite zurückgegeben werden sollen. Im folgenden Beispiel werden alle Elemente in einer Ankündigungsliste in einer Schleife durchlaufen. Dabei werden die ListItemCollectionPosition-Eigenschaft der CamlQuery-Klasse und die ListItemCollectionPosition-Eigenschaft der ListItemCollection-Klasse verwendet, um get oder set für die Positionen der einzelnen Iterationen durch eine Auflistung mit fünf Elementen pro Seite auszuführen. Solange fünf Elemente pro Seite zurückgegeben werden (true), wird die Schleife fortgesetzt, und mithilfe der PagingInfo-Eigenschaft werden Seitenverwaltungsinformationen sowie Informationen zu jedem der fünf zurückgegebenen Elemente angezeigt. Wenn für eine Seite weniger als fünf Elemente zurückgegeben werden, wird die Schleife beendet.

using System;
using System.Linq;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class UsingItemCollectionPosition
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            SP.List oList = clientContext.Web.Lists.GetByTitle("Announcements");

            ListItemCollectionPosition itemPosition = null;

            while (true)
            {
                CamlQuery camlQuery = new CamlQuery();

                camlQuery.ListItemCollectionPosition = itemPosition;

                camlQuery.ViewXml = "<View><ViewFields><FieldRef Name='ID'/>" + 
                    "<FieldRef Name='Title'/><FieldRef Name='Body'/>" + 
                    "</ViewFields><RowLimit>5</RowLimit></View>";

                ListItemCollection collListItem = oList.GetItems(camlQuery);

                clientContext.Load(collListItem);

                clientContext.ExecuteQuery();

                itemPosition = collListItem.ListItemCollectionPosition;

                foreach (ListItem oListItem in collListItem)
                {
                    Console.WriteLine("Title: {0}: \nBody: {1}", oListItem["Title"], oListItem["Body"]);
                }

                if (itemPosition == null)
                {
                    break;
                }

                Console.WriteLine("\n" + itemPosition.PagingInfo + "\n");
            }
        }

    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class UsingItemCollectionPosition

        Shared Sub Main ()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oList As SP.List = clientContext.Web.Lists.GetByTitle("Announcements")

            Dim itemPosition As ListItemCollectionPosition = Nothing

            While True

                Dim camlQuery As New CamlQuery()
                camlQuery.ListItemCollectionPosition = itemPosition

                camlQuery.ViewXml = "<View><ViewFields><FieldRef Name='ID'/>" + _
                    "<FieldRef Name='Title'/><FieldRef Name='Body'/>" + _
                    "</ViewFields><RowLimit>5</RowLimit></View>"

                Dim collListItem As ListItemCollection = oList.GetItems(camlQuery)

                clientContext.Load(collListItem)

                clientContext.ExecuteQuery()

                itemPosition = collListItem.ListItemCollectionPosition

                Dim oListItem As ListItem
                For Each oListItem In collListItem
                    Console.WriteLine("Title: {0}: " + ControlChars.Lf + _
                        "Body: {1}", oListItem("Title"), oListItem("Body"))
                Next oListItem

                If itemPosition Is Nothing Then
                    Exit While
                End If

                Console.WriteLine((ControlChars.Lf + itemPosition.PagingInfo + ControlChars.Lf))
            End While

        End Sub
    End Class
End Namespace

Weitere Informationen und Beispiele zum Abrufen von Clientobjekten im Kontext des Silverlight-Objektmodells in SharePoint Foundation finden Sie unter Verwenden des Silverlight-Objektmodells.

Siehe auch

Konzepte

Übersicht über den Datenabruf

Richtlinien für das Clientobjektmodell

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

Allgemeine Programmieraufgaben

Weitere Ressourcen

Codeausschnitt: Abrufen von Elementdaten aus einer externen Liste auf dem Client

Clientklassenbibliothek

ECMAScript-Klassenbibliothek