此編程任務,介紹了如何在Visual Studio 2005中建立運行於Windows SharePoint Services下的定製的Web應用程式或網站 。該樣本建立一個工具,能夠以報告的形式列出了所有指定使用者可以訪問的SharePoint網站,和該使用者在各個網站中所屬的分組資訊。
注意:
“ Web應用程式”根據內容相關的不同會有不同的含義。本節中是指基於瀏覽器啟動並執行一個aspx頁。與Internet Information Server (IIS) “網站”或“應用程式集區”無關 。因此,也不是代表Windows SharePoint Services 3.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、在檔案的開頭,引用如下命名空間:
VBImports 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 。