2

現在 SharePoint 2010 を使用していますが、問題があります。Web パーツを担当する機能があります。その範囲は Web です。タイトルなど、既に作成されている Web パーツの一部のプロパティを更新する必要があります。

そこで、FeatureUpgrading イベントをオーバーライドし、カスタム アップグレード アクションを機能マニフェストに追加しました。ここでは問題ありません。そのフィーチャー レシーバーでは、必要なページを含むファイルを取得し、チェックアウトし、そのファイル上のすべての Web パーツを反復処理し、プロパティを変更して、ページをチェックインするコードを用意する予定です。問題は、すべての Webパーツが空のタイトルのErrorWebPartとして表示されることです。

ちなみに、FeatureDeactivating イベントで同じコードを使用すると、すべてうまくいきます。私が気付いた唯一の違いは、機能のアップグレードで HttpContext.Current が null だったことです。そのため、手動で入力しましたが、役に立ちませんでした。グーグル中の唯一のアドバイスは、HttpContext を設定し、Web パーツを含むライブラリが GAC にあることを確認することでした。私の状況では両方の条件が満たされています。

FeatureUpgrading のサンプル コードは適切です。

 SPUtility.ValidateFormDigest();
        web.AllowUnsafeUpdates = true;

        var request = new HttpRequest("", web.Url, "");
        HttpContext.Current = new HttpContext(request, new HttpResponse(new StringWriter()));
        HttpContext.Current.Items["HttpHandlerSPWeb"] = web;

        var fileUrl = web.Url + "/pages/sample.aspx";
        var file = web.GetFile(fileUrl);
        if (file.CheckOutType == SPFile.SPCheckOutType.None)
        {
            file.CheckOut();
        }

        using (var webPartsManager = file.GetLimitedWebPartManager(PersonalizationScope.Shared))
        {
            foreach (WebPart webPart in webPartsManager.WebParts)
            {
                Console.WriteLine(webPart.GetType().ToString());
            }
        }

        file.CheckIn("System update");

助けていただければ幸いです。たぶん、私が欠けているものがあるか、説明されたタスクを達成するための別のバリアントがありますか?

よろしく。

4

1 に答える 1

0

Deactivating() に取り組んでいるので、機能がアクティブ化される順序が問題だと思います。
以下を確認する必要がある場合があります。
1. 最初に、Web パーツを追加する機能を有効にします
。 2. 次に、新しい機能を有効にします。

これはパッケージで変更できます。または、新しい機能に依存関係を追加することをお勧めします。

于 2012-11-20T06:42:05.257 に答える