Client Object Model
我們知道Microsoft SharePoint 2010 提供了三個新的用戶端 API,這些 API 允許您通過在瀏覽器中執行的指令碼、在 .NET 託管應用程式中執行的代碼(Microsoft .NET Framework 3.5 或更高版本)或在 Microsoft Silverlight 2.0 應用程式中執行的代碼與 SharePoint 網站進行互動。
這裡我們來看看如何在Sharepoint網站中引入ECMAScript(JavaScript、JScript) 用戶端物件模型。
首先是幾點說明:
1、ECMAScript物件模型只能用於Sharepoint網站。也就是說你不能通過傳統的Asp.net網站使用ECMAScript物件模型來跨網站訪問Sharepoint網站資源。
2、與上面類似,你也不能在一個Sharepoint網站上使用ECMAScript物件模型來跨網站訪問其它Sharepoint網站的資源。(如:從Sharepoint網站 url: MySite.MySharepoint.com通過ECMAScript物件模型去訪問另一個Sharepoint網站 url: YourSite.YourSharepoint.com上的資源)
3、你可以把JQuery與ECMAScript物件模型直接結合使用而無需多餘的其它準備工作。你只需要在你的Sharepoint項目中引用JQuery.js就行了。
4、當你在Sharepoint網站的Webpart頁面或者application頁面(aspx page)上使用ECMAScript物件模型時,你只需要引用SP.js就可以了。<SharePoint:ScriptLink
Name="SP.js" runat="server" OnDemand="true"
Localizable="false"
/>
5、如果你打算通過ECMAScript物件模型來修改Sharepoint網站上的相關資源,你需要加入FormDigest標籤。<SharePoint:FormDigest
runat="server"
/>
6、 在sp.js被載入後才執行你的JavaScript代碼。
有時你想要執行的Javascript代碼功能會基於sp.js檔案,如果sp.js沒有載入,你所定義的Javascript代碼就會報錯。因此,我們需要人為介入,保證sp.js在我們定義的Javascript功能之前先行載入。 為達到此目的,我們需要使用ExecuteOrDelayUntilScriptLoaded功能。代碼如下
ExecuteOrDelayUntilScriptLoaded(myjsfucntion, "sp.js");
7、 在ECMAScript物件模型中使用JQuery
ECMAScript物件模型與JQuery沒有任何衝突,你只需要加入JQuery的引用即可,唯一需要注意的就是如果你想要在Page Load Event中執行Javascript,你必須把這個 Javascript的功能段放置到ExecuteOrDelayUntilScriptLoaded中(如上面所示)
如果添加JQuery可以參考Sharepoint學習筆記—Delegate Control--在Sharepoint頁面添加jQuery
可以使用新的用戶端物件模型來檢索特定 SharePoint 用戶端對象(ClientObject,或者 ECMAScript(JavaScript、JScript) 中的
ClientObject (該連結可能指向英文頁面))的屬性,或檢索子物件及其關聯的屬性或集合中的子項。物件模型使用顯式資料檢索語義,在檢索正常工作的資料時,必須遵循這些語義。用戶端物件模型不保留在用戶端上本地檢索的資料。
執行資料檢索涉及以下過程:
使用 ClientContext() 建構函式 (JavaScript:
ClientContext(serverRelativeUrl) (該連結可能指向英文頁面)) 返回用戶端請求的上下文。
使用物件模型指定要檢索的對象或要從中檢索資料的對象。
通過就地載入或可查詢載入來載入對象或集合,就地載入使用 Load<T>(T, []) (JavaScript:
load(clientObject) (該連結可能指向英文頁面)) 方法返回特定的對象、集合或資料;可查詢載入使用
LoadQuery() (JavaScript:
loadQuery(clientObjectCollection, exp) (該連結可能指向英文頁面)) 方法返回對象的可枚舉集合。
通過在用戶端物件模型的 .NET 託管版本中調用同步 ExecuteQuery() 方法執行查詢,或者在 Silverlight 版本中,當代碼從不修改使用者介面
(UI) 的線程執行時,執行查詢。在物件模型的 JavaScript 版本中,或者當 Silverlight 版本修改 UI 時,資料檢索過程將使用非同步回調模型,並且您必須調用
ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) 方法 (JavaScript:
executeQueryAsync(succeededCallback, failedCallback) (該連結可能指向英文頁面)),該方法包括用於處理成功或失敗請求的方法參數。當執行查詢的方法調用返回(同步或非同步)時,您可以訪問從中啟動查詢的對象上的查詢結果。
就地載入與可查詢載入
可通過兩種方法對用戶端物件模型使用基於 LINQ 的查詢:通過就地載入和通過可查詢載入。可查詢載入在另一個結果數組中返回資料,而就地載入在對象本身中返回資料。
就地載入會發出載入對象及其資料的請求,並通過多個請求保留對象標識。可以通過用戶端內容的
Load<T>(T, []) 方法執行就地載入。以下樣本載入當前網站的所有列表及其所有預設屬性。執行查詢後,代碼將可以訪問整個列表集合和預設的列表屬性:
C#複製
clientContext.Load(clientContext.Web.Lists); clientContext.ExecuteQuery();
在可查詢載入中,查詢與返回的結果分隔開。與就地載入不同,在可查詢載入中,不會保留對象標識,因此您的代碼必須自己維護返回的對象。以下樣本使用查詢文法返回網站的所有列表。
C#VB複製
var query = from list in clientContext.Web.Lists select list;var result = clientContext.LoadQuery(query);clientContext.ExecuteQuery();
資料檢索:
http://msdn.microsoft.com/zh-cn/library/ee539350(v=office.14).aspx