Как получить идентификатор зоны из части приложения или веб-части с помощью LimitedWebPartManager

При извлечении страницы в CSOM из надстройки SharePoint, как можно получить 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


person Mathieu    schedule 01.09.2015    source источник


Ответы (2)


К сожалению, SharePoint CSOM класс WebPart не предоставляет свойство ZoneId.

В качестве альтернативного решения вы можете использовать веб-службы SharePoint, в частности Служба страниц веб-частей, в следующем примере показано, как получить свойство идентификатора зоны веб-частей с помощью метод WebPartPagesWebService.GetWebPartProperties2:

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;  
person Vadim Gremyachev    schedule 01.09.2015

Хочу добавить к предыдущему ответу.

Пока он работает для веб-частей, использующих "http://schemas.microsoft.com/WebPart/v2. ", для тех, кто использует "http://schemas.microsoft.com/WebPart/v3" , что я считаю большинством из них, Zone ID не выставляется.

Для веб-частей, где вы не получаете идентификатор зоны, остается только получить содержимое страницы с помощью веб-службы GetWebPartPage и проанализировать его. На странице у вас будут элементы веб-частей внутри элементов "WebPartPages:WebPartZone" (каждый из которых представляет другую зону). Эти элементы веб-части имеют идентификатор веб-части, а также ZoneID в своем основном узле XML. Таким образом, вы можете использовать регулярное выражение, чтобы выловить его. Вот очень простое регулярное выражение (убедитесь, что вы установили параметр без учета регистра в любой среде, в которой вы это используете):

ZoneID="(.*?)".*?0a32c6f6-ee05-4c8e-ba7a-587c0c67c382

person Serital    schedule 26.10.2015