Изменение фиксированного запроса ключевого слова в основной веб-части результатов поиска с текущим пользователем (Автор: {CurrentUser}) - PullRequest
1 голос
/ 28 марта 2011

Есть ли способ изменить запрос фиксированного ключевого слова в основной веб-части результатов поиска, чтобы получить текущего пользователя (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 Ответ

1 голос
/ 12 мая 2011

Хорошо, поэтому я нашел "обходной путь" для этого.Я постараюсь изложить это как можно проще.

  1. Создайте новую страницу ASPX, на которой есть "Core Results Web Part" и "Cross-Web Part query ID" в разделе "Results Query Options".в свойствах, установленных на "User query".
  2. Мы будем называть эту страницу изнутри "Page View Web Part", частью wep, которая загружает другую страницу в iframe.Затем мы добавим запрос к URL-адресу страницы, которая загружается в «Page View Web Part».(например, site.com/ourAspxFromStep1.aspx?k=author:first%20last)

Надеюсь, это понятно.Я добавил веб-части с кодом на стороне сервера c # динамически при загрузке страницы на основе значений из списка, чтобы запросы динамически создавались при загрузке страницы.Дайте мне знать, если у вас есть комментарии или вопросы.

Вот моя клиентская функция, которую я вызываю, которая динамически добавляет веб-части.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);
}
...