Creating a Web Application in a SharePoint Web Site
This programming task describes how to create a Web application in Visual Studio .NET that operates within the context of Windows SharePoint Services. The example creates a tool for reporting a list of all the SharePoint Web sites to which a specified user belongs, as well as a list of that user's membership in the security groups for each Web site.
Note For information about how to create a Web application that coexists with Windows SharePoint Services, see Modifying Configuration Settings for an Application to Coexist with Windows SharePoint Services.
In Visual Studio .NET, create a new Web application and set a reference to Microsoft.SharePoint.dll. For information on how to perform these steps, see Getting Started with Customizing a Team Web Site in Visual Studio .NET.
In Design View, use the Toolbox to add a label, a text box, and a button to WebForm1.aspx. To open the Toolbox, click Toolbox on the View menu.
Note To create a Web application that modifies data in the content database, you need to add a FormDigest control and a page directive to the .aspx file containing the form. For information on how to add this control, see Security Validation and Making Posts to Update Data.
Double-click the button to open the code-behind file named WebForm1.aspx.cs.
At the beginning of the file, add using directives (Imports statements in Visual Basic .NET) that reference the Microsoft.SharePoint, Microsoft.SharePoint.Utilities, and Microsoft.SharePoint.WebControls namespaces, as follows:
[Visual Basic .NET] Imports Microsoft.SharePoint Imports Microsoft.SharePoint.WebControls Imports Microsoft.SharePoint.Utilities [C#] using Microsoft.SharePoint; using Microsoft.SharePoint.WebControls; using Microsoft.SharePoint.Utilities;
The Microsoft.SharePoint.WebControls namespace must be referenced in order to instantiate a site object that corresponds to the current site context. The Microsoft.SharePoint namespace must be referenced in order to return the specified user and the groups to which the user belongs. The Microsoft.SharePoint.Utilities namespace must be referenced in order to encode strings that are displayed in the example.
After you instantiate the site object using
SPSite mySite = SPControl.GetContextSite(Context)
(in Visual Basic .NET, useDim mySite As SPSite = SPControl.GetContextSite(Context)
), you can use the AllWebs property of the SPSite class, the Users property of the SPWeb class, and the Roles property of the SPUser class within nested foreach statements in order to return a user object for the user name specified in the text box, as well as the list of site groups to which that user belongs.Note The Context value that is passed in the GetContextSite method is inherited from System.Web.UI.Page.
Within the Button1_Click handler that Visual Studio .NET creates on the code-behind page, add the following code block:
[Visual Basic .NET] Dim userList As String = SPEncode.HtmlEncode(TextBox1.Text) & " is a user in the following webs:<BR>" Dim mySite As SPSite = SPControl.GetContextSite(Context) Dim allSites As SPWebCollection = mySite.AllWebs Dim subSite As SPWeb For Each subSite In allSites Dim listGroups As String = "" Dim allUsers As SPUserCollection = subSite.Users Dim user As SPUser For Each user In allUsers If user.LoginName = TextBox1.Text Then Dim allGroups As SPRoleCollection = user.Roles Dim group As SPRole For Each group In allGroups listGroups += SPEncode.HtmlEncode(group.Name) & " " Next group userList += subSite.ServerRelativeUrl.ToString() & " :: " & listGroups & "<BR>" End If Next user Next subSite Label1.Text = userList [C#] string userList = SPEncode.HtmlEncode(TextBox1.Text) + " is a user in the following webs:<BR>"; SPSite mySite = SPControl.GetContextSite(Context); SPWebCollection allSites = mySite.AllWebs; foreach (SPWeb subSite in allSites) { string listGroups = ""; SPUserCollection allUsers = subSite.Users; foreach (SPUser user in allUsers) { if (user.LoginName == TextBox1.Text) { SPRoleCollection allGroups = user.Roles; foreach (SPRole group in allGroups) { listGroups += SPEncode.HtmlEncode(group.Name) + " "; } userList += subSite.ServerRelativeUrl.ToString() + " -- " + listGroups + "<BR>"; } } } Label1.Text = userList;
The code example iterates through all the users of all the subsites for the current top-level site, and if the value of the LoginName property for a given user matches the user name that is entered in the text box, then the names of all the user's site groups for the site are collected and displayed.
On the Build menu, click Build Solution.
The browser opens the page. When you type the logon name of a user on the site, the label displays the Web sites and site groups to which the specified user belongs.
To run the application after creating it in Visual Studio .NET, navigate to http://Server_Name/[sites/][Site_Name/]_layouts/Web_Application_Name/webform1.aspx.