Переопределение событий списка sharepoint - PullRequest
0 голосов
/ 08 ноября 2010

Мне нужно добавить пользовательскую обработку в событие добавления списков.Тем не менее, событие не похоже на стрельбу.Я бы хотел, чтобы мой пользовательский обработчик, определенный в EventReceivers, запускался каждый раз, когда в список добавлялся новый элемент пользовательского типа.Буду признателен за любые предложения.Вот мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;

namespace MyTestGroupListFeature
{
    class MyTestGroupListFeature : SPFeatureReceiver
    {
        private const string LISTNAME = "Acquisition Groups";
        private const string CONTENTTYPE_LISTNAME = "Contenttype List";
        private const string FOO = "FOO";
        private const string SITE_TEMPLATE_EXTENSION = ".stp";
    public override void FeatureInstalled
      (SPFeatureReceiverProperties properties)
    {
    }

    public override void FeatureUninstalling
       (SPFeatureReceiverProperties properties)
    {
        FeatureDeactivating(properties);
    }

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        try
        {
            SPWeb web = properties.Feature.Parent as SPWeb;
            SPList list = GetList(web, LISTNAME);
            SPSite site = web.Site;
            site.AllowUnsafeUpdates = true;

            SPContentType newCType = CreateSourceSystemContentType(web);
            SPList listct = web.Lists[CONTENTTYPE_LISTNAME];
            AddEventReceiverToList(listct);
            AddContentTypeToList(web, listct, newCType);
        }
        catch       {  }
    }
    /// <summary>
    /// Creates a content type for Source System
    /// </summary>
    private SPContentType CreateSourceSystemContentType(SPWeb site)
    {
        //Create site columns
        string acronymFieldName = site.Fields.Add("Acronym", SPFieldType.Text, true);
        SPFieldText acronymField = (SPFieldText)site.Fields.GetFieldByInternalName(acronymFieldName);
        acronymField.Group = "AQSIDM Columns";
        acronymField.Update();
        string nameFieldName = site.Fields.Add("Name", SPFieldType.Text, true);
        SPFieldText nameField = (SPFieldText)site.Fields.GetFieldByInternalName(nameFieldName);
        acronymField.Group = "AQSIDM Columns";
        acronymField.Update();
        string descriptionFieldName = site.Fields.Add("Description", SPFieldType.Text, true);
        SPFieldText descriptionField = (SPFieldText)site.Fields.GetFieldByInternalName(descriptionFieldName);
        descriptionField.Group = "AQSIDM Columns";
        descriptionField.Update();
        // Get the parent content type. 
        SPContentTypeId itemCTID = new SPContentTypeId("0x01");
        SPContentType itemCT = site.AvailableContentTypes[itemCTID];
        //Create SourceSystem content type:
        SPContentType sourceSystemCT = new SPContentType(itemCT, site.ContentTypes, "Source System");
        sourceSystemCT.Group = "Source System Content Types";

        //Add columns to content type
        sourceSystemCT = site.ContentTypes[sourceSystemCT.Id];
        SPFieldLink acronymLink = new SPFieldLink(acronymField);
        sourceSystemCT.FieldLinks.Add(acronymLink);
        //
        SPFieldLink nameLink = new SPFieldLink(nameField);
        sourceSystemCT.FieldLinks.Add(nameLink);
        //
        SPFieldLink descriptionLink = new SPFieldLink(descriptionField);
        sourceSystemCT.FieldLinks.Add(descriptionLink);
        //
        //sourceSystemCT.Update();
        string assemblyName = System.Reflection.Assembly.GetEntryAssembly().FullName;
        string ctReceiverName = "MyTestGroupListFeature.EventReceivers";
        sourceSystemCT.EventReceivers.Add(SPEventReceiverType.ItemAdding, assemblyName, ctReceiverName);
        sourceSystemCT.Update(true);
        site.ContentTypes.Add(sourceSystemCT);
        return sourceSystemCT;
    }
    /// <summary>
    /// Adds a custom content type to site's list
    /// </summary>
    private void AddContentTypeToList(SPWeb web, SPList list, SPContentType ct)
    {
        list.ContentTypesEnabled = true;
        list.ContentTypes.Add(ct);
        list.Update();
        // Add the item:
        SPListItem newItem = list.Items.Add();
        newItem["Acronym"] = "Acronym Field Added";
        newItem.Update();
    }
    /// <summary>
    /// Programmatically add new event receivers
    /// </summary>
    private void AddEventReceiverToList(SPList list)
    {
        System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
        SPEventReceiverDefinition eventReceiver = list.EventReceivers.Add();
        eventReceiver.Name = "On Updating";
        eventReceiver.Type = SPEventReceiverType.ItemAdding;
        eventReceiver.SequenceNumber = 200;
        eventReceiver.Assembly = assembly.FullName;
        eventReceiver.Class = "MyTestGroupListFeature.EventReceivers";
        eventReceiver.Update();
    }


}

class EventReceivers : SPItemEventReceiver
{
    /// <summary>
    /// Test behavior when adding an item
    /// </summary>
    public override void ItemAdding(SPItemEventProperties properties)
    {
        base.ItemAdding(properties);
        SourceSystem ss = new SourceSystem();
        ss.Name = "sharepointss";
        ss.Acronym = "sharepoint acronym";
        ss.Description = "desc";
        ss.EndPoint = new Uri(@"\testURI");
        ss.Update("foo");
        ss.Create(String.Format("SourceSystem_Create_SP_{0:o}", DateTime.Now));
    }
}

}

1 Ответ

1 голос
/ 09 ноября 2010

После того, как вы активировали эту функцию, вы проверяли, был ли получатель события присоединен к списку? Это можно сделать программно или с помощью таких инструментов, как SharePoint Manager.

...