[方法] リスト アイテムを取得する
最終更新日: 2011年4月29日
適用対象: SharePoint Foundation 2010
この記事の内容
リストからアイテムを取得する
Include メソッドを使用する
指定した数のアイテムから特定のフィールドを取得する
Web サイトの全リストからアイテムを取得する
リスト アイテム コレクションの位置を使用してアイテムを取得する
リストからアイテムを返すには、単一のアイテムを返す場合は GetItemById() メソッド (JavaScript: getItemById(id)) を使用し、複数のアイテムを返す場合は GetItems(CamlQuery) メソッド (JavaScript: getItems(query)) を使用します。その後、Load<T>(T, []) メソッド (JavaScript: load(clientObject)) を使用して、アイテムを表すリスト アイテム オブジェクトを取得します。
リストからアイテムを取得する
GetItems(CamlQuery) メソッド (JavaScript: getItems(query)) を使用すると、返されるアイテムを指定する Collaborative Application Markup Language (CAML) クエリを定義できます。未定義の CamlQuery オブジェクト (JavaScript: CamlQuery) を渡してリストからすべてのアイテムを返すことも、ViewXml プロパティ (JavaScript: viewXml) を使用して CAML クエリを定義し、特定の条件を満たすアイテムを返すこともできます。
以下の例では、Announcements リストについて、コレクション ID が 10 より大きい最初の 100 アイテムの ID と Title および Body 列の値を表示します。
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());
}
前の例では、CAML クエリで指定されているアイテムのコレクションを読み込んでおり、その後は返された各リスト アイテム オブジェクトのすべての既定プロパティにアクセスできます。Include<TSource>(IQueryable<TSource>, []) メソッドを使用すると、使用可能なプロパティを指定することで、クエリによって返されるデータの量が制限され、パフォーマンスを改善できます。ECMAScript (JavaScript、JScript) では、load(clientObject) メソッドに渡されるクエリ文字列の一部として、Include ステートメントを指定します。
Include メソッドを使用する
ListItem (JavaScript: ListItem) の 4 つのプロパティ DisplayName (JavaScript: displayName)、EffectiveBasePermissions (JavaScript: effectiveBasePermissions)、HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments)、および RoleAssignments (JavaScript: roleAssignments) は、リスト アイテムを返すときに既定では使用できません。前の例では、これらのプロパティのいずれかにアクセスしようとすると、PropertyOrFieldNotInitializedException が返ります。これらのプロパティにアクセスするには、Include<TSource>(IQueryable<TSource>, []) メソッドを LINQ クエリ式で使用して、明示的にプロパティを返します。ECMAScript (JavaScript、JScript) では、クエリ文字列の一部として Include を指定します。既定ではないプロパティの詳細については、「データ取得の概要」を参照してください。
DisplayName (JavaScript: displayName) および HasUniqueRoleAssignments (JavaScript: hasUniqueRoleAssignments) の値を返すように前の例を修正するには、前の例での Load<T>(T, []) メソッド (JavaScript: load(clientObject)) の呼び出しを、LINQ クエリを使用する呼び出しに置き換えます。その場合、C# では System.Linq 名前空間を参照する必要があります。ECMAScript (JavaScript、JScript) では、Include を指定します。
注意
LINQ を使用してクライアント オブジェクト モデルに対するクエリを作成する場合は、LINQ to Objects を使用します。サーバー オブジェクト モデル用コードの作成だけに使用できる LINQ to SharePoint プロバイダーは使用しません。
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());
}
この例では Include<TSource>(IQueryable<TSource>, []) メソッド (ECMAScript (JavaScript、JScript) では Include) を使用しているので、クエリを実行した後は指定したプロパティのみを使用できます。したがって、指定されているもの以外のプロパティにアクセスしようとすると、PropertyOrFieldNotInitializedException を受け取ります。さらに、ContentType (JavaScript: contentType) または ParentList (JavaScript: parentList) などのプロパティを使用して親オブジェクトのプロパティにアクセスしようとしても、このエラーを受け取ります。
指定した数のアイテムから特定のフィールドを取得する
次の例では、リストの最初の 5 アイテムのみから特定のフィールドを取得する方法を示します。Title 列と Body 列のみを指定しているので、使用できるプロパティはこれらだけです。
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
前の例では、CamlQuery オブジェクトを Load<T>(T, []) メソッドに渡し、CAML クエリ文字列を指定していないので、通常はすべてのリスト アイテムが返されますが、この場合は Take<TSource>(IQueryable<TSource>, Int32) メソッドで返されるアイテムの数を制限しています。
注意
Microsoft SharePoint Foundation 2010 の JavaScript オブジェクト モデルの load(clientObject) メソッドは、前の例で使用されている Take<TSource>(IQueryable<TSource>, Int32) メソッドの使用をサポートしていません。
Web サイトの全リストからアイテムを取得する
次の例では、Web サイトの全リストの最初の 10 アイテムからタイトルを取得する方法を示します。
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
注意
SharePoint Foundation 2010 では、JavaScript の load(clientObject) メソッドは、前の例で使用されている Where<TSource>(IQueryable<TSource>, Expression<Func<TSource, Boolean>>) メソッドの使用をサポートしていません。
リスト アイテム コレクションの位置を使用してアイテムを取得する
ListItemCollectionPosition クラスを使用すると、アイテムのコレクションを基準にしたアイテムの位置に従ったリスト アイテム取得のページングを実装できます。1 ページで返すアイテムの数を指定するには、RowLimit 要素を使用します。次の例では、Announcements リストのすべてのアイテムをループして、CamlQuery クラスの ListItemCollectionPosition プロパティおよび ListItemCollection クラスの ListItemCollectionPosition プロパティを使用し、1 ページのアイテム数を 5 として、コレクションの各反復の位置を交互に get または set しています。ページで 5 アイテムが返されたかどうかが true である限り、ループを継続し、PagingInfo プロパティを使用して、ページング情報と、返される 5 アイテムのそれぞれについての情報を表示します。ページに対して返されるアイテムが 5 個未満になったら、ループは終了します。
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
SharePoint Foundation Silverlight オブジェクト モデルのコンテキストでのクライアント オブジェクトの取得に関する詳細と例については、「Silverlight オブジェクト モデルを使用する」を参照してください。