.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パーツ双方に対する手続きが必要だ。それぞれ以下のように設定を追加すること。
|
|
アプリケーション上でエクスポート機能を有効化する(Web.config) |
|
|
ページ上の特定の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属性については、「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」ファイルの内容を示す(ただし、パーソナライズの状態によっては、内容が異なる可能性がある)。
|
|
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の上部に追加されることを確認してほしい。
利用可能バージョン:.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」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|