使用当前用户更改搜索结果核心Web部件中的固定关键字查询(作者:{CurrentUser})

时间:2011-03-28 07:56:09

标签: search sharepoint-2010 web-parts

有没有办法更改搜索结果核心网络部件中的固定关键字查询以获取当前用户(Author:{CurrentUser})?

我使用了范围和过滤器,并且可以通过提供固定关键字查询来完成此操作,但无法将其更改为始终获取当前用户。

基本上我希望FixedQuery字段为author:Last First

以下是一些提示它的帖子,但我想在XSL文件的.aspx中动态更改它,并完成它。任何人吗?

http://www.martinhatch.com/2010/07/rcwp-part-1-spretreat-and-related.html http://www.novolocus.com/2008/05/14/using-a-query-string-parameter-in-the-search-results-web-part/

1 个答案:

答案 0 :(得分:1)

好的,所以我找到了一个“解决方法”。我会尝试尽可能简单地解决它。

  1. 创建一个新的ASPX页面,其上有一个“Core Results Web Part”,并且属性设置为“Cross-Web Part query ID”的“Results Query Options”下面有“User query
  2. 我们将从“Page View Web Part”内部调用此页面,这是在iframe中加载另一个页面的wep部分。然后,我们将查询添加到“Page View Web Part”中加载的页面的URL。 (例如site.com/ourAspxFromStep1.aspx?k=author:first%20last
  3. 我希望这很清楚。我根据列表中的值在页面加载时动态添加了带有c#服务器端代码的Web部件,因此查询是在页面加载时动态构建的。如果您有任何意见或问题,请与我们联系。

    这是我调用的客户端函数,它动态添加Web部件。 core_wp_for_embed.aspx是上面步骤1中提到的文件。

    protected void refreshFeeds(string tmpUserName, SPUserToken userToken) {
      using(SPSite site = new SPSite("http://www.site.com")) {
        using(SPWeb web = site.OpenWeb()) {
          web.AllowUnsafeUpdates = true;
          SPFile file = web.GetFile(web.Url + "/currentPage.aspx");
          using(SPLimitedWebPartManager webPartManager =
            file.GetLimitedWebPartManager(PersonalizationScope.User)) {
            SPLimitedWebPartCollection webparts = webPartManager.WebParts;
            int j = webparts.Count;
            for (int k = j - 1; k >= 0; k--) {
              Microsoft.SharePoint.WebPartPages.WebPart wp =
                (Microsoft.SharePoint.WebPartPages.WebPart)webparts[k];
              if (wp.GetType().ToString() ==
    "Microsoft.SharePoint.WebPartPages.PageViewerWebPart") {
                webPartManager.DeleteWebPart(wp);
              }
            }
            // Zone should be cleared. Now loop through list on users site and add web parts for each item
            SPSite site2 = new SPSite("http://www.site.com/personal/" + tmpUserName);
            SPWeb web2 = site2.OpenWeb();
            SPList list = web2.Lists["SomeUserList"];
            int i = 0;
            foreach(SPListItem currentItem in list.Items) {
              if(Convert.ToBoolean(currentItem["BooleanField"]) == true) {
                PageViewerWebPart pvwp = new PageViewerWebPart();
                pvwp.Title = currentItem["Title"].ToString();
                pvwp.ChromeState = System.Web.UI.WebControls.WebParts.PartChromeState.Normal;
                pvwp.ChromeType = System.Web.UI.WebControls.WebParts.PartChromeType.TitleOnly;
                pvwp.ContentLink = "http://www.site.com/core_wp_for_embed.aspx?k=scope:"
                  + currentItem["Item_Scope"].ToString();
                pvwp.AllowEdit = true;
                webPartManager.AddWebPart(pvwp, "someZone", i);
                webPartManager.SaveChanges(pvwp);
                i++;
              }
            }
          }
          web.Update();
          web.AllowUnsafeUpdates = false;
        }
      }
      Response.Redirect(Request.RawUrl);
    }