CatalogIconImageUrl — пользовательский значок не работает должным образом с персональными сайтами SP

#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));
            }
        }
    }