2012-08-05 60 views
1

我很新的SharePoint開發,並嘗試使用SharePoint 2010客戶端對象模型來讀取WebPart的內容。下面是我在做什麼來查詢的WebPart內容:如何使用SharePoint客戶端OM讀取WebPart內容?

ClientContext ctx = new ClientContext("http://foo"); 
File home = ctx.Web.GetFileByServerRelativeUrl("/SitePages/Page.aspx"); 
var wpm = home.GetLimitedWebPartManager(PersonalizationScope.Shared); 

var query = wpm.WebParts.Include(wp => wp.Id, wp => wp.WebPart)); 
var webPartDefenitions = ctx.LoadQuery(query); 

ctx.ExecuteQuery(); 

的問題是,我所得到的結果是它簡單地包括ID和Web部件的一些基本信息(如所有的WebParts列表標題),但我需要閱讀WebPart本身的XML內容,而不是閱讀該WebPart的基本定義。

什麼是最好的方式來閱讀WebPart的內容

感謝您的幫助提前。


PS。

根據Trikks的評論,我檢查了webpart的內容。內容似乎不受任何列表或庫的約束。那裏有一些自定義數據屬性。下面是示例:

<webPart xmlns="http://schemas.microsoft.com/WebPart/v3"> 
    <metaData> 
     <type name="NS.SPS2010.Internet.WebParts.VenueDetails.VenueDetails, NS.SPS2010.Internet.WebParts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=89259c78cb06b3885" /> 
    </metaData> 
    <data> 
     <properties> 
     <property name="WhenDetail" type="string">Monday 12:PM</property> 
     <property name="WhereDetail" type="string">London</property> 
     </properties> 
    </data> 
    </webPart> 

我真正尋找的,正在訪問的WhenDetailWhereDetail屬性的值。

+0

要理解這一點,你需要來形容首先,我用下面的代碼獲取的Web部件的詳細信息列表您的網頁部分以及它獲取數據的位置。通常,webparts是顯示SharePoint中列表和庫的數據的模塊,通常不會嘗試訪問webpart內的數據。 – 2012-08-05 21:00:51

+0

謝謝Trikks。我將檢查如何訪問底層的數據塊並在之後更新問題。 – ALEXIX 2012-08-05 23:17:39

回答

2

據WictorWilén,

客戶端對象模型是相當有限的,當談到與Web部件的工作。可以完成基本操作,如添加和刪除Web部件以及更改某些 Web部件的默認屬性(如標題)。 無法訪問自定義Web部件屬性。

無法訪問自定義Web部件屬性。無法訪問Web部件上的自定義屬性或方法。如果您需要使用遠程客戶端進行這種定製,則必須將自己的遠程API添加到SharePoint。請點擊Here

爲了獲得webpart所需的詳細信息,我使用了兩種方法的組合。

ClientContext ctx = new ClientContext("http://foo"); 
File home = ctx.Web.GetFileByServerRelativeUrl("/SitePages/Page.aspx"); 
var wpm = home.GetLimitedWebPartManager(PersonalizationScope.Shared); 

var query = wpm.WebParts.Include(wp => wp.Id, wp => wp.WebPart)); 
var webPartDefenitions = ctx.LoadQuery(query); 

ctx.ExecuteQuery(); 

然後叫Webpartpages Web服務的GetWebPart2方法下載內容:

var client = new WebPartPagesWebService(); 
client.Url = siteRootAddress+"/_vti_bin/Webpartpages.asmx"; 
client.Credentials = credential; 
// webPartId is a property of WebPart Defenition from the above code 
var webPartXmlString = client.GetWebPart2(pageAddress, 
               webPartId, 
               Storage.Shared, 
               SPWebServiceBehavior.Version3); 

var webPartNode = XElement.Parse(webPartXmlString); 
+0

如果我的客戶端上下文來自提供程序託管的應用程序,我如何獲取憑據? – 2015-05-18 19:14:16

+0

可以使用CSOM獲取自定義Web部件屬性,至少現在是這樣。它們出現在「屬性」集合中(如果您請求)。獲取XML或Web部件的類型目前正在逃避我,但是 – 2016-11-02 15:54:11

+0

自2016年3月起 - https://dev.office應該有可能。COM /博客/新的SharePoint CSOM版本發佈換辦公室-365-行軍-2016 – 2017-03-09 13:32:07

相關問題