Элемент функции неоднократно добавляется при каждой активации / деактивации функции - PullRequest
1 голос
/ 13 апреля 2010

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

Я создал очень, очень простую функцию 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?

EDIT Исходя из того факта, что я уже использовал Receiver для решения этой проблемы , я просто добавил удаление веб-части как часть деактивации функции. Но я все еще надеялся, что, может быть, мне чего-то не хватает.

Ответы [ 2 ]

2 голосов
/ 06 июля 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, который запускается только после создания сайта, поэтому у вас больше не будет этой проблемы при установке скрытых значений

.

Приветствия

1 голос
/ 14 апреля 2010

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

...