【问题标题】:Sharepoint 2010 Event receiver not firing for subsiteSharepoint 2010 事件接收器未触发子站点
【发布时间】:2013-07-01 21:17:00
【问题描述】:

我有一个事件接收器(WebAdding 和 WebProvisioned),它适用于从站点集的根目录创建的站点。但是,子站点(例如,在其他区域内创建的团队站点)根本不会触发代码。

有人知道为什么吗?

using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;
using System.Text;

namespace TestEventReceiver.EventReceiver1
{
  /// <summary>
  /// Web Events
  /// </summary>
  public class EventReceiver1 : SPWebEventReceiver
  {
    /// <summary>
    /// A site is being provisioned.
    /// </summary>
    public override void WebAdding(SPWebEventProperties properties)
    {
      base.WebAdding(properties);

      using (SPWeb web = properties.Web)
      { 
        StringBuilder output = new StringBuilder();
        output.AppendFormat("Web Adding");
        output.AppendFormat("<br>Web title: {0}",web.Title);
        SendMyEmail(web, "SendItToMe@MyTestAddress.com", "Web Adding", output.ToString());
      }
    }

    /// <summary>
    /// A site was provisioned.
    /// </summary>
    public override void WebProvisioned(SPWebEventProperties properties)
    {
      base.WebProvisioned(properties);
      using (SPWeb web = properties.Web)
      {
        StringBuilder output = new StringBuilder();
        output.AppendFormat("Web Provisioned");
        output.AppendFormat("<br>Web title: {0}", web.Title);
        SendMyEmail(web, "SendItToMe@MyTestAddress.com", "Web Provisioned", output.ToString());
      }
    }

    private void SendMyEmail(SPWeb Web, String toAddress, String subject, String message)
    {
      bool appendHtmlTag = false;
      bool htmlEncode = true;
      SPSecurity.RunWithElevatedPrivileges(delegate()
      {
        SPUtility.SendEmail(Web, appendHtmlTag, htmlEncode, toAddress, subject, message);
      });

    }

  }
}

提前致谢, 马特

【问题讨论】:

    标签: sharepoint-2010 eventreceiver


    【解决方案1】:

    我认为你不应该使用 'Using' 。 您获得的 SPWeb 对象引用来自正在传递给 WebAdding 方法的 properties.Web。你会因此遇到问题。

    【讨论】:

      【解决方案2】:

      看看您的事件接收器是如何配置的 - 可能需要将范围更改为站点而不是 Web。也许你可以在这里发帖让我们看看。

      【讨论】:

        【解决方案3】:

        在我的网站上,我遇到了同样的问题。仍在计算 xml 文件,但在我的接收器的 Elements.xml 文件中,每个接收器具有相同的序列号。一旦我使它们在 Elements.xml 文件中唯一,WebProvisioned 事件就会开始触发。不知道是不是和你一样的问题。

        【讨论】:

          【解决方案4】:

          此代码显示 WebAdding 事件,并且该事件正在父 Web 上发生。

          http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spwebeventreceiver.webadding.aspx

          【讨论】:

          • 嗨,布赖恩 - 感谢您的回复。但是,事件接收器应该同时触发 WebAdding 和 WebProvisioned 事件,但不会触发任何子站点。即使仅为 WebProvisioned enevt 创建了新的事件接收器,它仍然不会为子站点触发。
          • Matt,您能解释一下“子站点(例如,在其他区域内创建的团队站点)”吗?这些实际上是根级别网站集下的网站集。 (它们是否有托管路径 (servername/sites/sitecollectionName)。我认为它们实际上可能是新网站集的根网站,而这些事件不会在该级别触发。
          【解决方案5】:

          尝试更改接收器的范围(在 Elements.xml 文件中添加属性)。另外,请确保在子站点的站点功能中激活了事件接收器的功能。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多