2010-11-08 35 views
0

Je dois ajouter une gestion personnalisée à l'événement d'ajout d'une liste. Cependant, l'événement ne semble pas déclencher. Je voudrais que mon gestionnaire personnalisé défini dans EventReceivers se déclenche chaque fois qu'un nouvel élément du type personnalisé est ajouté à la liste. J'apprécierais toutes les suggestions. Voici mon code:Substitution d'événements de liste de points de partage

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

}

Répondre

1

Après avoir activé la fonction, avez-vous vérifié si le récepteur d'événements ou non été jointe à la liste? Cela peut être fait par programmation ou en utilisant des outils tels que SharePoint Manager.