Обработчик событий SharePoint 2010 (получатель) не работает на личных сайтах семейства сайтов MySites - PullRequest
1 голос
/ 17 октября 2011

MySites SharePoint 2010 настроен на собственное веб-приложение.Существует стандартное семейство сайтов на базовом уровне: http://site:80/.

Персональные сайты для каждого пользователя находятся по управляемому URL-адресу /personal/.

У меня есть рабочий обработчик событий, который добавляетэлементы в новостной ленте, когда пользователь добавляет что-то в библиотеку изображений.

ПРОБЛЕМА: Проблема в том, что это работает, только если они добавляют в библиотеку изображений в базовом семействе сайтов, http://site:80/, и НЕ работает, если они добавляют в http://site:80/personal/last first/.

Кто-нибудь знает почему?Функция обработчика событий имеет область действия site, и я понимаю, что она должна работать на всех дочерних сайтах.

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Проблема в том, что персональные сайты не дочерние сайты хоста My Site.Фактически, личный сайт каждого пользователя является самостоятельным семейством сайтов.Поэтому в основном вам необходимо зарегистрировать приемник событий не только для хоста My SIte, но и для личного сайта каждого пользователя.

0 голосов
/ 25 октября 2011

Хорошо.Поскольку к определениям сайтов, которые будут предоставлены в будущем, можно «только прикреплять» функции, вам нужен способ активировать новые функции на существующих сайтах.

Итак, обнаруженное и использованное мной исправление следующее:

Страница по умолчанию для новостной ленты - http://site:80/default.aspx.Если вы создадите приемник событий и включите его в область «сайт» и развернете его глобально или в этом веб-приложении, он будет работать с базовым семейством сайтов.Каждый личный сайт является семейством сайтов и имеет функцию, но его необходимо активировать в каждом личном семействе сайтов.

Итак, на странице 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, чтобы разрешить запуск встроенного кода для этой страницы.Надеюсь, это поможет.

...