Wikipagelibrary에서 트리거되지 않은 콘텐츠 유형의 이벤트 수신기
-
20-09-2019 - |
문제
Wiki Page 라이브러리를위한 새 컨텐츠 유형을 만들었습니다. 코드 별로이 컨텐츠 유형을 라이브러리에 추가했습니다 (인터페이스가 허용되지 않았습니다). 다음 으로이 컨텐츠 유형에 이벤트 수신기를 추가했습니다 (ItemAdded 및 ItemAdding). 내 문제는 이벤트가 없다는 것입니다. 이 이벤트를 위키 페이지 라이브러리에 직접 추가하면 모두 잘 작동합니다. 제한/버그/트릭이 있습니까?
SharePoint Manager와 함께 라이브러리에 첨부 된 콘텐츠 유형을 살펴보고 이벤트 수신기의 부품이 누락되었습니다 ... 다음과 같은 것이 있어야합니다.
<XmlDocuments>
<XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/events">
<spe:Receivers xmlns:spe="http://schemas.microsoft.com/sharepoint/events">
<Receiver>
<Name>
</Name>
<Type>1</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>RssFeedWP, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f6722cbeba696def</Assembly>
<Class>RssFeedWP.ItemEventReceiver</Class>
<Data>
</Data>
<Filter>
</Filter>
</Receiver>
<Receiver>
<Name>
</Name>
<Type>10001</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>RssFeedWP, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f6722cbeba696def</Assembly>
<Class>RssFeedWP.ItemEventReceiver</Class>
<Data>
</Data>
<Filter>
</Filter>
</Receiver>
</spe:Receivers>
</XmlDocument>
SPM으로 사이트에 추가 된 컨텐츠 유형을 보면이 부분이 스키마에 표시됩니다.
내 코드는 다음과 같습니다.
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
using (SPWeb web = (SPWeb)properties.Feature.Parent)
{
// create RssWiki content type
SPContentType rssFeedContentType = new SPContentType(web.AvailableContentTypes["Wiki Page"],
web.ContentTypes, "RssFeed Wiki Page");
// add rssfeed url field to the new content type
AddFieldToContentType(web, rssFeedContentType, "RssFeed Url", SPFieldType.Note);
// add use xslt check box field to the new content type
AddFieldToContentType(web, rssFeedContentType, "Use Xslt", SPFieldType.Boolean);
// add xslt url field to the new content type
AddFieldToContentType(web, rssFeedContentType, "Xslt Url", SPFieldType.Note);
web.ContentTypes.Add(rssFeedContentType);
rssFeedContentType.Update();
web.Update();
AddContentTypeToList(web, rssFeedContentType);
AddEventReceiversToCT(rssFeedContentType);
//AddEventReceiverToList(web);
}
}
private void AddFieldToContentType(SPWeb web, SPContentType ct, string fieldName, SPFieldType fieldType)
{
SPField rssUrlField = null;
try
{
rssUrlField = web.Fields.GetField(fieldName);
}
catch (Exception ex)
{
if (rssUrlField == null)
{
web.Fields.Add(fieldName, fieldType, false);
}
}
SPFieldLink rssUrlFieldLink = new SPFieldLink(web.Fields[fieldName]);
ct.FieldLinks.Add(rssUrlFieldLink);
}
private static void AddContentTypeToList(SPWeb web, SPContentType ct)
{
SPList wikiList = web.Lists[listName];
wikiList.ContentTypesEnabled = true;
wikiList.ContentTypes.Add(ct);
wikiList.Update();
}
private static void AddEventReceiversToCT(SPContentType ct)
{
//add event receivers
string assemblyName = System.Reflection.Assembly.GetExecutingAssembly().FullName;
string ctReceiverName = "RssFeedWP.ItemEventReceiver";
ct.EventReceivers.Add(SPEventReceiverType.ItemAdding, assemblyName, ctReceiverName);
ct.EventReceivers.Add(SPEventReceiverType.ItemAdded, assemblyName, ctReceiverName);
ct.Update();
}
고마워 !
해결책
확실하지 않지만 컨텐츠 유형을 목록에 추가하기 전에 이벤트 수신기를 컨텐츠 유형에 추가하려고 시도 할 수 있습니다.
목록에 컨텐츠 유형을 추가 할 때 컨텐츠 유형이 목록에 직접 추가되지 않고 목록에 추가되기 때문에 이벤트 수신기를 추가해야한다고 생각합니다. 따라서 콘텐츠 유형을 목록에 추가하면 아직 이벤트 수신기가 없습니다.
제휴하지 않습니다 StackOverflow