문제

기존 솔루션의 기존 목록에 대한 항목 업데이트 이벤트를 만들어야합니다. 방금 확인했고 이미 기능이 있습니다. 여기 에이 유형의 업그레이드는 기능 업그레이드를 만들어야합니까?

또는 솔루션 만 업데이트 + 코드 작성은 트릭을 수행합니까?

도움이 되었습니까?

해결책

기능 업그레이드를 사용하여 새 EventReceiver를 등록해야합니다.

코드를 작성하는 것은 eventReceiver를 사용하여 EventReceiver를 호출 할 수있는 eventReceiver를 호출하지 않고 올바른 eventReceivers 컬렉션에서 새 요소를 만들어 코드를 통해 해당하는 EventReceiver를 호출해야합니다

다음 예제는 Verion 7.0.0.0으로 업그레이드하고자합니다.

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);
.

다른 팁

기능이 업그레이드 상태를 입력하면 기능이 시작 되며이 기능이 업그레이드를 위해 만료되는 경우에만 트리거됩니다 (즉, 설치된 버전이 활성화 된 버전보다 큰 경우).

chris O'Brien의 블로그 시리즈가 기능 업그레이드에 대한 읽기를 통해 기능 업그레이드가 어떻게 작동하는지 더 많은 이해를 얻으려면 http://www.sharepointsandbolts.com/2010/06/feature-upgrade-part-1-fundamendals.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top