استقبال الحدث على نوع المحتوى لا تسبب على WikiPageLibrary

StackOverflow https://stackoverflow.com/questions/2462768

  •  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();
    }

وتشك!

هل كانت مفيدة؟

المحلول

ولست متأكدا، ولكن هل يمكن أن محاولة إضافة المتلقي الحدث لنوع المحتوى قبل إضافة نوع المحتوى إلى القائمة.

وأعتقد أن مستقبل الحدث المراد إضافتها من قبل لأن عند إضافة نوع المحتوى إلى قائمة عدم إضافة نوع المحتوى مباشرة إلى القائمة، بدلا يضاف نسخة منه إلى القائمة. حتى عند إضافة نوع المحتوى الخاص بك إلى قائمة، لا يوجد استقبال الحدث حتى الان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top