我是SharePoint开发的新手,并尝试使用SharePoint 2010客户端对象模型阅读WebPart的内容。以下是我在查询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();
问题是,我得到的结果是所有WebPart的列表,其中只包含ID和该WebPart的一些基本信息(如Title),但我需要读取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>
我真正想要的是访问 WhenDetail 和 WhereDetail 属性的值。
答案 0 :(得分:2)
根据WictorWilén的说法,
在处理Web部件时,客户端对象模型相当有限。可以执行添加和删除Web部件等基本操作,也可以更改Web部件的某些默认属性(例如标题)。 无法访问自定义Web部件属性。
无法访问自定义Web部件属性。无法访问Web部件上的自定义属性或方法。如果需要使用远程客户端进行此类自定义,则必须将自己的远程API添加到SharePoint。
有关详情,请点击Here。
为了获得webpart所需的详细信息,我使用了两种方法的组合。首先,我使用以下代码获取了Web部件详细信息列表:
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);