Share via


SharePoint Web サイトで Web アプリケーションを作成する

このプログラミング タスクでは、Windows SharePoint Services のコンテキスト内で動作するカスタム Web アプリケーション (つまり Web サイト) を Visual Studio 2005 で作成する方法について説明します。例では、指定されたユーザーが属しているすべての SharePoint Web サイトのリスト、および各 Web サイトのユーザーが属しているグループのリストを報告するツールを作成します。

注意

"Web アプリケーション" という語句の意味は文脈によって異なりますが、ここでは、aspx ページから実行するブラウザベースのアプリケーションを対象とし、インターネット インフォメーション サービス (IIS) の "Web サイト" や "アプリケーション プール" の Web アプリケーションは対象外です。したがって、Windows SharePoint Services 3.0 オブジェクト モデルの SPWebApplication クラスで表される内容とは異なります。

手順

任意のユーザーの SharePoint Web サイトおよびグループを報告するツールを作成するには

  1. Visual Studio 2005 で新しい Web アプリケーションを作成し、Microsoft.SharePoint.dll への参照を設定します。この手順を実行する方法、または Windows SharePoint Services を実行していないリモート コンピュータからフロントエンド Web サーバー上に Web アプリケーションを作成する方法については、「Visual Studio で SharePoint Web サイトのプログラムによるカスタマイズ作業を開始する」を参照してください。

  2. デザイン ビューで、ツールボックスを使用して Default.aspx にラベル、テキスト ボックス、およびボタンを追加します。ツールボックスを開くには、[表示] メニューの [ツールボックス] をクリックします。

    注意

    コンテンツ データベース内のデータを変更する Web アプリケーションを作成するには、フォームが含まれている .aspx ファイルに FormDigest コントロールとページ ディレクティブを追加する必要があります。このコントロールを追加する方法については、「データ更新のためのセキュリティ検証と投稿の作成」を参照してください。

  3. Default.aspx.cs という分離コード ファイルを開くには、前の手順で追加したボタンをダブルクリックします。

  4. このファイルの先頭に using ディレクティブ (Visual Basic の Imports ステートメント) を追加します。このディレクティブでは、次のように Microsoft.SharePoint および Microsoft.SharePoint.Utilities を参照します。

    Imports Microsoft.SharePoint
    Imports Microsoft.SharePoint.Utilities
    
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Utilities;
    

    指定したユーザーおよび各ユーザーが属するグループを返すためには、Microsoft.SharePoint 名前空間を参照する必要があります。この例で表示される文字列をエンコードするためには、Microsoft.SharePoint.Utilities 名前空間を参照する必要があります。

  5. 次のように、クラス定義の先頭で、現在の要求コンテキストのサイト コレクション オブジェクトを返します。

    Partial Class _Default
       Inherits System.Web.UI.Page
    
       Dim oSite As SPSite = SPContext.Current.Site
       ...
    
    public partial class _Default : System.Web.UI.Page
    {
       SPSite oSite = SPContext.Current.Site;
       ...
    
  6. テキスト ボックスに指定されたユーザー名に対応するユーザー オブジェクトと、そのユーザーが属するグループのリストを返すために、SPSite クラスの AllWebs プロパティ、SPWeb クラスの AllUsers プロパティ、および入れ子にされた foreach ステートメント内に記述した SPUser クラスの Groups プロパティを使用するメソッドを作成します。

    Default.aspx.cs の既定のクラスに、現在のサイト コレクション内の各 Web サイトのユーザーおよびグループを返す以下のメソッドを追加します。

    Protected Sub GetSitesAndGroups()
       Dim strUser As String = SPEncode.HtmlEncode(TextBox1.Text) _
          & " is a user in the following groups:<BR>"
    
       Dim collWebs As SPWebCollection = oSite.AllWebs
    
       For Each oWebsite As SPWeb In collWebs
          Dim strGroups As String = ""
    
          'Use AllUsers not Users to ensure you find the user
          Dim collUsers As SPUserCollection = oWebsite.AllUsers
    
          For Each oUser As SPUser In collUsers
             If oUser.LoginName.ToUpper() = TextBox1.Text.ToUpper() Then
                Dim collGroups As SPGroupCollection = oUser.Groups
    
                For Each oGroup As SPGroup In collGroups
                   strGroups += SPEncode.HtmlEncode(oGroup.Name) & "  "
                Next oGroup
    
                strUser = strUser _
                   & oWebsite.ServerRelativeUrl.ToString() _
                   & " -- " & strGroups & "<BR>"
             End If
          Next oUser
    
          oWebsite.Dispose()
       Next oWebsite
    
       Label1.Text = strUser
    End Sub
    
    protected void GetSitesAndGroups()
    {
       string strUser = SPEncode.HtmlEncode(TextBox1.Text) +
          " is a user in the following groups:<BR>";
    
       SPWebCollection collWebs = oSite.AllWebs;
    
       foreach (SPWeb oWebsite in collWebs)
       {
          string strGroups = "";
    
          /*Use AllUsers not Users to ensure you find the user*/
          SPUserCollection collUsers = oWebsite.AllUsers;
          foreach (SPUser oUser in collUsers)
          {
             if (oUser.LoginName.ToUpper() == TextBox1.Text.ToUpper())
             {
                SPGroupCollection collGroups = oUser.Groups;
    
                foreach (SPGroup oGroup in collGroups)
                {
                   strGroups += SPEncode.HtmlEncode(oGroup.Name) + 
                      "  ";
                }
    
                strUser += oWebsite.ServerRelativeUrl.ToString() +
                   " -- " + strGroups + "<BR>";
             }
          }
    
          oWebsite.Dispose();
       }
    
          Label1.Text = strUser;
    }
    

    このコード例では、現在のサイト コレクションに含まれるすべての Web サイトのすべてのユーザーを繰り返し処理し、指定されたユーザーの LoginName プロパティの値とテキスト ボックスに入力されたユーザー名が一致する場合には、サイトにあるユーザーのグループすべての名前が収集され、表示されます。

  7. 前の手順で追加したコードを実行し、アクセス拒否エラー メッセージが返されないようにするには、GetSitesAndGroups メソッドを実装するユーザーにフル コントロールのアクセス許可が必要です。以下のコードを Button1_Click イベント ハンドラに追加してください。このコードは、RunWithElevatedPrivileges() メソッドを使用して、現在のサイト コレクションに含まれる各 Web サイトのユーザーおよびグループを現在のユーザーが繰り返し処理することを可能にします。

    Protected Sub Button1_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim elevatedGetSitesAndGroups As New SPSecurity.CodeToRunElevated(AddressOf GetSitesAndGroups)
       SPSecurity.RunWithElevatedPrivileges(elevatedGetSitesAndGroups)
    End Sub
    
    protected void Button1_Click(object sender, EventArgs e)
    {
       SPSecurity.CodeToRunElevated elevatedGetSitesAndGroups = new SPSecurity.CodeToRunElevated(GetSitesAndGroups);
       SPSecurity.RunWithElevatedPrivileges(elevatedGetSitesAndGroups);
    }
    
  8. [デバッグ] メニューの [デバッグ開始] をクリックするか、F5 キーを押します。[デバッグが無効です] ダイアログ ボックスが表示されたら、[新しい Web.config を追加してデバッグを有効にする] が選択されていることを確認し、[OK] をクリックしてください。

    ページがブラウザで開かれます。現在のサイト コレクションに含まれるサイトのユーザーのログオン名を入力すると、指定したユーザーが属する Web サイトとグループがラベルに表示されます。

  9. Visual Studio 2005 で作成したアプリケーションを実行するには、http://サーバー名/_layouts/Web アプリケーション名/Default.aspx に移動します。

See Also

概念

Working with List Objects and Collections (英語)

Visual Studio で SharePoint Web サイトのプログラムによるカスタマイズ作業を開始する

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

権限の昇格