0

Sharepoint 2010検索センターの結果ページでSearchResultWebPartのXSLTを変更するコードがあります(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内に、Webパーツが初期化されていないかどうかをチェックするコードが含まれていることがわかりました。XSLプロパティの設定で上記の例外がスローされます。誰かがこの問題を解決する方法を知っていますか?私にとっては、FeatureActivatedでXSLの変更を行うと非常に便利です...

4

2 に答える 2

1

問題の解決策を見つけましたが、SearchResultBaseWebPart に xsl を設定する別の方法を使用しています。

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);
于 2011-07-06T09:32:21.493 に答える
0

質問でいくつかのことを混同しているように感じます。CoreResultsWebPartのXslプロパティを設定したいと考えています。このクラスにはXslメソッドの直接の実装がないため、その親クラス ( SearchResultBaseWebPart ) の実装を継承します。Xslプロパティ セッターは XslHash プロパティを設定しようとし(ただし、_BeforeOnInit = false; を設定する OnInit の後である場合のみ)、XslHashプロパティのセッター メソッドはInvalidOperationExceptionをスローしますが、この例外は try/catch によってキャッチされる必要があります。とにかくXslプロパティセッターでブロックし ます。他の潜在的なソースは見当たりませんコード内のInvalidOperationException 。

SP2010 のパッチ レベルを確認し (SP1 か、累積更新プログラムの一部か、元のバージョンか)、さまざまなコンテキスト (Web サイト/STSADM または PowerShell から) から機能をアクティブ化してみてください。

ただし、最初に try / catch ブロックをフィーチャー レシーバー コードに追加、エラーの詳細 (スタック トレースなど) をトレースして、 DebugViewを使用して結果を監視することをお勧めします。

于 2011-07-01T15:10:57.047 に答える