كيف يمكنني إضافة جهاز استقبال الحدث فقط للحصول على قائمة مع معرف قالب specyfic

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

سؤال

أقوم بإضافة جهاز استقبال حدث ItemAdding لقالب قائمة مخصص. يتم نشر كل من استقبال الحدث وقوالب القائمة بواسطة نفس الميزة. أيضا نفس الميزة تنشئ مثيلات قائمة.

المشكلة التي لدي هي أن الحدث هو تم إطلاقه لكل عنصر قائمة في الموقع الذي تم نشره. elements.xml لـ EventReceivre هو:

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

لست متأكدًا مما أفعله خطأ ، لقد فعلت أكثر أو أقل من كل شيء هنا.

ENV: SharePoint 2010 مع ميزة النشر على هذا الموقع

هل كانت مفيدة؟

المحلول

واجهت نفس المشكلة مع جهاز استقبال الحدث الخاص بي. حاولت ListTemplateId و ListTemplateOwner وحتى Listurl. كنت أعلم أن الإعدادات كانت صالحة ، لكن تم تجاهلها وتم إرفاق جهاز الاستقبال بكل قائمة.

كان لدي حدس بأنه قد يكون مرتبطًا بمستقبل الحدث الذي يتم الإعلان عنه ضمن ميزة تحديد الموقع. يبدو أن هذا يؤكد من قبل "توثيق" للسباق:

  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 على شبكة الإنترنت ، تم إرفاق جهاز الاستقبال بشكل صحيح فقط بالقائمة المطلوبة.

نصائح أخرى

عندما تحطمت إلى موقع أطلق النار لجميع القوائم. عندما قمت بتحديد الحل ل الويب انها عملت. أتمنى أن يساعد ذلك.

من MSDN SDK - http://msdn.microsoft.com/en-us/library/ms431081.aspx


يمكن أن تعني علامة الاستقبال تسجيلًا على مستوى الموقع أو تسجيل حدث لشبكة الجذر. يتم استخدام سمة النطاق لتحديد المستوى الذي يتم تطبيق مستقبلات الأحداث. إذا لم يكن لدى علامة الاستقبال سمة ListTemplateId أو Listurl ، فسيتم تسجيل جهاز استقبال الحدث في نفس النطاق مثل الميزة. على سبيل المثال ، ينتج عن الميزة التي يتم تحديدها إلى شبكة الإنترنت أن يتم إضافة جهاز استقبال الأحداث إلى مجموعة مستقبل الأحداث التي تم تحديدها إلى الويب.


هذا يقودني إلى الاعتقاد بأن TemplateId القائمة التي قدمتها قد تكون غير صالحة.

إذا كنت بحاجة إلى SCOPE للغاية ، فإن جهاز استقبال الحدث للحصول على قائمة محددة فقط ، يجب عليك تعيين هذه السمة وسيعمل ISA ولكن تأكد من أن الميزات الخاصة بك قد تم تحديد موقع الويب الخاص بك كما لو كانت نطاق الموقع ستطلق النار على جميع القوائم في النظام

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top