自從人類學會了使用火,烤制的方式替代了人類的消化系統部分功能,從此人類的消化系統更加簡單,加速了人腦的進化;自從SharePoint 2010開始有了Client Side Object Model ,我們就可以不用在伺服器上開發SharePoint解決方案了,開發的方式更加多元化,這又加速了SharePoint 更大範圍的應用。
現在,我們可以在任一臺PC上安裝Visual Studio 然後使用類似於 Object Model的模型來訪問伺服器上的列表、網站或是其它任何東東。
那麼 ,如何使用 Client Side Object Model 客戶端程式碼獲得SharePoint 網站、列表的許可權情況呢,我們需要一臺客戶機先利用VS建一個“控制檯”程式,在這個程式裡,我們要進行如下的步驟:
1. 新建一個“控制檯程式”, 新增Client Side Object Model客戶端的DLL檔案到專案的“引用”當中,
您需要新增如下2個檔案:
Microsoft.SharePoint.Client.dll Microsoft.SharePoint.Client.Runtime.dll
這2個檔案可以從SharePoint伺服器中找到,方便大家,我提供一下地址(如果是SharePoint 2010,請把15換成14):
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI
因為伺服器是X64的,您老如果使用X86的Win7,也沒有關係照樣可以使用這個64位DLL,但這個專案,一定要保證目標平臺是“Any”。否則會出錯。
2. 開啟程式碼檔案,前面新增引用:using Microsoft.SharePoint.Client
然後在 Main 函式,中複製,貼上如下的程式碼到Main 函式中,
//如果你想獲得SITE的許可權列表,應該這樣寫 //string ObjectType = "Site", ObjectTitle = "網站名稱", SiteUrl = "網站的URL"; string ObjectType = "List", ObjectTitle = "文件", SiteUrl = "http://sp2013"; ClientContext clientContext = new ClientContext(SiteUrl); clientContext.Credentials = new NetworkCredential("administrator", "密碼"); List selectedList = null; Web selectedWeb = null; Console.WriteLine("Object:" + ObjectType + " Name:" + ObjectTitle + " URL:" + SiteUrl); try { if (ObjectType != "Site") { selectedList = clientContext.Web.Lists.GetByTitle(ObjectTitle); clientContext.Load(selectedList); } else { selectedWeb = clientContext.Web; clientContext.Load(selectedWeb); } clientContext.ExecuteQuery(); } catch (Exception wex) { Console.WriteLine(wex.Message); Console.ReadLine(); return; } RoleAssignmentCollection ras = null; if (ObjectType != "Site") { ras = selectedList.RoleAssignments; clientContext.Load(ras); } else { ras = selectedWeb.RoleAssignments; clientContext.Load(ras); } clientContext.ExecuteQuery(); Console.WriteLine("It has " + ras.Count + " role assignments"); foreach (var ra in ras) { clientContext.Load(ra.RoleDefinitionBindings); clientContext.Load(ra.Member); clientContext.ExecuteQuery(); foreach (var definition in ra.RoleDefinitionBindings) { clientContext.Load(definition, d => d.Name); clientContext.ExecuteQuery(); //C#在輸入中英文混合字元時,對齊會不正常,這個語句主要是給使用者名稱新增空格的 string tmpname = ra.Member.Title.Trim() + new string(' ', 30 - Encoding.Default.GetByteCount(ra.Member.Title.Trim())); Console.WriteLine("{0,-20}{1}{2,-15}", ra.Member.PrincipalType.ToString().Trim(), tmpname, definition.Name); } } Console.ReadLine();
說明:
只要改變一下紅色標記的變數值,這個程式碼就可以獲得任意網站、列表的許可權情況, 如果是網站就把 ObjectType變數寫成Site,如果是列表就把ObjectType寫成是List,其它的不解釋了。
示例結果:
Client-Side 的原理:
1、初始化Web,
ClientContext(SiteUrl) ,這個函式可以返回類似於OM中的SPWeb的物件, 並且不需要從SPSite中獲取。
2、必在使用物件的屬性程式碼前,加上如下語句,有了這個語句,系統才會向伺服器提交HTTP查詢,物件的屬性才可以被使用。
clientContext.Load(變數名或是物件,linq表示式);
clientContext.ExecuteQuery();
具體可以參考MSDN的相關文章,相信您一定會很快入門:
非常好的PPT:
非常好的中文入門教材:
http://msdn.microsoft.com/zh-cn/office/fp179912