Отключить ссылки на профили личных сайтов в Sharepoint 2010 - PullRequest
1 голос
/ 26 января 2012

Я хотел бы использовать некоторые функции для совместной работы в Sharepoint 2010, такие как веб-часть Noteboard и теги, но не хочу использовать страницы профиля личного сайта.

Я уже создал пользовательский элемент управления, который перенаправляет со страницы userdisp.aspx на страницу пользовательского профиля. Я хотел бы продолжать использовать эту страницу пользовательского профиля. Однако, похоже, что ссылки на профили пользователей, сгенерированные веб-частью Noteboard, например, переходят непосредственно на страницу /Sites/MySites/person.aspx без перенаправления через страницу /_layouts/userdisp.aspx. Таким образом, мой контроль перенаправления профиля не ловит это.

В Sharepoint Central Admin в разделе «Управление приложениями-службами»> «Приложение-служба профилей пользователей»> «Управление разрешениями пользователей» я установил только флажок «Использовать социальные функции», а не «Создание личного сайта», поэтому я не уверен, почему профиль страница не ссылается на старую страницу userdisp.aspx.

Можно ли перенаправить эти ссылки обратно на страницу userdisp.aspx?

1 Ответ

1 голос
/ 28 января 2012

Похоже, что он жестко закодирован в веб-части.

Я посмотрел на Microsoft.SharePoint.Portal.WebControls.SocialCommentControl и ссылка взята с UserProfile.PublicUrl , который определяется как:

public override Uri PublicUrl
{
  get
  {
    string userProfileUrl = UserProfileGlobal.GetUserProfileURL(
        this.m_objManager.UserProfileApplicationProxy, 
        this.m_objManager.PartitionID, 
        "?accountname=", 
        this.m_UserProfileFields["AccountName"].ToString());
    if (!string.IsNullOrEmpty(userProfileUrl))
      return new Uri(userProfileUrl);
    else
      return (Uri) null;
  }
}

, который в конечном итоге вызывает:

internal static string GetUserProfileURL(string profileWebUrl, string strIdentifier, string strValue)
{
  if (string.IsNullOrEmpty(profileWebUrl))
    return (string) null;
  else
    return PersonalSpaceGlobal.EnsureTrailingSlash(profileWebUrl) 
        + "Person.aspx" 
        + strIdentifier 
        + (strIdentifier.Equals("?accountname=", StringComparison.OrdinalIgnoreCase) 
            ? SPHttpUtility.UrlKeyValueEncode(strValue).Replace(":", "%3A") 
            : SPHttpUtility.UrlKeyValueEncode(strValue));
}   

Я могу придумать два обходных пути:

  1. Добавьте jQuery на свою страницу, чтобы изменить URL-адрес (selector = span.socialcomment-username> a)
  2. Создайте собственную веб-часть, содержащую пользовательский элемент управления, наследуемый от SocialCommentControl, который переопределяет RenderComment .

Переопределение RenderComment, вероятно, будет грязным.Вам нужно будет скопировать декомпилированный код для метода, чтобы просто изменить следующее в свой собственный код:

SocialCommentControl._GetProperty(
    comment, 
    SocialCommentControl.SocialCommentProperty.PublicPage)

Надеемся, что в 67 строках кода RenderComment нет внутренних вызовов методов,Иначе это будет намного сложнее реализовать.Было бы намного проще, если бы вы могли просто переопределить _GetProperty , но, к сожалению, это статический метод.

Все это говорит о том, что я, вероятно, рекомендовал бы вариант jQuery вместо расширения SocialCommentControl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...