サイトおよびサイト コレクションを列挙する

最終更新日: 2010年4月12日

適用対象: SharePoint Foundation 2010

SharePoint Online で使用可能

次の例に示すように、サイト コレクション内のすべての 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 のオブジェクトの破棄に関する推奨事項については、「オブジェクトの破棄」を参照してください。

関連項目

参照

Microsoft.SharePoint

概念

リストのオブジェクトとコレクションを操作する

Visual Studio を使用して SharePoint 開発を行う

データ更新のためのセキュリティ検証と投稿の作成

権限の昇格