2011-09-03 45 views
1

我想了解通過代碼擴展cqwp的機制。通過代碼擴展內容查詢Web部件

這可能很難相信,但我找不到一篇文章來創建從content by query web part繼承的Web部件。

我需要做的是在Web部件屬性中輸入listname。然後,所有的分組,排序和查詢將通過代碼實現,即擴展的Web部分。

我讀過waldek的帖子,但他們有點高級作爲備忘單使用。

Msdn的示例顯示itemstyle的自定義並在webpart屬性工具欄上設置queryoverride。我需要通過代碼來設置它。

注意:如果這不是定製cqwp的方式,請告訴我。我的目的是將wp放入主頁面並設置列表名稱並等待結果顯示(:

我試着通過單獨的代碼通過OnInit和ModifyXsltArgument方法來設置listguid和queryoverride,沒有任何返回,並且當我出口WP中,listguid和queryoverride似乎沒有設置。

我知道我在做一些基本的東西錯了,所以我會很感激你的幫忙。提前 謝謝..

+0

這裏給出一個很好的詳細文章。 http://www.helpmeonsharepoint.com/2012/05/create-your-own-xslt-functions-using-c.html –

回答

3

繼承ContentQueryWebPart只是這樣做:

using System; 
using System.ComponentModel; 
using Microsoft.SharePoint.Publishing.WebControls; 
using Microsoft.SharePoint; 
using Microsoft.Office.Server.UserProfiles; 

namespace YOURNAMESPACE 
{ 
    [ToolboxItemAttribute(false)] 
    public class CustomContentQueryWebPart : ContentByQueryWebPart 
    { 
     protected override void OnLoad(EventArgs e) 
     { 
      try 
      { 
       //Reemplazamos [UserContext:<field>] por su valor 
       string val, field; 
       UserProfile userProfile = getCurrentUserProfile(); 

       val = this.FilterValue1; 
       if (val.StartsWith("[UserContext:") && val.EndsWith("]")) 
       { 
        field = val.Substring(13, val.Length - 14); 
        this.FilterValue1 = userProfile[field].Value.ToString(); 
       } 

       val = this.FilterValue2; 
       if (val.StartsWith("[UserContext:") && val.EndsWith("]")) 
       { 
        field = val.Substring(13, val.Length - 14); 
        this.FilterValue2 = userProfile[field].Value.ToString(); 
       } 

       val = this.FilterValue3; 
       if (val.StartsWith("[UserContext:") && val.EndsWith("]")) 
       { 
        field = val.Substring(13, val.Length - 14); 
        this.FilterValue3 = userProfile[field].Value.ToString(); 
       } 
      } 
      catch (Exception ex) { } 
      finally 
      { 
       base.OnLoad(e); 
      } 
     } 

     private UserProfile getCurrentUserProfile() 
     { 
      SPUser user = SPContext.Current.Web.CurrentUser; 
      //Create a new UserProfileManager 
      UserProfileManager pManager = new UserProfileManager(); 
      //Get the User Profile for the current user 
      return pManager.GetUserProfile(user.LoginName); 
     } 
    } 
} 

在這個例子中,我只是增加了一個過濾器,以從用戶配置得到一個場像原來的WebPart與查詢字符串一樣。你需要什麼?

相關問題