WikiPageLibraryに起動されないコンテンツタイプのイベントレシーバー

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

  •  20-09-2019
  •  | 
  •  

質問

私は、Wikiページライブラリ用の新しいコンテンツタイプを作成しました。私は(インターフェースがこれを許可していませんでした)コードによってライブラリにこのコンテンツタイプを追加しました。次に、私は(ItemAddedとItemAddingに)このコンテンツタイプにイベントレシーバを追加しました。私の問題は何もイベントがtrrigeredされていないということです。 私はWikiページライブラリに直接このイベントを追加した場合、すべてが正常に動作します。 制限/バグ/トリックはありますか?

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

Thxを!

役に立ちましたか?

解決

私はわからないんだけど、あなたはリストにコンテンツタイプを追加する前に、コンテンツタイプにイベントレシーバーを追加しようとすることができます。

私はイベントレシーバがリストにコンテンツタイプを追加するときにコンテンツタイプがリストに直接追加されていないため、前に追加する必要があると思い、それのではなくコピーがリストに追加されます。あなたのコンテンツタイプがリストに追加するときに、何のイベントレシーバはまだありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top