Элемент функции повторно добавляется при каждой активации / деактивации функции

Это очень незначительное поведение по сравнению со всей областью видимости, но я бы хотел положить этому конец.

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

 <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <Module Name="Pass" Url="" Path="">
      <File Url="pasq.aspx" NavBarHome="True" Type="Ghostable">
        <AllUsersWebPart WebPartZoneID="Left" WebPartOrder="0">
                  <![CDATA[
                   WARGH THIS PART DOESN'T MATTER FOR THIS QUESTION!
                  ]]>
        </AllUsersWebPart>
      </File>
    </Module>
</Elements>

Теперь, когда я впервые развертываю и активирую эту функцию, она работает правильно. Но если мне нужно деактивировать, а затем повторно активировать эту функцию, чтобы исправить некоторые свойства в веб-части, я обнаружу, что на странице появляется вторая веб-часть. Естественно, что каждый подобный цикл будет только добавлять и больше. Я понимаю, что необходимо создать новую веб-часть, чтобы применить только что внесенные мной изменения, но почему старая веб-часть все еще находится на странице? Могу ли я автоматически удалить эту старую веб-часть в процессе активации / деактивации функции без использования класса Receiver?

ИЗМЕНИТЬ. Основываясь на том факте, что я уже использовал приемник для решить эту проблему, в итоге я просто добавил удаление веб-части как часть деактивации функции. Но я все еще надеялся, что, может быть, я чего-то упускаю.


person Grace Note    schedule 13.04.2010    source источник


Ответы (2)


SharePoint не предлагает декларативный способ (xml) для автоматического удаления элементов функций. Вам нужно будет добавить код в метод FeatureDeactiving на приемнике функций, чтобы удалить его программно, извините.

person x0n    schedule 14.04.2010
comment
Учитывая, что другие части манифеста элементов (типы контента, типы полей, рабочие процессы, настраиваемые действия) перестают существовать, когда функция деактивируется, я надеялся, что это будет согласованно. Твоего ответа достаточно, спасибо за помощь @ x0n - person Grace Note; 15.04.2010

К сожалению, содержимое будет повторяться, если вы не выполните одно из следующих действий:

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

SPFile file = page.File;
using (SPLimitedWebPartManager WebPartManager =
        file.GetLimitedWebPartManager(PersonalizationScope.Shared))
{
    try
    {
        SPLimitedWebPartCollection webparts = WebPartManager .WebParts;
        if (webparts.Count == 0)
        {
            //set your web part 
            WebPartManager.AddWebPart(webpart, "MomoZone", 1);
        }
    }
    catch(Exception ex)
    {
        throw;
    }
    finally
    {
        WebPartManager.Web.Dispose();
    }
}

Решение 2: вы можете использовать определение сайта с файлом Onet, который запускается только после создания сайта, поэтому у вас больше не будет этой проблемы при настройке ваших функций на скрытый

Ваше здоровье

person Mohamed Hachem    schedule 06.07.2010