기능 업그레이드, 새 항목 수신자
-
09-12-2019 - |
문제
기존 솔루션의 기존 목록에 대한 항목 업데이트 이벤트를 만들어야합니다. 방금 확인했고 이미 기능이 있습니다. 여기 에이 유형의 업그레이드는 기능 업그레이드를 만들어야합니까?
또는 솔루션 만 업데이트 + 코드 작성은 트릭을 수행합니까?
해결책
기능 업그레이드를 사용하여 새 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