Ошибка при обновлении веб-части - PullRequest
0 голосов
/ 02 января 2012

Я разрабатываю веб-часть, которую не могу обновить на сервере SharePoint, не удалив ее в галерее веб-частей.Затем я запускаю в Power Shell:

  • Update-SPSolution ...
  • Disable-SPFeature ...
  • Enable-SPFeature ...

Я попытался программно удалить веб-часть в галерее в приемнике событий, но это приводит к сбою SharePoint:

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            SPSite site = properties.Feature.Parent as SPSite;

            using (SPWeb web = site.RootWeb)
            {
                SPList list = web.Lists["Web Part Gallery"];

                // go through the items in reverse
                for (int i = list.ItemCount - 1; i >= 0; i--)
                {
                    // format name to look like a feature name
                    string webpartName = list.Items[i].Name;

                    webpartName = webpartName.Substring(0, webpartName.IndexOf('.'));

                    // delete web parts that have been added
                    if (properties.Feature.Definition.DisplayName == webpartName)
                    {
                        list.Items[i].Delete();

                        break;
                    }
                }
            }
        }

Есть идеи, что я делаю неправильно?ТНХ

1 Ответ

0 голосов
/ 25 января 2012

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

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        try
        {
            int ItemID = -1;
            using (SPSite oSite = (SPSite)(properties.Feature.Parent))
            {
                using (SPWeb oWeb = oSite.RootWeb)
                {
                    SPList oList = oWeb.Lists["Galerie de composants WebPart"];

                    if (oList == null)
                    {
                        // si SharePoint en anglais 
                        oList = oWeb.Lists["Web Part Gallery"];
                    }
                    // si oList == null, alors aucun de traitement
                    // on ne connais pas le nom de la liste 
                    // de la gallerie de web part
                    if (oList != null)
                    {
                        for (int i = 0; i < oList.ItemCount; i++)
                        {
                            if (oList.Items[i].Title.Equals(WebPartTitle))
                            {
                                ItemID = oList.Items[i].ID;
                                break;
                            }
                        }
                        if (ItemID != -1)
                        {
                            SPListItem oItem = oList.GetItemById(ItemID);
                            oItem.Delete();
                            oList.Update();
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            //will throw to and error page
            throw new Exception(String.Format("The has been an error "
            + "removing the WebPart from the Gallery; {0}", e.ToString()));
        }
    }

Наконец, после добавления этого кода в приемник событий процедура обновления решения веб-части выглядит следующим образом:

  • Disable-SPFeature ...

  • Uninstall-SPFeature ...

  • Update-SPSolution...

  • Install-SPFeature ...

  • Enable-SPFeature ...

Надеюсь, это поможет

...