2012-01-26 11 views
1

Shareboard 2010のソーシャルコラボレーション機能(ノートボードのWebパーツやタグ付けなど)を利用したいが、My Siteプロファイルページは使用しない。Sharepoint 2010の個人用サイトのプロファイルへのリンクを無効にする

私は既に、userdisp.aspxページからカスタムユーザープロファイルページにリダイレクトするカスタムコントロールを作成しました。そのカスタムプロファイルページを引き続き使用したいと思います。しかし、Noteboard Webパーツによって生成されるユーザープロファイルリンクのように見えます。たとえば、/_layouts/userdisp.aspxページを経由せずに直接/Sites/MySites/person.aspxページに移動します。だから私のプロファイルのリダイレクトコントロールはそれをキャッチしません。

Sharepoint Central Adminの[サービスアプリケーションの管理]> [ユーザープロファイルサービスアプリケーション]> [ユーザーアクセス許可の管理]で、[個人用サイトの作成]ではなく[ソーシャル機能の使用]のチェックボックスをオンにしました。プロファイルページは古いuserdisp.aspxページにリンクしていません。

これらのリンクをuserdisp.aspxページにリダイレクトすることはできますか?

答えて

1

これはwebpartにハードコードされているようです。

I Microsoft.SharePoint.Portal.WebControls.SocialCommentControllookedとリンクは以下のように定義される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; 
    } 
} 

    :私は2つの回避策を考えることができ

    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を変更する(セレクタ= span.socialcomment-username > a)
  2. RenderCommentを上書きするSocialCommentControlから継承するカスタムコントロールを含む独自のWebパーツを作成します。

RenderCommentをオーバーライドするのはおそらく面倒です。あなただけの独自のコードに次のように変更する方法のためdecompiledコードをコピーする必要があります。

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

うまくいけば、コードのRenderCommentの67行以内に内部メソッド呼び出しはありません。それ以外の場合は、実装するのがさらに難しくなります。 _GetPropertyを単純に上書きできるのは簡単ですが、残念なことに静的メソッドです。

もちろん、SocialCommentControlを拡張するよりjQueryのオプションをお勧めします。

+0

リッチレスポンスありがとうございます。私はこれをもっと早く見たいと思っていますが、stackoverflowからの私の電子メール通知が機能しなくなったようです...私はjQueryルートを試すことにしました。私は "accountname"クエリパラメータを処理するために私の既存のリダイレクトコントロールを変更し、jQueryを使用してurlをuserdisp.aspxページにリダイレクトしようとしています。どのように動作するか教えてあげます。助けてくれてありがとう! –

+0

Rich、_GetPropertyをオーバーライドできますか?私はそれがバーチャル、抽象的な、または上書きされていないことを示すエラーが表示されます。継承されたコントロールとしてそれを "上書き"する他の方法をご存知ですか?私はそのアイデアがページ上のすべてのスパンやリンクをトローするよりも好きです。 – Paul

+0

@ P-Dub:私は何を考えていたのか分かりません。静的メソッドをオーバーライドすることはできません。だからこれはきれいでシンプルではありません。 _GetPropertyの代わりにRenderCommentをオーバーライドするために私の答えを変更しました。 –

関連する問題