Working with List Objects and Collections (英語)
SharePoint Web サイト内のリスト データに対してアクションを実行するには、まず、オブジェクト モデルへのエントリ ポイントとして機能する SPWeb オブジェクトを取得する必要があります。このオブジェクトによって、リスト、アイテム、ドキュメント、ユーザー、通知などにアクセスすることができます。SharePoint Web サイトを取得する方法については、「サイト、Web アプリケーション、およびその他の主要オブジェクトへの参照を取得する」を参照してください。
オブジェクト
Microsoft.SharePoint 名前空間および Microsoft.SharePoint.Administration 名前空間に含まれるクラスのほとんどは、SP で始まります。一般に、Microsoft.SharePoint アセンブリに属するクラスのうち、このプレフィックスが付かないクラスは Web フォーム コントロールを表します。
Windows SharePoint Services では、オブジェクト プロパティに変更を加えた場合、そのオブジェクトに対して Update メソッドを呼び出すまで変更はデータベースに保存されません。次に、タスク リストのタイトルと説明を変更するコードの例を示します。
Dim myList As SPList = myWeb.Lists("Tasks")
myList.Title = "New_Title"
myList.Description = "List_Description"
myList.Update()
SPList myList = myWeb.Lists["Tasks"];
myList.Title="New_Title";
myList.Description="List_Description";
myList.Update();
注意
ドキュメントがドキュメント ライブラリからチェックアウトされている場合は、SPListItem オブジェクトの Update メソッドを使用してドキュメントのメタデータを変更できません。
コレクション
リストが SharePoint サイトの中心的な存在であるのと同じように、コレクションはオブジェクト モデルの中心に位置します。コレクションを使用することによって、オブジェクト タイプの追加、削除、列挙、更新を行うことができます。ほとんどのコレクション クラスに共通する特徴として、以下の点が挙げられます。
名前が "Collection" で終わります。
System.Collections.ICollection インターフェイスを実装します。
Int32 型の Count プロパティがあります。
コレクション内の n 番目のアイテムを取得できる Int32 インデクサがあります。
アイテム識別子を受け取るインデクサがあります。
Add メソッドと Delete メソッドがあります。
通常、コレクションの Add メソッドを呼び出すと、データを更新するために追加情報が必要な場合を除き、バックエンド サーバー上のデータベースが適切なデータによって更新されます。この場合、Add メソッドが返すオブジェクトを使用して、情報を収集できます。たとえば、リストにアイテムを追加するには、まず Microsoft.SharePoint.SPListItemCollection クラスの Add メソッドを使用して SPListItem オブジェクトを取得し、そのオブジェクトの適切なプロパティに値を割り当てます。次に Update メソッドを呼び出し、変更をコンテンツ データベースに適用します。
インデクサ
インデクサは、コレクションの個々のアイテムに対するアクセス手段として利用できます。アイテムを取得するには、コレクション内のアイテムを示すインデックスまたは文字列を、C# の場合は角かっこ ([])、Visual Basic の場合はかっこ (()) で囲んで指定します。
たとえば、mySite が SPWeb クラスのインスタンスである場合、お知らせのリストを返すには、C# では SPList myList = mySite.Lists["Announcements"] と指定し、Visual Basic では Dim myList As SPList = mySite.Lists("Announcements") と指定します。お知らせのリストを取得した後、そのリストの Items プロパティを使用して、すべてのリスト アイテムを取得することができます (C# では SPListItemCollection myItems = myList.Items、Visual Basic では Dim myItems As SPListItemCollection = myList.Items))。このリストからアイテムのサブセットのみを取得するには、リスト オブジェクトの GetItems() メソッドの 1 つを呼び出し、SPQuery オブジェクトを渡してサブセットを指定します。したがって、コードは SPListItemCollection myItems = myList.GetItems(myQuery) となります (Visual Basic では Dim myItems As SPListItemCollection = myList.GetItems(myQuery))。
インデクサを使用して、リストから特定のフィールドを取得することもできます (たとえば、C# では myList.Items["Field_Name"]、Visual Basic では myList.Items("Field_Name"))。インデクサにフィールド名を指定し、リスト内のアイテムのコレクションに対して反復処理を実行して、そのフィールドから値を取得することもできます。次に、リストの各アイテムから Due Date フィールド、Status フィールド、および Title フィールドの値を取得し、表示するコードの例を示します。
Dim myItem As SPListItem
For Each myItem In myItems
Response.Write(SPEncode.HtmlEncode(myItem("Due Date").ToString()) + "<BR>")
Response.Write(SPEncode.HtmlEncode(myItem("Status").ToString()) + "<BR>")
Response.Write(SPEncode.HtmlEncode(myItem("Title").ToString()) + "<BR>")
Next myItem
foreach(SPListItem myItem in myItems)
{
Response.Write(SPEncode.HtmlEncode(myItem["Due Date"].ToString()) + "<BR>");
Response.Write(SPEncode.HtmlEncode(myItem["Status"].ToString()) + "<BR>");
Response.Write(SPEncode.HtmlEncode(myItem["Title"].ToString()) + "<BR>");
}
注意
Microsoft.SharePoint 名前空間には using ディレクティブ (Visual Basic では Imports) が必要ですが、それに加え上記の例では Microsoft.SharePoint.Utilities 名前空間にもディレクティブが必要です。
次の例に、SharePoint Web サイト上のタスク リストから Title フィールドおよび Status フィールドの値をすべて取得するコードの例を示します。
Dim myWeb As SPWeb = SPContext.Current.Web
Dim myTasks As SPList = myWeb.Lists("Tasks")
Dim myItems As SPListItemCollection = myTasks.Items
Dim myItem As SPListItem
For Each myItem In myItems
Response.Write(SPEncode.HtmlEncode(myItem("Title").ToString()) + " :: " _
& SPEncode.HtmlEncode(myItem("Status").ToString()) + "<BR>")
Next myItem
SPWeb mySite = SPContext.Current.Web;
SPList myTasks = mySite.Lists["Tasks"];
SPListItemCollection myItems=myTasks.Items;
foreach(SPListItem myItem in myItems)
{
Response.Write(SPEncode.HtmlEncode(myItem["Title"].ToString()) + " :: " +
SPEncode.HtmlEncode(myItem["Status"].ToString()) + "<BR>");
}
注意
Microsoft.SharePoint 名前空間には using ディレクティブ (Visual Basic では Imports) が必要ですが、それに加え上記の例では Microsoft.SharePoint.Utilities 名前空間にもディレクティブが必要です。
インデクサを使用してリスト内の値を変更することもできます。次に、新しいリスト アイテムをコレクションに追加し、そのアイテムに URL 列の値を割り当てるコードの例を示します。
Dim myNewItem As SPListItem = myList.Items.Add()
myNewItem("URL_Field_Name") = "URL, Field_Description"
myNewItem.Update()
SPListItem myNewItem = myList.Items.Add();
myNewItem["URL_Field_Name"] ="URL, Field_Description";
myNewItem.Update();
注意
URL フィールド型は、カンマとスペースで区切られた 2 つの値から構成される独特なものです。上記の例では、その両方の値が、1 つのインデクサによって新しいアイテムに割り当てられます。
次に、リスト アイテムの Status フィールドと Title フィールドに値を設定するコードの例を示します。
Dim myItem As SPListItem = myItems(0)
myItem("Status") = "Task_Status"
myItem("Title") = "Task_Title"
myItem.Update()
SPListItem myItem = myItems[0];
myItem["Status"]="Task_Status";
myItem["Title"]="Task_Title";
myItem.Update();
注意
インデクサに指定したアイテムが見つからない場合は、例外 ArgumentOutOfRange が返されます。
Windows SharePoint Services のリスト アイテムに使用される特定のデータ形式については、SPListItem クラスを参照してください。
See Also
参照
Microsoft.SharePoint.Administration
概念
Windows SharePoint Services オブジェクト モデルでの名前空間
Visual Studio で SharePoint Web サイトのプログラムによるカスタマイズ作業を開始する