WSS3SDK之:如何在SharePoint站点中创建Web应用程序

来源:互联网 发布:假期高速公路免费知乎 编辑:程序博客网 时间:2024/04/27 14:21
此编程任务,介绍了如何在Visual Studio 2005中创建运行于Windows SharePoint Services下的定制的Web应用程序或网站。该示例创建一个工具,能够以报告的形式列出了所有指定用户可以访问的SharePoint站点,和该用户在各个网站中所属的分组信息。

注意:
“ Web应用程序”根据上下文的不同会有不同的含义。本节中是指基于浏览器运行的一个aspx页。与Internet InformationServer (IIS) “网站”或“应用程序池”无关 。因此,也不是代表Windows SharePoint Services3.0对象模型里的SPWebApplication 类。 
 

有关如何创建一个与Windows SharePoint Services 并存的Web应用程序,请参阅章节“如何修改配置使应用程序可以与与Windows SharePoint Services并存” 。

步骤

创建一个报告用户所属SharePoint网站和分组的工具

1、在Visual Studio 2005中 ,创建一个新的Web应用程序和并添加对Microsoft.SharePoint.dll的引用。
2、在设计视图中,从工具箱拖入一个标签,一个文本框,一个按钮到 default.aspx页面上 。可以通过单击视图菜单中的工具箱来打开工具箱。

注意:
如果将要创建Web应用程序存在修改内容数据库的操作,那么您还需要在aspx页面源代码中的Form标记内添加一个FormDigest控件
 
3、双击刚刚添加的按钮,打开后台代码文件,这里是default.aspx.cs。
4、在文件的开头,引用如下命名空间:
VB
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Utilities
C#
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;

通过引用Microsoft.SharePoint命名空间,能够返回指定的用户和用户所属的组。而通过引用Microsoft.SharePoint.Utilities命名空间,能够将字符串编码显示。

5、然后,我们通过SPSite mySite= SPContext.Current.Site 来实例化站点对象。 (在Visual Basic中为 Dim mySite As SPSite = SPControl.Context.Current.Site
现在,我们可以使用SPSite的AllWebs属性,以及SPWeb对象的AllUsers属性,和foreach循环中使用SPUser的Groups属性,来返回由文本框中的用户名所对应的用户对象,以及其所属分组的信息。
在default.aspx.cs的默认类中 ,添加以下方法来返回当前网站集下各网站的用户和分组情况:

VB
Protected Sub GetSitesAndGroups()
   
Dim userList As String = SPEncode.HtmlEncode(TextBox1.Text) + 
" is a user in the following webs:<BR>"
         
   
Dim mySite As SPSite = SPContext.Current.Site
   
Dim allWebs As SPWebCollection = mySite.AllWebs
         
   
Dim subWeb As SPWeb
   
For Each subWeb In  allWebs
      
Dim listGroups As String = ""
            
      
'Use AllUsers not Users to ensure you find the user
      Dim allUsers As SPUserCollection = subWeb.AllUsers
      
Dim user As SPUser
      
For Each user In  allUsers
         
If user.LoginName.ToUpper() = TextBox1.Text.ToUpper()
            
Then
               
Dim allGroups As SPGroupCollection = user.Groups
               
Dim group As SPGroup
               
For Each group In  allGroups
                  listGroups 
+= SPEncode.HtmlEncode(group.Name) + 
"  "
               
Next group
               userList 
+= subWeb.ServerRelativeUrl.ToString() + 
" -- " + listGroups + "<BR>"
         
End If
      
Next user
   
Next subWeb
   Label1.Text 
= userList
End Sub 'GetSitesAndGroups

C#
protected void GetSitesAndGroups()
{
    
string userList = SPEncode.HtmlEncode(TextBox1.Text) + 
        
" is a user in the following webs:<BR>";

    SPSite mySite 
= SPContext.Current.Site;
    SPWebCollection allWebs 
= mySite.AllWebs;

    
foreach (SPWeb subWeb in allWebs)
    {
        
string listGroups = "";

        
/*Use AllUsers not Users to ensure you find the user*/
        SPUserCollection allUsers 
= subWeb.AllUsers; 
        
foreach (SPUser user in allUsers)
        {
            
if (user.LoginName.ToUpper() == TextBox1.Text.ToUpper())
            {
                SPGroupCollection allGroups 
= user.Groups;
                
foreach (SPGroup group in allGroups)
                {
                    listGroups 
+= SPEncode.HtmlEncode(group.Name) + "  ";
                }
                userList 
+= subWeb.ServerRelativeUrl.ToString() + 
                    
" -- " + listGroups + "<BR>";
            }
        }
    }
    Label1.Text 
= userList;
}
上面的样例代码将通过在当前网站集中遍历所有网站中的所有用户,来查找指定用户的LoginName与文本框中所输入的用户名相匹配的项,然后将该网站下该用户所属的分组信息收集并显示出来。
6、为了避免在运行上面代码时收到拒绝访问的错误信息,运行GetSitesAndGroups方法的用户必须拥有完全控制权限。可以通过在Button1_Click事件处理程序中使用RunWithElevatedPrivileges方法,来保证当前用户可以访问到网站集下所有网站的用户和分组信息。
VB
Protected Sub Button1_Click(sender As Object, e As EventArgs)
   
Dim elevatedGetSitesAndGroups As New SPSecurity.CodeToRunElevated(GetSitesAndGroups)
   SPSecurity.RunWithElevatedPrivileges(elevatedGetSitesAndGroups)
End Sub 'Button1_Click

C#
protected void Button1_Click(object sender, EventArgs e)
{
   SPSecurity.CodeToRunElevated elevatedGetSitesAndGroups 
= new SPSecurity.CodeToRunElevated(GetSitesAndGroups);
   SPSecurity.RunWithElevatedPrivileges(elevatedGetSitesAndGroups);
}
7、在Build菜单上,单击生成解决方案。

将浏览器中打开该网页。当我们输入网站集中一个用户的的登录名称后,标签将显示的指定用户所属的网站和分组。

8、如果要在Visual Studio 2005以外,访问我们刚刚创建的页面,可以通过如下地址http://Server_Name/[sites/][Site_Name/]_layouts/Web_Application_Name/Default.aspx
原创粉丝点击