استقبال الحدث على نوع المحتوى لا تسبب على WikiPageLibrary
-
20-09-2019 - |
سؤال
وأنا خلقت نوع محتوى جديد لمكتبة صفحة ويكي. وأضاف لي هذا نوع المحتوى إلى المكتبة من قبل الرمز (لم واجهة لا يسمح بذلك). بعد ذلك، أضفت جهاز استقبال الحدث لهذا النوع المحتوى (على ItemAdded وItemAdding). مشكلتي هي أن trrigered أي حال من الأحوال. إذا أضيف هذا الأحداث مباشرة إلى المكتبة صفحة ويكي كل يعمل بشكل جيد. هل هناك وجود قيود / علة / خدعة؟
ونظرت إلى نوع المحتوى تعلق على مكتبة مع SharePoint مدير وفي مخطط له من جانب لاستقبال الحدث مفقود ... وأنا أعلم أنه ينبغي أن يكون هناك شيء من هذا القبيل:
<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();
}
وتشك!
المحلول
ولست متأكدا، ولكن هل يمكن أن محاولة إضافة المتلقي الحدث لنوع المحتوى قبل إضافة نوع المحتوى إلى القائمة.
وأعتقد أن مستقبل الحدث المراد إضافتها من قبل لأن عند إضافة نوع المحتوى إلى قائمة عدم إضافة نوع المحتوى مباشرة إلى القائمة، بدلا يضاف نسخة منه إلى القائمة. حتى عند إضافة نوع المحتوى الخاص بك إلى قائمة، لا يوجد استقبال الحدث حتى الان.