7

के साथ सूची के लिए ईवेंट रिसीवर कैसे जोड़ सकता हूं मैं कस्टम सूची टेम्पलेट के लिए आइटम एडिंग ईवेंट रिसीवर जोड़ रहा हूं। दोनों घटना रिसीवर और सूची टेम्पलेट एक ही सुविधा द्वारा तैनात किए जाते हैं। साथ ही वही सुविधा सूची उदाहरण बनाता है।मैं केवल specyfic टेम्पलेट आईडी

मुझे मिली समस्या यह है कि यह ईवेंट प्रत्येक सूची आइटम पर तैनात किया गया था, जिस पर इसे तैनात किया गया था। eventreceivre के लिए Elements.xml है:

<Receivers ListTemplateId="10200"> 
    <Receiver> 
    <Name>ListEventReceiverItemAdding</Name> 
    <Type>ItemAdding</Type> 
    <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly> 
    <Class>SharepoitProject.ListEventReceiver</Class> 
    <SequenceNumber>10000</SequenceNumber> 
    </Receiver> 
</Receivers> 

मुझे यकीन है कि मैं गलत मैं here से अधिक या कम everythin किया है क्या कर रहा नहीं हूँ।

पर्यावरण: SharePoint 2010 इस साइट

+0

क्या आपका मतलब यह है कि प्रत्येक सूची के लिए प्रत्येक सूची आइटम के लिए इसे निकाल दिया जाता है? –

+0

मेरा मतलब है कि जब साइट पर कुछ सूची में कुछ आइटम जोड़ा जाता है (आवश्यक रूप से टेम्पलेट 10200 से बनाई गई सूची नहीं) तो ईवेंट निकाल दिया जाता है। –

+0

अजीब, लगता है जैसे आपने इसे सही किया है .. एक नई साइट संग्रह पर सुविधा को सक्रिय करने का प्रयास करें। बस यह सुनिश्चित करने के लिए कि यह विकास के दौरान सभी सूचियों से जुड़ा हुआ नहीं था। –

उत्तर

13

मुझे अपने इवेंट रिसीवर के साथ एक ही समस्या थी। मैंने ListTemplateId, ListTemplateOwner, और यहां तक ​​कि ListUrl की कोशिश की। मुझे पता था कि सेटिंग्स वैध थीं, लेकिन उन्हें अनदेखा किया जा रहा था और रिसीवर प्रत्येक सूची से जुड़ा हुआ था।

मुझे एक झटका था कि यह एक साइट स्कोप्ड फीचर के भीतर घोषित इवेंट रिसीवर से संबंधित हो सकता है। यह SPEventElement के लिए "documentation" से इसकी पुष्टि होने लगता है:

switch (this.FeatureDefinition.Scope) 
    { 
    case SPFeatureScope.Site: 
     if (this.SiteScopedReceivers()) 
     { 
     this.UpdateEventReceiversForSite(site, sqlcmdAppendOnly, new SPEventElement.GetSqlToUpdateEventReceiversForSite(this.GetEventReceivers(site.RootWeb).GetSqlToAddEventReceiversToSite)); 
     break; 
     } 
     else 
     { 
     this.UpdateEventReceiversForWeb(site.RootWeb, sqlcmdAppendOnly, new SPEventElement.GetSqlToUpdateEventReceiversForWeb(this.GetEventReceivers(site.RootWeb).GetSqlToAddEventReceiversToWeb)); 
     break; 
     } 
    case SPFeatureScope.Web: 
     if (this.RootWebOnly && !web.IsRootWeb) 
     { 
     ULS.SendTraceTag(1718513714U, (ULSCatBase) ULSCat.msoulscat_WSS_General, ULSTraceLevel.Verbose, "Event Receivers in Feature '{0}' were not activated because current web is not the root web.", new object[1] 
     { 
      (object) this.FeatureDefinition.Id.ToString("B") 
     }); 
     break; 
     } 
     else 
     { 
     bool templateIdExists; 
     int templateId; 
     this.CheckTemplateId(out templateIdExists, out templateId); 
     if (!templateIdExists) 
     { 
      if (this.ListUrl != null) 
      { 
      this.UpdateEventReceiversForList(web, sqlcmdAppendOnly, new SPEventElement.GetSqlToUpdateEventReceiversForList(this.GetEventReceivers(web).GetSqlToAddEventReceiversToList), true); 
      break; 
      } 
      else 
      { 
      this.UpdateEventReceiversForWeb(web, sqlcmdAppendOnly, new SPEventElement.GetSqlToUpdateEventReceiversForWeb(this.GetEventReceivers(web).GetSqlToAddEventReceiversToWeb)); 
      break; 
      } 
     } 
     else 
     { 
      if (this.ListUrl != null) 
      throw new SPException(SPResource.GetString("ElementHasBothTemplateIdAndUrl", new object[0])); 
      this.UpdateEventReceiversForListTemplate(templateId, web, sqlcmdAppendOnly, new SPEventElement.GetSqlToUpdateEventReceiversForList(this.GetEventReceivers(web).GetSqlToAddEventReceiversToList)); 
      break; 
     } 
     } 
    } 

ऐसा लगता है कि ListTemplateId, ListTemplateOwner, और ListUrl अनदेखी कर रहे हैं साइट सुविधाओं scoped के लिए। जब मैंने अपना इवेंट रिसीवर तत्व वेब स्कोप्ड फीचर में ले जाया, तो रिसीवर केवल वांछित सूची में ही जुड़ा हुआ था।

+0

ईवेंट रिसीवर वेब स्कोप। अच्छा! –

2

MSDN एसडीके से पर प्रकाशन फ़ीचर के साथ - http://msdn.microsoft.com/en-us/library/ms431081.aspx


एक रिसीवर टैग एक साइट चौड़ा घटना पंजीकरण या एक घटना पंजीकरण मतलब कर सकते हैं रूट वेब के लिए। स्कोप विशेषता का उपयोग पर परिभाषित करने के लिए किया जाता है, ईवेंट रिसीवर किस स्तर पर लागू होता है। यदि रिसीवर टैग में ListTemplateId या ListUrl विशेषता, इवेंट रिसीवर फ़ीचर के समान दायरे में पंजीकृत है। उदाहरण के लिए, एक फ़ीचर जिसे पर स्कैन किया गया है, एक ईवेंट रिसीवर में वेब परिणाम किसी ईवेंट रिसीवर वेब पर स्कॉप्ड संग्रह में जोड़ा जा रहा है।


इस ओर जाता है मुझे विश्वास है कि सूची templateID अमान्य हो सकता है।

3

जब साइट पर स्कॉप्ड किया गया तो यह सभी सूचियों के लिए निकाल दिया गया। जब मैंने वेब पर समाधान को स्कॉप्ड किया तो यह काम करता था। आशा करता हूँ की ये काम करेगा।

1

आप भी गुंजाइश की जरूरत है विशिष्ट सूची के लिए घटना रिसीवर केवल इस विशेषता सेट करना होगा और यह ईसा कार्य करेगी, लेकिन सुनिश्चित करें कि आपके सुविधा वेब scoped नहीं साइट scoped जैसे कि यह साइट गुंजाइश इसके लिए सक्रिय कर देगा है कि बनाने के सिस्टम में सभी सूचियां

+2

ओपी कोड दिखाएं – dove

संबंधित मुद्दे