如何使用LimitedWebPartManager从应用程序部件或Web部件获取区域ID

时间:2015-09-01 12:33:01

标签: sharepoint csom

从SharePoint加载项中获取CSOM中的页面时,如何获取某个Web部件的ZoneId?使用" SPLimitedWebPartManager"你有一个方法" GetZoneID" (https://msdn.microsoft.com/EN-US/library/microsoft.sharepoint.webpartpages.splimitedwebpartmanager.getzoneid.aspx

但是你当然不能在CSOM上找到那个。检查" LimitedWebPartManager"上的可用方法时我没有看到任何接近它的东西:

https://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.client.webparts.limitedwebpartmanager_methods.aspx

2 个答案:

答案 0 :(得分:0)

Unfortunately SharePoint CSOM WebPart class does not expose ZoneId property.

As an alternative solution you could consider to consume SharePoint Web Services, in particular Web Part Pages Service, the following example demonstrates how to retrieve Web Part Zone Id property using WebPartPagesWebService.GetWebPartProperties2 method:

var pageUrl = "/Pages/default.aspx";

var webPartPagesProxy = new WebPartPagesWebService();
webPartPagesProxy.Url = webUri + "/_vti_bin/WebPartPages.asmx";
var result = webPartPagesProxy.GetWebPartProperties2(pageUrl,Storage.Shared, SPWebServiceBehavior.Version3);

var wpDoc = XDocument.Parse(result.OuterXml);
var zoneId = wpDoc.Descendants(XName.Get("ZoneID", @"http://schemas.microsoft.com/WebPart/v2")).First().Value;  

答案 1 :(得分:0)

我想补充上一个答案。

虽然它适用于使用" http://schemas.microsoft.com/WebPart/v2"的网页部件,对于使用" http://schemas.microsoft.com/WebPart/v3"的网页部件,我相信其中大部分都是,区域ID未公开。

对于您没有获得区域ID的Web部件,您唯一的选择是使用GetWebPartPage Web服务获取页面内容并进行解析。在页面中,您将拥有" WebPartPages:WebPartZone"中的Web部件元素。元素(每个元素代表不同的区域)。这些Web部件元素具有Web部件的ID以及其主XML节点中的ZoneID。所以你可以用正则表达式来解决它。这是一个非常简单的正则表达式(确保在你正在运行它的任何环境中设置不区分大小写的选项):

=了zoneid"(?*)"?* 0a32c6f6-ee05-4c8e-ba7a-587c0c67c382