Обновление функций, новый приемник предметов

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/42445

  •  09-12-2019
  •  | 
  •  

Вопрос

Мне нужно создать событие обновления элемента для существующего списка в существующем решении Я только что проверил, и для этого уже есть функция, вопрос здесь в том, нужно ли для этого типа обновления создавать обновление функции?

Или только обновление решения + создание кода сделают свое дело?

Это было полезно?

Решение

Вы должны использовать Обновление функции для регистрации нового EventReceiver.

Простое создание кода не заставит SharePoint вызывать EventReceiver вы должны сделать это в любом Elements.xml файле, используя <Receivers> элемент или с помощью кода путем создания нового элемента в нужной коллекции EventReceivers

В следующих примерах предположим, что вы обновляетесь до версии 7.0.0.0.

CAML
Чтобы добавить приемник событий в CAML, ваш feature.xml должен быть чем-то вроде:

<?xml version="1.0" encoding="utf-8" ?>
<Feature ... Version="7.0.0.0">
  <UpgradeActions>
    <VersionRange BeginVersion="0.0.0.0" EndVersion="7.0.0.0">
      <ApplyElementManifests>
        <ElementManifest Location="MyNewEventReceiver\Elements.xml" />
      </ApplyElementManifests>
    </VersionRange>
  <UpgradeActions>
  ...
  <ElementManifest Location="MyNewEventReceiver\Elements.xml" />
</Feature>

При этом новый параметр Elements.xml применяется как при обновлении, так и при новых активациях

Код
Чтобы добавить приемник событий в код, ваш feature.xml должен быть чем-то вроде:

<?xml version="1.0" encoding="utf-8" ?>
<Feature ...   ReceiverAssembly="XXX" ReceiverClass="YYY" Version="7.0.0.0">
  <UpgradeActions>
    <VersionRange BeginVersion="0.0.0.0" EndVersion="7.0.0.0">
      <CustomUpgradeAction Name="AddNewEventReceiver" />
    </VersionRange>
  <UpgradeActions>
  ...
</Feature>

И в FeatureReceiver у вас будет код типа:

public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
{
  SPWeb parentWeb = (SPWeb)properties.Feature.Parent;
  switch (upgradeActionName)
  {
    case "AddNewEventReceiver":
      // Add EventReceiver;
      break;
    ...
  }
}

public override virtual void FeatureActivated(SPFeatureReceiverProperties properties)
{
  SPWeb parentWeb = (SPWeb)properties.Feature.Parent;
  ...
  // Add EventReceiver;
  ...
}

public override virtual void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
  SPWeb parentWeb = (SPWeb)properties.Feature.Parent;
  ...
  // Remove EventReceiver;
  ...
}

При этом код для добавления EventReceiver запускается при обновлении с ActionName = "AddNewEventReceiver", а также при новых активациях.И, конечно же, удаление его при деактивации.

Чтобы добавить EventReceiver в код, используйте что-то вроде:

parentWeb.Lists[_listName].EventReceivers.Add(_eventType, Assembly.GetExecutingAssembly().FullName, _eventReceiverClassName);

Другие советы

Функция обновления уволена, когда функция входит в состояние обновления, и это срабатывает только в том случае, если функция должна обновляться (т. Е. Установленная версия больше, чем у активированной версии).

Прочитайте через серию блога блога Криса О'Брайена о обновлении функции, чтобы получить больше понимания, как работает обновление функций: http://www.sharepointnutsandbolts.com/2010/06/feature-upgrade-part--fundamentals.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top