リストを作成または削除する
最終更新日: 2011年5月27日
適用対象: SharePoint Foundation 2010
この記事の内容
リスト テンプレート タイプによってリストを作成する
リスト テンプレートによってリストを作成する
リストを削除する
このトピックの例では、SharePoint Foundation サーバー オブジェクト モデルを使用して Web サイトまたはサイト コレクション内のリストを操作する方法を示します。
注意
このトピックのコード例では、Microsoft.SharePoint.SPContext クラスのメンバーを使用して、現在のサイト コレクション、Web サイト、またはリストを取得しています。コンソール アプリケーション、Windows アプリケーションなど、HTTP コンテキストの外部では、別の方法で主要オブジェクトへの参照を取得します。Microsoft.SharePoint.SPContext オブジェクトを使用する代わりに、SPSite() コンストラクターを使用して、特定のサイト コレクションをインスタンス化し、オブジェクトを取得します。詳細については、「サイト、Web アプリケーション、およびその他の主要オブジェクトへの参照を取得する」を参照してください。
リスト テンプレート タイプによってリストを作成する
新しいリストを作成するには、SPListCollection クラスのいずれかの Add() メソッド オーバーロードを使用します。
以下の例では、ユーザー入力に基づいて、新しい汎用リスト、イベント リスト、またはお知らせリストを追加しています。Switch 句は、ユーザーが指定したリストのタイプを確認するために使用され、確認したタイプに応じてリスト テンプレートのタイプを設定します。
Dim mySite As SPWeb = SPContext.Current.Web
Dim lists As SPListCollection = mySite.Lists
Dim listTitle As String = TextBox1.Text
Dim listDescription As String = TextBox2.Text
Dim listType As String = ListBox1.SelectedItem.Text
Dim listTemplateType As New SPListTemplateType()
Select Case listType
Case "Generic List"
listTemplateType = SPListTemplateType.GenericList
Exit
Case "Events"
listTemplateType = SPListTemplateType.Events
Exit
Case "Announcements"
listTemplateType = SPListTemplateType.Announcements
Exit
End Select
lists.Add(listTitle, listDescription, listTemplateType)
SPWeb mySite = SPContext.Current.Web;
SPListCollection lists = mySite.Lists;
string listTitle = TextBox1.Text;
string listDescription = TextBox2.Text;
string listType = ListBox1.SelectedItem.Text;
SPListTemplateType listTemplateType = new SPListTemplateType();
switch(listType)
{
case "Generic List":
{
listTemplateType = SPListTemplateType.GenericList;
break;
}
case "Events":
{
listTemplateType = SPListTemplateType.Events;
break;
}
case "Announcements":
{
listTemplateType = SPListTemplateType.Announcements;
break;
}
}
lists.Add(listTitle, listDescription, listTemplateType);
この例では、ユーザーが指定したリスト テンプレートのタイプを格納するために、SPListTemplateType オブジェクトをインスタンス化しています。このオブジェクトを Add(String, String, SPListTemplateType) メソッドのパラメーターとして渡す必要があります。この例では、ユーザーがタイトルと説明を入力できる 2 つのテキスト ボックスがあると想定しています。また、ドロップダウン リストにリストのタイプが表示され、ユーザーはその中から選択することができます。
リスト テンプレートによってリストを作成する
SPListTemplateType 列挙を使用してテンプレート タイプからリストを作成する以外に、SPListTemplate オブジェクトからリストを作成することもできます。このオブジェクトは、既存のリストをテンプレートとして保存することで UI 内で作成された特定のリスト テンプレートか、またはリスト タイプを定義した %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\FEATURES 内のリスト スキーマを表します。SPWeb クラスの ListTemplates プロパティを使用してリスト テンプレート オブジェクトのコレクションを返し、名前インデクサーを使用して、使用するリスト テンプレートを指定できます。これを次の例に示します。この例では、Decision Meetings Workspace というサイトが存在すると想定しています。
Dim mySite As SPWeb = SPContext.Current.Web
Dim template As SPListTemplate = mySite.ListTemplates("Decisions")
mySite.Lists.Add("My Decisions", "This is a list of decisions",
template)
SPWeb mySite = SPContext.Current.Web;
SPListTemplate template = mySite.ListTemplates["Decisions"];
mySite.Lists.Add("My Decisions", "This is a list of decisions",
template);
SPSite クラスの GetCustomListTemplates メソッドを使用した次の例では、指定されたサイト用のカスタム リスト テンプレートを返し、指定されたリスト テンプレートに基づく新しいリストを作成しています。
Dim siteCollection As SPSite = SPContext.Current.Site
Dim mySite As SPWeb = SPContext.Current.Web
Dim listTemplates As SPListTemplateCollection = siteCollection.GetCustomListTemplates(mySite)
Dim listTemplate As SPListTemplate = listTemplates("Custom List Template")
mySite.Lists.Add("Custom List", "A list created from a custom list template in the list template catalog", listTemplate)
SPSite siteCollection = SPContext.Current.Site;
SPWeb mySite = SPContext.Current.Web;
SPListTemplateCollection listTemplates = siteCollection.GetCustomListTemplates(mySite);
SPListTemplate listTemplate = listTemplates["Custom List Template"];
mySite.Lists.Add("Custom List", "A list created from a custom list template in the list template catalog", listTemplate);
次の例に示すように、サイト コレクションの複数の Web サイトにリストを追加できます。この例では、2 つのテキスト ボックスからコードに渡されたタイトルと説明に基づいて、各 Web サイト上に汎用リストを作成しています。SPSite クラスの AllWebs プロパティを使用して、サイト上に存在するすべての Web サイトのコレクションを返します。
この例では、フォームを含む .aspx ページに 2 つのテキスト ボックスが存在すると想定しています。
Dim listTitle As String = TextBox1.Text.ToString()
Dim listDescription As String = TextBox2.Text.ToString()
Dim mySite As SPSite = SPContext.Current.Site
Dim allWebs As SPWebCollection = mySite.AllWebs
Dim web As SPWeb
For Each web In allWebs
Dim allLists As SPListCollection = web.Lists
allLists.Add(listTitle, listDescription, SPListTemplateType.GenericList)
Next web
string listTitle = TextBox1.Text.ToString();
string listDescription = TextBox2.Text.ToString();
SPSite mySite = SPContext.Current.Site;
SPWebCollection allWebs = mySite.AllWebs;
foreach (SPWeb web in allWebs){
SPListCollection allLists = web.Lists;
allLists.Add(listTitle,listDescription, SPListTemplateType.GenericList);
}
リストを削除する
リストを削除するには、Delete メソッドのパラメーターとして、リストの GUID を指定する必要があります。GUID を検索するには、SPList クラスの ID プロパティを使用します。
Dim mySite As SPWeb = SPContext.Current.Web
Dim lists As SPListCollection = mySite.Lists
Dim list As SPList = lists(TextBox1.Text)
Dim listGuid As System.Guid = list.ID
lists.Delete(listGuid)
SPWeb mySite = SPContext.Current.Web;
SPListCollection lists = mySite.Lists;
SPList list = lists[TextBox1.Text];
System.Guid listGuid = list.ID;
lists.Delete(listGuid);
上記の例では、ユーザーがリストの名前を指定するテキスト ボックスが存在すると想定しています。
複数の Web サイトからリストを削除するため、次の例では、入れ子にしたループを使用して、テキスト ボックスで指定されたタイトルと一致するタイトルを持つリストまで掘り下げています。この例では、フォームを含む .aspx ページにテキスト ボックスが存在すると想定しています。
Dim mySite As SPSite = SPContext.Current.Site
Dim allWebs As SPWebCollection = mySite.AllWebs
Dim web As SPWeb
For Each web In allWebs
Dim allLists As SPListCollection = web.Lists
Dim i As Integer
For i = 0 To allLists.Count - 1
Dim list As SPList = allLists(i)
If list.Title = TextBox1.Text Then
Dim listGuid As Guid = list.ID
allLists.Delete(listGuid)
End If
Next i
Next web
SPSite mySite = SPContext.Current.Site;
SPWebCollection allWebs = mySite.AllWebs;
foreach (SPWeb web in allWebs){
SPListCollection allLists = web.Lists;
for (int i=0; i<allLists.Count; i++)
{
SPList list = allLists[i];
if (list.Title == TextBox1.Text)
{
Guid listGuid = list.ID;
allLists.Delete(listGuid);
}
}}
この例では、各 Web サイトのリストのコレクション内にある、指定されたタイトルと一致するリストを識別するために、SPList クラスの Title プロパティを使用しています。ID プロパティは、リストのグローバル一意識別子 (GUID) を返します。これを、Delete メソッドにパラメーターとして渡しています。
上記の例では、Microsoft.SharePoint 名前空間に対する using ディレクティブ (Microsoft Visual Basic の場合は Imports) が必要になります。