Frage

Ich habe einen neuen Inhaltstyp für eine Wiki-Seite Bibliothek. Ich habe diese Inhaltstyp-Bibliothek mit dem Code (die Schnittstelle hat dies nicht zulassen). Als nächstes fügte ich einen Ereignisempfänger auf diesen Inhaltstyp (auf ItemAdded und ItemAdding). Mein Problem ist, dass kein Ereignis trrigered ist. Wenn ich diese Ereignisse direkt auf die Seite Bibliothek Wiki alles funktioniert gut. Gibt es eine Begrenzung / bug / Trick?

ich auf dem Inhaltstyp schaute in die Bibliothek gebunden mit Sharepoint-Manager und in seinem Schema der Teil für Ereignisempfänger fehlt ... Ich weiß, dass es so etwas sein:

<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>

Wenn ich sehe mit SPM auf die Inhaltstyp-Website habe ich diesen Teil in Schema zu sehen.

Hier ist mein Code:

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

Thx!

War es hilfreich?

Lösung

Ich bin nicht sicher, aber könnten Sie versuchen, den Ereignisempfänger an den Inhaltstyp hinzufügen, bevor Sie den Inhaltstyp zu der Liste hinzufügen.

Ich denke, der Ereignisempfänger hinzugefügt werden, bevor, denn wenn ein Inhaltstyp zu einer Liste hinzugefügt der Inhaltstyp nicht direkt in die Liste aufgenommen, sondern eine Kopie davon in die Liste aufgenommen wird. Also, wenn Sie Ihren Content-Typ in die Liste aufnehmen, gibt es keinen Ereignisempfänger vor.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top