#sharepoint #custom-controls #web-parts
#sharepoint #пользовательские элементы управления #веб-части
Вопрос:
У меня есть веб-часть, к которой я хотел бы добавить пользовательский значок. Я использую свойство CatalogIconImageUrl в схеме веб-части (допустим, значение _catalogs/masterpage/MyFolder/MyWebPartResources/MyWebPart_16x16.png).
Если я разверну веб-часть на своем сайте разработки, она правильно найдет путь.
Однако, если я развертываю веб-часть на многоуровневом сайте, она просто не находит URL. Например, если я развертываю веб-часть в семействе сайтов, например http://mysitecollection/SitePages / или личный сайт SP, например http://mysitecollection/my/personal/UserName /
Есть ли обходной путь для этого?
Ответ №1:
chris_walker предоставил мне эту помощь.
Я добавил приемник событий к этой функции. После этого я восстановил корень веб-приложения в методе активации функции. Наконец, я открыл схему webpart в виде текстового файла и заменил одно ключевое слово (~sitecollection ) на реальный URL семейства сайтов.
public class WebPartEventReceiver : SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties) {
SPSite site = properties.Feature.Parent as SPSite;
if (site != null) {
SPList webPartsGallery = site.GetCatalog(SPListTemplateType.WebPartCatalog);
SPListItemCollection allWebParts = webPartsGallery.Items;
SPListItem webPart = (from SPListItem wp in allWebParts where wp.File.Name == "your.webpart" select wp).SingleOrDefault();
if (webPart != null) {
string siteCollectionUrl = site.ServerRelativeUrl;
if (!siteCollectionUrl.EndsWith("/")) { siteCollectionUrl = "/"; }
string fileContents = Encoding.UTF8.GetString(webPart.File.OpenBinary());
fileContents = fileContents.Replace("~sitecollection/", siteCollectionUrl);
webPart.File.SaveBinary(Encoding.UTF8.GetBytes(fileContents));
}
}
}