1

我在自己的 Web 应用程序上设置了 SharePoint 2010 MySites。基础级别有标准网站集,http://site:80/.

每个用户的个人网站都位于托管 URL/personal/上。

我有一个工作事件处理程序,当用户向图片库添加内容时,它会将项目添加到新闻源。

问题:问题是,这仅在他们添加到基本网站集的图片库时才有效,http://site:80/如果他们添加到http://site:80/personal/last first/.

有谁知道为什么?事件处理程序功能是有site范围的,我的理解是它应该适用于所有子站点。

4

2 回答 2

1

问题是个人网站不是我的网站主机的子网站。事实上,每个用户的个人网站都是一个独立的网站集。因此,基本上您不仅需要为 My Site 主机注册事件接收器,还需要为每个用户的个人站点注册事件接收器。

于 2011-10-17T16:39:07.457 回答
0

行。因为您只能将功能“装订”到将在未来提供的站点定义中,所以您需要一种方法来激活现有站点上的新功能。

因此,我发现并使用的修复方法如下:

新闻源的默认页面是http://site:80/default.aspx. 如果您创建一个事件接收器并将其范围用于“站点”并将其部署到全局或该 Web 应用程序,那么它将在基本站点集合上工作。每个个人网站都是一个网站集并具有该功能,但需要在每个个人网站集上激活它。

因此,在 default.aspx 页面中,您放置以下内容,如果该功能尚未激活,它将激活该功能。

<script runat="server" type="text/c#">
protected override void OnLoad(EventArgs e) {
  base.OnLoad(e);

  String sAccount = (((SPWeb)((SPSite)SPContext.Current.Site).OpenWeb()).CurrentUser.LoginName).Split('\\')[1];
  String basePersonalURL = "http://site:80/personal/";
  String eventReceiverFeatureId = "12345678-1234-1234-1234-1234567890ab";

  using(SPSite site = new SPSite(basePersonalURL + sAccount)) {
    site.AllowUnsafeUpdates = true;
    using(SPWeb web = site.RootWeb) {
      web.AllowUnsafeUpdates = true;

      try { site.Features.Add(new Guid(eventReceiverFeatureId)); } catch {}

      web.AllowUnsafeUpdates = false;
    }
    site.AllowUnsafeUpdates = false;
  }
}
</script>

您还需要编辑 web.config 文件以允许内联代码为此页面运行。希望这可以帮助。

于 2011-10-25T12:49:27.517 回答