サイトおよびサイト コレクションを列挙する
最終更新日: 2010年4月12日
適用対象: SharePoint Foundation 2010
次の例に示すように、サイト コレクション内のすべての Web サイト、Web サイトの下のすべての第 1 層サブサイト、現在の Web サイトのすべてのサブサイトおよびリスト、または SharePoint Web アプリケーション内のサイト コレクションのコレクションを返すことができます。
これらの各例では、using ディレクティブ (Visual Basic では Imports) を使用して Microsoft.SharePoint 名前空間および Microsoft.SharePoint.Utilities 名前空間を指定する必要があります。最後の例では、これらのほかに、Microsoft.SharePoint.Administration 名前空間もインポートする必要があります。
以下のスニペットをアプリケーション ページの分離コードの Button_Click ハンドラーで呼び出すと、ページ内のラベルに結果を表示できます。SharePoint Foundation のコンテキストで動作するアプリケーション ページを作成する方法については、「Creating Application Pages for SharePoint (英語)」を参照してください。以下の各例では, .aspx ページに Label コントロールが存在することを前提としています。
SPSite クラスの AllWebs プロパティを使用することで、(トップレベル サイトおよびすべてのサブサイトを含む) サイト コレクション内のすべての Web サイトを返すことができます。次の例では、現在のサイト コレクション内のすべての Web サイトおよびリストのタイトルの一覧を表示します。
Dim oSiteCollection As SPSite = SPContext.Current.Site
Dim collWebsite As SPWebCollection = oSiteCollection.AllWebs
For i As Integer = 0 To collWebsite.Count - 1
Using oWebsite As SPWeb = collWebsite(i)
Dim collList As SPListCollection = oWebsite.Lists
For j As Integer = 0 To collList.Count - 1
Label1.Text += SPEncode.HtmlEncode(collWebsite(i).Title) & " " & SPEncode.HtmlEncode(collList(j).Title) & "<BR>"
Next
End Using
Next
SPSite oSiteCollection = SPContext.Current.Site;
SPWebCollection collWebsite = oSiteCollection.AllWebs;
for (int i = 0; i < collWebsite.Count; i++)
{
using (SPWeb oWebsite = collWebsite[i])
{
SPListCollection collList = oWebsite.Lists;
for (int j = 0; j < collList.Count; j++)
{
Label1.Text += SPEncode.HtmlEncode(collWebsite[i].Title) + " "
+ SPEncode.HtmlEncode(collList[j].Title) + "<BR>";
}
}
}
Web サイトの下のすべての第 1 層サブサイトのリストを返すには、SPWeb クラスの Webs プロパティを使用します。次の例では、サブサイトのタイトルのリストを表示します。OpenWeb() メソッドを使用して、指定したサイト コレクションのルート Web サイトを開きます。
Dim webUrl As String = "https://Server/sites/SiteCollection"
Using oWebsite As SPWeb = New SPSite(webUrl).OpenWeb()
Dim collWebsite As SPWebCollection = oWebsite.Webs
For Each subSite As SPWeb In collWebsite
Label1.Text += SPEncode.HtmlEncode(subSite.Title) & "<BR>"
subSite.Close()
Next
End Using
string webUrl = "https://Server/sites/SiteCollection";
using (SPWeb oWebsite = new SPSite(webUrl).OpenWeb())
{
SPWebCollection collWebsite = oWebsite.Webs;
foreach (SPWeb subSite in collWebsite)
{
Label1.Text += SPEncode.HtmlEncode(subSite.Title) + "<BR>";
subSite.Close();
}
}
次の例では、入れ子にした for ステートメントを foreach ステートメントの代わりに使用して、サブサイトの URL およびリスト タイトルの一覧を表示します。
Dim oWebsite As SPWeb = SPContext.Current.Web
Dim subSites As SPWebCollection = oWebsite.Webs
For i As Integer = 0 To subSites.Count - 1
Using subSite As SPWeb = subSites(i)
Dim collList As SPListCollection = subSite.Lists
For j As Integer = 0 To collList.Count - 1
Label1.Text += (subSite.Url & " :: ") + SPEncode.HtmlEncode(collList(j).Title) & "<BR>"
Next
End Using
Next
SPWeb oWebsite = SPContext.Current.Web;
SPWebCollection subSites = oWebsite.Webs;
for (int i = 0; i < subSites.Count; i++)
{
using (SPWeb subSite = subSites[i])
{
SPListCollection collList = subSite.Lists;
for (int j = 0; j < collList.Count; j++)
{
Label1.Text += subSite.Url + " " +
SPEncode.HtmlEncode(collList[j].Title) + "<BR>";
}
}
}
次のコード例では、現在の Web サイトのすべてのサブサイトおよびリストを、各リスト内のアイテムの数と一緒に表示します。ここでは、入れ子にした foreach ステートメントを使用して、Web サイトおよびリストのコレクションに対して反復処理を実行しています。
Dim webUrl As String = "https://Server/sites/SiteCollection"
Using oWebsite As SPWeb = New SPSite(webUrl).OpenWeb()
Dim subSites As SPWebCollection = oWebsite.Webs
For Each subSite As SPWeb In subSites
Label1.Text += SPEncode.HtmlEncode(subSite.Title) & "<BR>"
Dim collList As SPListCollection = subSite.Lists
For Each oList As SPList In collList
Label1.Text += SPEncode.HtmlEncode(oList.Title) & " " &
oList.ItemCount.ToString() & "<BR>"
Next
subSite.Close()
Next
End Using
string webUrl = "https://Server/sites/SiteCollection";
using (SPWeb oWebsite = new SPSite(webUrl).OpenWeb())
{
SPWebCollection subSites = oWebsite.Webs;
foreach (SPWeb subSite in subSites)
{
Label1.Text += SPEncode.HtmlEncode(subSite.Title) + "<BR>";
SPListCollection collList = subSite.Lists;
foreach (SPList oList in collList)
{
Label1.Text += SPEncode.HtmlEncode(oList.Title) + " " +
oList.ItemCount.ToString() + "<BR>";
}
subSite.Close();
}
}
SharePoint Web アプリケーション内のサイト コレクションのコレクションを返すには、Microsoft.SharePoint.Administration.SPWebApplication クラスの Sites プロパティを使用します。Microsoft.SharePoint.SPContext クラスのプロパティを使用すると、現在の Web アプリケーションを返すことができます。次のコード例では、現在の Web アプリケーション内のすべてのサイト コレクションの URL を表示します。
Dim webApplication As SPWebApplication = SPContext.Current.Site.WebApplication
Dim siteCollections As SPSiteCollection = webApplication.Sites
For Each siteCollection As SPSite In siteCollections
Label1.Text += siteCollection.Url & "<BR>"
siteCollection.Close()
Next
SPWebApplication webApplication = SPContext.Current.Site.WebApplication;
SPSiteCollection siteCollections = webApplication.Sites;
foreach (SPSite siteCollection in siteCollections)
{
Label1.Text += siteCollection.Url + "<BR>";
siteCollection.Close();
}
パフォーマンスを向上させるために、このトピック内の各例では、コレクション列挙時にインスタンス化したサイト コレクション オブジェクトと Web サイト オブジェクトを破棄します。SharePoint Foundation のオブジェクトの破棄に関する推奨事項については、「オブジェクトの破棄」を参照してください。