首页 文章

如何使用SharePoint Client OM阅读WebPart内容?

提问于
浏览
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的列表,其中只包含ID和WebPart的一些基本信息(如Title),但我需要阅读WebPart本身的XML内容而不是阅读基本定义那个WebPart .

阅读 WebPart's content 的最佳方法是什么?

感谢您的帮助 .


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 属性的值 .

1 回答

  • 2

    根据WictorWilén的说法,

    在处理Web部件时,客户端对象模型相当有限 . 可以执行添加和删除Web部件等基本操作,也可以更改Web部件的默认属性(例如 Headers ) . There’s no access to custom Web Part properties.

    无法访问自定义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);
    

相关问题