.NET TIPS

[ASP.NET]ImportCatalogPartコントロールでパーツ情報をページにインポートするには?[2.0のみ、C#、VB]

山田 祥寛
2006/11/17

 「TIPS:[ASP.NET]WebPartsコントロールでページ内のコンテンツを編集/再配置するには?」でも紹介したように、カタログ・パーツを利用することで、一度非表示にしたコンテンツ(Webパーツ)を再表示したり、あらかじめ用意しておいたコンテンツ・カタログの中から新たなパーツをページに追加したりと、ページ上にパーツを再配置するための機能をコーディングレスで追加できる。本稿では、そのようなASP.NET 2.0が標準で提供するカタログ・パーツの中でもやや特殊な、ImportCatalogPartコントロールの機能について紹介する。

 WebPartsコントロールは、標準でWebパーツのプロパティ情報(パーソナライズされた設定情報)を「.webpart」ファイルとしてエクスポートするための機能を提供している。ImportCatalogPartコントロールは、このエクスポートされた「.webpart」ファイルをインポートすると同時に、インポートされたパーツをページ上に配置する手段を提供するカタログ・パーツだ。

 ImportCatalogPartコントロールを利用することで、(例えば)あるユーザーがパーソナライズした情報をエクスポートしておき、別のユーザー環境でインポート、環境を再現する、といったような使い方ができる。

 それではさっそく、ImportCatalogPartコントロールをページに組み込んでみよう。ここで使用するサンプル・アプリケーションは、「TIPS:[ASP.NET]PropertyGridEditorPartコントロールでカスタム・プロパティを編集するには?」で作成したWebParts_cs.aspx/WebParts_vb.aspxだ。このサンプルに追加する形で、インポート/エクスポート機能を実装する。

1. エクスポート機能を有効にする

 WebPartsコントロールのエクスポート機能を有効にするには、アプリケーション構成ファイル(Web.config)、対象のWebパーツ双方に対する手続きが必要だ。それぞれ以下のように設定を追加すること。

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    ……中略……
    <webParts enableExport="true" />
    ……中略……
  </system.web>
</configuration>
アプリケーション上でエクスポート機能を有効化する(Web.config)
 
<ZoneTemplate>
  <uc1:RssReader_vb ID="RssReader_vb1" runat="server"
    Title="Rssフィード" ExportMode="NonSensitiveData"
    ImportErrorMessage="インポート・エラーが発生しました。" />
  ……中略……
</ZoneTemplate>
ページ上の特定のWebパーツについてエクスポート機能を有効化する(WebParts_cs.aspx/WebParts_vb.aspx)

 アプリケーション上でエクスポート機能を有効にするには、<webParts>要素のenableExport属性をtrueに設定すればよい。本設定が無効(false)になっている場合、個別のページ(Webパーツ)でエクスポート機能を有効にしても、エクスポート実行時に例外が発生するので注意すること。

 ページ上の特定のWebパーツについてエクスポート機能を有効にするには、GenericWebPart.ExportModeプロパティを設定する。ExportModeプロパティに設定可能な値は、以下のとおりだ。

設定値 概要
All パーツの全プロパティ情報をエクスポート可能
NonSensitiveData 機密事項として定義されていないプロパティのみエクスポート可能
None エクスポートを許可しない(デフォルト)
ExportModeプロパティの設定値(WebPartExportMode列挙体)

 エクスポート機能を有効にするには、ExportModeプロパティをNone以外に設定する必要がある。NonSensitiveData値を設定した場合には、機密事項として定義されたプロパティ情報はエクスポート・データから除外される。

 もしもプロパティを機密事項(エクスポート除外項目)としたい場合には、そのプロパティ定義で付与するPersonalizable属性を以下のように指定すればよい。

<Personalizable(PersonalizationScope.User, True)> _ (VBの場合)
<Personalizable(PersonalizationScope.User, true)> (C#の場合)

 Personalizable属性については、「TIPS:[ASP.NET]PropertyGridEditorPartコントロールでカスタム・プロパティを編集するには?」も併せて参照いただきたい。

 なお、エクスポートに必須の項目はExportModeプロパティだけであるが、インポート/エクスポート関連のプロパティとして、ここではImportErrorMessageプロパティも併せて設定しておこう。ImportErrorMessageプロパティは、エクスポート・データのインポート処理に失敗した場合に表示するエラー・メッセージを定義するプロパティだ。

[注意]

TIPS:[ASP.NET]ユーザー・コントロールでパーソナライズ可能なWebパーツを作成するには?」でも紹介したように、コントロールをラッピングするGenericWebPartクラスのプロパティを、現バージョンのVisual Studio 2005(以降、VS 2005)では認識できない。つまり、プロパティ・ウィンドウからGenericWebPartクラスのプロパティを設定することはできないので、コード・エディタから直接にコードを追記する必要がある。コード・エディタでもエラーを表す緑色の波線が表示されるが、実行時には問題なく認識されるので、ここでは無視して構わない。

2. ページにImportCatalogPartコントロールを追加する

 次に、インポートのための仕組みをページに追加する。以下の画面のようにImportCatalogPartコントロールを追加してほしい。

Webフォーム(C#:WebParts_cs.aspx/VB:WebParts_vb.aspx)のフォーム・レイアウト
ImportCatalogPartコントロールをカタログ・ゾーンに追加すると、「インポートされた Web パーツ カタログ」というWebパーツが追加される。

 ImportCatalogPartコントロールは、ほかのカタログ・パーツと同様、必要なユーザー・インターフェイスを自動で生成するので、特別な設定は必要ない。

 以上の手順を終えたら、サンプル・アプリケーションを実行し、実際のインポート/エクスポート動作を確認してみよう。

 まずは、ユーザー・コントロールRssFeed.ascx上のタイトル・メニューから[エクスポート]を選択する。ダウンロード・ダイアログが表示されるので、適当なフォルダに保存する。

メニューから[エクスポート]コマンドを選択
[Rssフィード]のタイトルバーを右クリックするとメニューが表示されるので、[エクスポート]を選択する。

 エクスポート・データはXML(eXtensible Markup Language)形式で記述されているので、中身はテキスト・エディタなどから確認することが可能だ。以下に、参考までにエクスポートした「.webpart」ファイルの内容を示す(ただし、パーソナライズの状態によっては、内容が異なる可能性がある)。

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <metaData>
      <type src="~/WebParts/RssReader_vb.ascx" />
      <importErrorMessage>インポート・エラーが発生しました。
        </importErrorMessage>
    </metaData>
    <data>
      <properties>
        <property name="RssFeed" type="string">
          http://rss.rssad.jp/rss/itm/fdotnet/rss.xml</property>
      </properties>
      <genericWebPartProperties>
        <property name="AllowClose" type="bool">True</property>
        <property name="Width" type="unit" />
        <property name="AllowMinimize" type="bool">True</property>
        ……中略……
      </genericWebPartProperties>
    </data>
  </webPart>
</webParts>
RssFeed.ascxの内容をエクスポートした結果(「.webpart」ファイル)

 それぞれの要素の意味は以下のとおり。ここでは、プロパティ情報を[エクスポート]コマンド経由でエクスポートしているが、(もちろん)「.webpart」ファイルは自分で記述することも可能だ。

要素名 説明
<webParts> ルート要素
<webPart> Webパーツ情報(<webParts>要素の配下に1つのみ記述可能)
<metaData> パーツを定義するアセンブリやユーザー・コントロールの情報、インポート時のエラー・メッセージなど
<properties> カスタム・プロパティ項目
<genericWebPartProperties> GenericWebPartクラスであらかじめ用意されたプロパティ項目
「.webpart」ファイルに含まれる主な要素

 次に、ページをカタログ・モードに切り替え、エクスポートされた「.webpart」ファイルをインポートしてみよう。

[ファイル名]を指定して[アップロード]ボタンをクリック
[Rssフィード]パーツにチェックを入れ「zone2」を選択して[追加]ボタンをクリック
ImportCatalogPartコントロールによるインポート

 インポート・カタログには「.webpart」ファイルをアップロードするためのアップロードボックスが用意されているので、先ほどダウンロードした「.webpart」ファイルをアップロードする。カタログ上に「.webpart」ファイルで定義された「Rssフィード」パーツが追加されるので、チェック・ボックスにチェックを入れて、プルダウン・メニューから「zone2」を選択したうえで[追加]ボタンをクリックする。「Rssフィード[2]」の内容がWebZoneコントロールzone2の上部に追加されることを確認してほしい。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Webフォーム 処理対象:WebPartsパーツ
使用ライブラリ:ImportCatalogPartクラス(System.Web.UI.WebControls.WebParts名前空間)
使用ライブラリ:WebPartExportMode列挙体(System.Web.UI.WebControls.WebParts名前空間)
関連TIPS:[ASP.NET]WebPartsコントロールでページ内のコンテンツを編集/再配置するには?
関連TIPS:[ASP.NET]PropertyGridEditorPartコントロールでカスタム・プロパティを編集するには?
関連TIPS:[ASP.NET]ユーザー・コントロールでパーソナライズ可能なWebパーツを作成するには?

この記事と関連性の高い別の.NET TIPS
[ASP.NET]WebPartsコントロールでページ内のコンテンツを編集/再配置するには?
[ASP.NET]ユーザー・コントロールでパーソナライズ可能なWebパーツを作成するには?
[ASP.NET]WebPartsコントロールでパーソナライズ・ページを構築するには?
[ASP.NET]PropertyGridEditorPartコントロールでカスタム・プロパティを編集するには?
[ASP.NET]DeclarativeCatalogPartコントロールでコンテンツ・カタログを定義するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間