2017-09-21 7 views
0

Je dispose d'un récepteur d'événements mis à jour que je souhaite associer à seulement 2 bibliothèques de documents.associer 1 récepteur d'événements avec 2 bibliothèques de documents

Plus tôt, j'avais associé le récepteur d'événements à ListTemplateId = "101". Donc, ce récepteur d'événements tirait sur toutes les bibliothèques de documents! ce qui est quelque chose que je ne voulais pas mais je ne pouvais pas l'éviter proprement. Donc, comme une solution de contournement dans la première ligne de code, je vérifie la bibliothèque dans laquelle le récepteur d'événements est appelé et retourné si ce n'était pas la bibliothèque prévue.

Ensuite, je lis un peu récepteurs balises dans elements.xml et constaté que je peux enregistrer plusieurs récepteurs balises dans elements.xml. Donc, j'ai changé le elements.xml comme ci-dessous

<?xml version="1.0" encoding="utf-8"?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Receivers ListUrl="DocLib1"> 
    <Receiver> 
     <Name>EventReceiver1ItemAdded</Name> 
     <Type>ItemAdded</Type> 
     <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly> 
     <Class>NM1.EventReceiver1.EventReceiver1</Class> 
     <SequenceNumber>10000</SequenceNumber> 
     <Synchronization>Synchronous</Synchronization> 
    </Receiver> 
    </Receivers> 
    <Receivers ListUrl="DocLib2"> 
    <Receiver> 
     <Name>EventReceiver1ItemAdded</Name> 
     <Type>ItemAdded</Type> 
     <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly> 
     <Class>NM1.EventReceiver1.EventReceiver1</Class> 
     <SequenceNumber>10000</SequenceNumber> 
     <Synchronization>Synchronous</Synchronization> 
    </Receiver> 
    </Receivers> 
</Elements> 

Espérant que le récepteur d'événements sera associé à seulement ces 2 doc libs. Mais le fait est que le récepteur d'événements est attache uniquement DocLib1 (les premiers récepteurs à elements.xml)

Quelqu'un peut-il me guider si ce que je suis en train de réaliser sera possible avec l'approche que je suis suivant ou je devrais changer mon approche?

Merci

Amar

Répondre

0

J'avais essayé dur pour y parvenir En utilisant elements.xml mais je n'ai pas pu le faire en temps voulu, j'ai donc eu recours au code d'événement d'activation de fonctionnalité.

I fichier modifié elements.xml afin de ne pas associer cet événement à quoi que ce soit

<?xml version="1.0" encoding="utf-8"?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Receivers> 
    <Receiver> 
     <Name>EventReceiver1ItemAdded</Name> 
     <Type>ItemAdded</Type> 
     <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly> 
     <Class>NM1.EventReceiver1.EventReceiver1</Class> 
     <SequenceNumber>10000</SequenceNumber> 
     <Synchronization>Synchronous</Synchronization> 
    </Receiver> 
    </Receivers>  
</Elements> 

Et puis en cas de fixation à ma fonction i modifié l'événement FeatureActivated et écrit quelque chose comme ça

public override void FeatureActivated(SPFeatureReceiverProperties properties) 
     { 
      SPSite site = properties.Feature.Parent as SPSite; 
      using (SPWeb web = site.RootWeb) 
      { 
       web.Lists["DoocLib1"].EventReceivers.Add(SPEventReceiverType.ItemAdded, Assembly.GetExecutingAssembly().FullName, "NM1.EventReceiver1.EventReceiver1"); 
       web.Lists["DoocLib2"].EventReceivers.Add(SPEventReceiverType.ItemAdded, Assembly.GetExecutingAssembly().FullName, "NM1.EventReceiver1.EventReceiver1"); 

      } 
     } 

S'il vous plaît noter que la fonctionnalité devrait être portée à au moins Site pour que cela fonctionne.

Je continuerai à explorer les moyens d'y parvenir en utilisant elements.xml et de l'afficher quand j'ai une solution.

Merci

Amar

0

Il y a une bonne réponse à ce problème here.

Mais une autre solution rapide et sale serait de revenir à l'utilisation de votre elements.xml ListTemplateId = « 101 » dans un élément de récepteur unique, et envelopper votre logique dans ce qui suit:

if(properties.ListTitle == "List1" || properties.ListTitle == "List2") 
{ 
    // Your logic here. 
} 
+0

Ceci est une application existante, les doc libs contiennent déjà une grande quantité de données. Je ne suis pas trop à l'aise pour jouer avec eux dans la production. À propos de la deuxième solution que vous avez suggérée, je l'ai déjà implémentée (**) Pour contourner la première ligne de code, je vérifie la bibliothèque dans laquelle le récepteur d'événements est appelé et retourné s'il ne s'agit pas de la bibliothèque prévue.). – Amar