Изменить XSLT SearchResultWebPart во время FeatureAcactive - PullRequest
0 голосов
/ 01 июля 2011

У меня есть фрагмент кода, который изменяет XSLT SearchResultWebPart на странице результатов Центра поиска Sharepoint 2010 (spFileItem - это SPFile страницы результатов поиска):

SPLimitedWebPartManager wpManager = spFileItem.GetLimitedWebPartManager(PersonalizationScope.Shared);
foreach (WebPart wpItem in wpManager.WebParts)
{
    if (wpItem is CoreResultsWebPart)
    {
      ((CoreResultsWebPart)wpItem).UseLocationVisualization = false;
      ((CoreResultsWebPart)wpItem).Xsl = someXSL;
      wpManager.SaveChanges(wpItem);
}
spFileItem.Update();
spFileItem.CheckIn(Consts.CheckInComment, SPCheckinType.MajorCheckIn);

Но этот код неработает, если он вызывается при активированной функции (дает InvalidOperationException - неправильное состояние объекта).Однако это прекрасно работает в консольном приложении.Поразмыслив, я обнаружил, что внутри SearchResultWebPart есть фрагмент кода, который проверяет, не была ли инициализирована веб-часть, и выдает указанное выше исключение при настройке свойства XSL.Кто-нибудь знает, как решить эту проблему?Для меня было бы очень удобно сделать XSL-изменение в FeatureActivation ...

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Я нашел решение своей проблемы, но он использует другой способ установки xsl для SearchResultBaseWebPart.

SPLimitedWebPartManager wpManager = spFileItem.GetLimitedWebPartManager(PersonalizationScope.Shared);
foreach (WebPart wpItem in wpManager.WebParts)
{
    if (wpItem is CoreResultsWebPart)
    {
      ((CoreResultsWebPart)wpItem).UseLocationVisualization = false;
      ((CoreResultsWebPart)wpItem).XslLink = spFileItem.Web.Url + @"/_layouts/XSL/MYXSL.xsl";
      wpManager.SaveChanges(wpItem);
    }
}
spFileItem.Update();
spFileItem.CheckIn(Consts.CheckInComment, SPCheckinType.MajorCheckIn);
0 голосов
/ 01 июля 2011

Я чувствую, что вы перепутали несколько вещей в вопросе.Вы хотите установить свойство Xsl для CoreResultsWebPart .Этот класс не имеет прямой реализации метода Xsl , поэтому он наследует реализацию своего родительского класса ( SearchResultBaseWebPart ).Установщик свойства Xsl пытается установить свойство XslHash (но только если мы находимся после OnInit, который устанавливает _BeforeOnInit = false;), и метод установки XslHash *Свойство 1018 * выдает InvalidOperationException , но это исключение должно быть перехвачено блоком try / catch в установщике свойства Xsl в любом случае.Я не вижу другого потенциального источника InvalidOperationException в коде.

Вам следует проверить уровень исправления вашего SP2010 (это SP1 / некоторые из накопительных обновлений / оригинальная версия?) и попробуйте активировать функцию в разных контекстах (с веб-сайта / STSADM или PowerShell).

Но сначала я предлагаю вам добавить блок try / catch в код получателя функции и trace out подробности ошибки (например, трассировка стека ) и отслеживание результатов с использованием DebugView .

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