Client Object Model

來源:互聯網
上載者:User
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 (該連結可能指向英文頁面))的屬性,或檢索子物件及其關聯的屬性或集合中的子項。物件模型使用顯式資料檢索語義,在檢索正常工作的資料時,必須遵循這些語義。用戶端物件模型不保留在用戶端上本地檢索的資料。

執行資料檢索涉及以下過程:

  1. 使用 ClientContext() 建構函式 (JavaScript:
    ClientContext(serverRelativeUrl) (該連結可能指向英文頁面)) 返回用戶端請求的上下文。

  2. 使用物件模型指定要檢索的對象或要從中檢索資料的對象。

  3. 通過就地載入或可查詢載入來載入對象或集合,就地載入使用 Load<T>(T, []) (JavaScript:
    load(clientObject) (該連結可能指向英文頁面)) 方法返回特定的對象、集合或資料;可查詢載入使用
    LoadQuery() (JavaScript:
    loadQuery(clientObjectCollection, exp) (該連結可能指向英文頁面)) 方法返回對象的可枚舉集合。

  4. 通過在用戶端物件模型的 .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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.