1

我是 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 的列表,其中仅包含该 WebPart 的 ID 和一些基本信息(例如标题),但我需要阅读 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属性的值。

4

1 回答 1

2

根据维克托·维伦的说法,

在使用 Web 部件时,客户端对象模型相当有限。可以完成添加和删除 Web 部件等基本操作以及更改Web 部件的某些默认属性(如标题)。无法访问自定义 Web 部件属性。

无法访问自定义 Web 部件属性。无法访问 Web 部件上的自定义属性或方法。如果您需要对远程客户端进行此类自定义,则必须将自己的远程 API 添加到 SharePoint。

更多详情请点击这里

为了获得所需的 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);
于 2012-08-08T23:25:18.397 回答