Gewusst wie: Abrufen von Listen
Letzte Änderung: Freitag, 29. April 2011
Gilt für: SharePoint Foundation 2010
Inhalt dieses Artikels
Abrufen aller Eigenschaften aller Listen einer Website
Abrufen nur der angegebenen Eigenschaften von Listen
Speichern von abgerufenen Listen in einer Auflistung
Anwenden von Filtern auf den Listenabruf
Abrufen von Listenfeldern aus einer Website
Verfügbar in SharePoint Online
Das Arbeiten mit Listenobjekten ist dem Arbeiten mit Websiteobjekten sehr ähnlich. Beginnen Sie, indem Sie den ClientContext()-Konstruktor (JavaScript: ClientContext(serverRelativeUrl)) verwenden und eine URL oder einen URI übergeben, um einen bestimmten Anforderungskontext zurückzugeben. Anschließend können Sie mithilfe der Lists-Eigenschaft (JavaScript: lists) der Web-Klasse (JavaScript: Web) die Auflistung der Listen auf der Website abrufen.
Abrufen aller Eigenschaften aller Listen einer Website
Zum Zurückgeben aller Listen einer Website laden Sie die Listenauflistung über die Load<T>(T, [])-Methode (JavaScript: load(clientObject)), und rufen Sie dann ExecuteQuery() oder ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)) auf. Im folgenden Beispiel wird die URL der Website sowie das Datum und die Uhrzeit der Erstellung der Liste angezeigt.
using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveAllListProperties
{
static void Main()
{
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;
clientContext.Load(collList);
clientContext.ExecuteQuery();
foreach (SP.List oList in collList)
{
Console.WriteLine("Title: {0} Created: {1}", oList.Title, oList.Created.ToString());
}
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveAllListProperties
Shared Sub Main()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim clientContext As New ClientContext(siteUrl)
Dim oWebsite As Web = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists
clientContext.Load(collList)
clientContext.ExecuteQuery()
Dim oList As SP.List
For Each oList In collList
Console.WriteLine("Title: {0} Created: {1}", oList.Title, oList.Created.ToString())
Next oList
End Sub
End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';
function retrieveAllListProperties() {
var clientContext = new SP.ClientContext(siteUrl);
var oWebsite = clientContext.get_web();
this.collList = oWebsite.get_lists();
clientContext.load(collList);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
var listInfo = '';
var listEnumerator = collList.getEnumerator();
while (listEnumerator.moveNext()) {
var oList = listEnumerator.get_current();
listInfo += 'Title: ' + oList.get_title() + ' Created: ' + oList.get_created().toString() + '\n';
}
alert(listInfo);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Abrufen nur der angegebenen Eigenschaften von Listen
Im vorherigen Beispiel werden alle Eigenschaften der Listen einer Website zurückgegeben. Sie können jedoch unnötigen Datenübertragungsverkehr zwischen Client und Server eindämmen, indem Sie mithilfe von LINQ-Abfrageausdrücken angeben, welche Eigenschaften zurückgegeben werden sollen. Im folgenden Beispiel werden mithilfe der Include<TSource>(IQueryable<TSource>, [])-Methode in einem LINQ-Ausdruck nur der Titel und die ID jeder Liste in der Auflistung zurückgegeben.
Hinweis |
---|
Wie im folgenden ECMAScript (JavaScript, JScript)-Beispiel gezeigt, können Sie Include als Teil der Abfragezeichenfolge angeben, die an die load(clientObject)-Methode übergeben wird, um anzugeben, welche Eigenschaften zurückgegeben werden sollen. |
using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveSpecificListProperties
{
static void Main()
{
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;
clientContext.Load(
collList,
lists => lists.Include(
list => list.Title,
list => list.Id));
clientContext.ExecuteQuery();
foreach (SP.List oList in collList)
{
Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"));
}
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveSpecificListProperties
Shared Sub Main()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim clientContext As New ClientContext(siteUrl)
Dim oWebsite As Web = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists
clientContext.Load(collList, Function(lists) lists. _
Include(Function(list) list.Title, _
Function(list) list.Id))
clientContext.ExecuteQuery()
Dim oList As SP.List
For Each oList In collList
Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"))
Next oList
End Sub
End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';
function retrieveSpecificListProperties() {
var clientContext = new SP.ClientContext(siteUrl);
var oWebsite = clientContext.get_web();
this.collList = oWebsite.get_lists();
clientContext.load(collList, 'Include(Title, Id)');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
var listInfo = '';
var listEnumerator = collList.getEnumerator();
while (listEnumerator.moveNext()) {
var oList = listEnumerator.get_current();
listInfo += 'Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString() + '\n';
}
alert(listInfo);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Im vorherigen Beispiel werden nach dem Aufruf von ExecuteQuery() (JavaScript: executeQueryAsync(succeededCallback, failedCallback)) nur der Titel und die ID jedes Listenobjekts verfügbar. Wenn Sie beispielsweise versuchen, oList.ParentWebUrl anzuzeigen, erhalten Sie eine PropertyOrFieldNotInitializedException-Ausnahme.
Speichern von abgerufenen Listen in einer Auflistung
Wie im folgenden Beispiel gezeigt, können Sie die LoadQuery()-Methode (JavaScript: loadQuery(clientObjectCollection, exp)) statt der Load<T>(T, [])-Methode (JavaScript: load(clientObject)) verwenden, um den Rückgabewert in einer anderen Auflistung zu speichern und nicht in der Lists-Eigenschaft (JavaScript: lists).
using System;
using System.Collections.Generic;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveSpecificListPropertiesToCollection
{
static void Main()
{
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;
IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(
collList.Include(
list=>list.Title,
list=>list.Id));
clientContext.ExecuteQuery();
foreach (SP.List oList in resultCollection)
{
Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"));
}
}
}
}
Imports System
Imports System.Collections.Generic
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveSpecificListPropertiesToCollection
Shared Sub Main()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim clientContext As New ClientContext(siteUrl)
Dim oWebsite As Web = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists
Dim queryResult As IEnumerable(Of SP.List) = clientContext.LoadQuery( _
collList.Include(Function(list) list.Title, _
Function(list) list.Id))
clientContext.ExecuteQuery()
Dim oList As SP.List
For Each oList In queryResult
Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"))
Next oList
End Sub
End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';
function retrieveSpecificListPropertiesToCollection() {
var clientContext = new SP.ClientContext(siteUrl);
var oWebsite = clientContext.get_web();
var collList = oWebsite.get_lists();
this.listInfoCollection = clientContext.loadQuery(collList, 'Include(Title, Id)');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
var listInfo = '';
for (var i = 0; i < this.listInfoCollection.length; i++) {
var oList = this.listInfoCollection[i];
listInfo += 'Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString();
}
alert(listInfo.toString());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Anwenden von Filtern auf den Listenabruf
Sie können LINQ-Lambda-Ausdruckssyntax oder LINQ-Abfrageausdruckssyntax verwenden, um Filter zu erstellen mit denen die Anzahl der in einer Abfrage abgerufenen Listen begrenzt wird. Dazu müssen Sie einen Verweis auf den System.Linq-Namespace festlegen.
Im folgenden Beispiel wird das vorherige Beispiel dahin gehend geändert, dass ein Lambda-Ausdruck als Parameter für die LoadQuery()-Methode verwendet wird, damit nur Listen zurückgegeben werden, die Elemente enthalten und nicht verborgen sind.
Hinweis |
---|
Wenn Sie LINQ verwenden, um Abfragen im Clientobjektmodell zu erstellen, arbeiten Sie mit LINQ to Objects und nicht mit dem LINQ to SharePoint-Anbieter. Letzteren können Sie nur verwenden, wenn Sie Code für das Serverobjektmodell schreiben. |
IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(
collList.Include(
list => list.Title,
list => list.Id).Where(
list => list.ItemCount != 0
&& list.Hidden != true));
Dim resultCollection As IEnumerable(Of SP.List) = _
clientContext.LoadQuery(collList.Include( _
Function(list) list.Title, _
Function(list) list.Id).Where( _
Function(list) list.ItemCount <> 0 _
AndAlso list.Hidden <> True))
Wenn Sie standardmäßige LINQ-Abfragesyntax verwenden möchten, lautet der Parameter für die LoadQuery()-Methode stattdessen wie folgt.
var queryExpression = from list
in collList.Include(
list => list.Title,
list => list.Id)
where list.ItemCount != 0
&& list.Hidden != true
select list;
IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(queryExpression);
Dim queryExpression = From list In collList.Include( _
Function(list) list.Title, Function(list) list.Id) _
Where list.ItemCount <> 0 _
AndAlso list.Hidden <> True _
Select list
Dim resultCollection As IEnumerable(Of SP.List) = clientContext.LoadQuery(queryExpression)
Im folgenden Beispiel wird die Verwendung der LINQ-Syntax zum Abrufen nur der ersten beiden Listen aus einer Website veranschaulicht.
IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(
collList.Take(2).Include(
list => list.Title,
list => list.Id));
Dim resultCollection As IEnumerable(Of SP.List) = clientContext.LoadQuery(collList.Take(2) _
.Include(Function(list) list.Title, _
Function(list) list.Id))
Hinweis |
---|
Die loadQuery(clientObjectCollection, exp)-Methode des JavaScript-Objektmodells in Microsoft SharePoint Foundation 2010 unterstützt keine LINQ-Methoden und -Operatoren – Where<TSource>(IQueryable<TSource>, Expression<Func<TSource, Boolean>>), Take<TSource>(IQueryable<TSource>, Int32), <> –, die von dem verwalteten Objektmodell in den vorherigen Fragmenten verwendet werden. |
Abrufen von Listenfeldern aus einer Website
Wie das folgende Beispiel zeigt, können Sie Include<TSource>(IQueryable<TSource>, [])-Methoden, oder Include-Anweisungen in einer JavaScript-Abfrage, schachteln, um Metadaten sowohl für eine Liste als auch für deren Felder zurückzugeben. In dem Beispiel werden alle Felder aus allen Listen einer Website zurückgegeben und der Titel und der interne Name aller Felder angezeigt, deren interner Name die Zeichenfolge "name" enthält.
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class RetrieveSpecificListPropertiesToCollection
{
static void Main()
{
string siteUrl = "http://MyServer/sites/MySiteCollection";
ClientContext clientContext = new ClientContext(siteUrl);
Web oWebsite = clientContext.Web;
ListCollection collList = oWebsite.Lists;
IEnumerable<SP.List> listInfo = clientContext.LoadQuery(
collList.Include(
list => list.Title,
list => list.Fields.Include(
field => field.Title,
field => field.InternalName)));
clientContext.ExecuteQuery();
foreach (SP.List oList in listInfo)
{
FieldCollection collField = oList.Fields;
foreach (SP.Field oField in collField)
{
Regex regEx = new Regex("name", RegexOptions.IgnoreCase);
if (regEx.IsMatch(oField.InternalName))
{
Console.WriteLine("List: {0} \n\t Field Title: {1} \n\t Field Internal Name: {2}",
oList.Title, oField.Title, oField.InternalName);
}
}
}
}
}
}
Imports System
Imports System.Text.RegularExpressions
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class RetrieveSpecificListPropertiesToCollection
Shared Sub Main()
Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
Dim clientContext As New ClientContext(siteUrl)
Dim oWebsite As Web = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists
Dim listInfo As IEnumerable(Of SP.List) = clientContext.LoadQuery( _
collList.Include( _
Function(list) list.Title, _
Function(list) list.Fields.Include( _
Function(field) field.Title, _
Function(field) field.InternalName)))
clientContext.ExecuteQuery()
Dim oList As SP.List
For Each oList In listInfo
Dim collField As FieldCollection = oList.Fields
Dim oField As SP.Field
For Each oField In collField
Dim regEx As New Regex("name", RegexOptions.IgnoreCase)
If regEx.IsMatch(oField.InternalName) Then
Console.WriteLine("List: {0} " + _
ControlChars.Lf + ControlChars.Tab + " Field Title: {1} " + _
ControlChars.Lf + ControlChars.Tab + " Field Internal Name: {2}", _
oList.Title, oField.Title, oField.InternalName)
End If
Next oField
Next oList
End Sub
End Module
End Namespace
var siteUrl = '/sites/MySiteCollection';
function retrieveAllListsAllFields() {
var clientContext = new SP.ClientContext(siteUrl);
var oWebsite = clientContext.get_web();
var rootWebsite = clientContext.get_site().get_rootWeb();
var collList = oWebsite.get_lists();
this.listInfoArray = clientContext.loadQuery(collList,
'Include(Title,Fields.Include(Title,InternalName))');
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this._onQueryFailed));
}
function onQuerySucceeded() {
var listInfo = '';
for (var i = 0; i < this.listInfoArray.length; i++) {
var oList = this.listInfoArray[i];
var collField = oList.get_fields();
var fieldEnumerator = collField.getEnumerator();
while (fieldEnumerator.moveNext()) {
var oField = fieldEnumerator.get_current();
var regEx = new RegExp('name', 'ig');
if (regEx.test(oField.get_internalName())) {
listInfo += '\nList: ' + oList.get_title() +
'\n\tField Title: ' + oField.get_title() +
'\n\tField Name: ' + oField.get_internalName();
}
}
}
alert(listInfo);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
Informationen und ein Beispiel zum Abrufen von Listendaten im Kontext des SharePoint Foundation 2010 Silverlight-Objektmodells finden Sie unter Verwenden des Silverlight-Objektmodells.
Siehe auch
Konzepte
Richtlinien für das Clientobjektmodell
Gewusst wie: Erstellen, Aktualisieren und Löschen von Listen
Allgemeine Programmieraufgaben