Обновления функции Sharepoint - PullRequest
1 голос
/ 06 января 2012

У меня есть следующее в моей feature.template.xml

...
 <VersionRange BeginVersion="1.0.0.1" EndVersion="1.0.0.2">
      <CustomUpgradeAction Name="1.0.0.1_TO_1.0.0.2"></CustomUpgradeAction>
    </VersionRange>
     <VersionRange BeginVersion="1.0.0.2" EndVersion="1.0.0.3">
      <CustomUpgradeAction Name="1.0.0.2_TO_1.0.0.3"></CustomUpgradeAction>
    </VersionRange>
...

Мое событие обновления функции выглядит следующим образом:

public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
        {
            using (SPSite site = (SPSite)properties.Feature.Parent)
            using (SPWeb mySite = site.RootWeb)
            {
                switch (upgradeActionName)
                {
                    case "1.0.0.1_TO_1.0.0.2":
                       //execute logicA
                       break;
                    case "1.0.0.2_TO_1.0.0.3":
                       //execute logicB
                       break;
                    default:
                       break;
                  }
             }

Правильно ли я сказал, что если сайт в настоящее время версии 1.0.0.0, он будет обновлен до версии 1.0.03, выполняя как logicA, так и logicB выше. Это означает, что sharepoint будет вызывать событие featureupgrading для каждого обновления версии. Это правильно? Или мне нужно сделать что-то другое, чтобы добиться этого?

У меня также есть следующие проблемы:

  • Что конкретно означают BeginVersion и EndVersion.
  • Я особенно не понимаю BeginVersion. Что произойдет, если вместо 1.0.0.2 я установлю и 1.0.0.1?

Любая помощь будет принята с благодарностью, так как я не нашел в интернете или книгах каких-либо полезных подробностей.

1 Ответ

3 голосов
/ 26 октября 2012

Когда вы добавляете новую функцию в свой проект VS SharePoint, Visual studio инициализирует вашу функцию с версией 0.0.0.0.
В окне свойств вы можете установить номер версии для вашей функции. Если вы хотите обновить существующую функцию, вам нужно будет определить диапазон версий, для которых вы хотите, чтобы ваши действия по обновлению (код, новый манифест, ...) происходили.

Например: вы развернули свою функцию без изменения номера версии. Ваша текущая развернутая функция имеет номер версии 0.0.0.0. Вы хотите обновить свою функцию и установить номер версии 2.0.0.0.

Если вы определяете диапазон версий следующим образом:

<VersionRange BeginVersion="1.0.0.0" EndVersion="2.0.0.0">

Вы заметите, что при вызове SPFeature.Upgrade () ничего не произойдет, поскольку 0.0.0.0 не находится в заданном диапазоне версий.

Если вы используете эту версию диапазона

<VersionRange EndVersion="2.0.0.0">

или

<VersionRange BeginVersion="0.0.0.0" EndVersion="2.0.0.0">

Вы заметите, что ваш приемник событий FeatureUpgrading или другие действия по обновлению будут запущены. Ваша обновленная функция теперь будет иметь номер версии 2.0.0.0.
Если вы снова вызовете SPFeature.Upgrade, ничего больше не произойдет, потому что 2.0.0.0 превышает определенный диапазон версий. Итак, BeginVersion включен, EndVersion нет.
Каждая функция с номером версии между [0.0.0.0 - 1.x.x.x] будет обновлена, если вы используете последние версии.

Я думаю, вы также можете полностью исключить атрибуты BeginVersion и EndVersion. Тогда ваши обновления будут запускаться при каждом вызове SPFeature.Upgrade (). (Подлежит проверке)

Для получения дополнительной информации: Крис О'Брайен написал интересную серию статей на эту тему, ср. http://www.sharepointnutsandbolts.com/2010/06/feature-upgrade-part-1-fundamentals.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...