Web パーツのパーソナル化の概要
更新 : 2007 年 11 月
ある種の Web アプリケーションでは、アプリケーションのユーザー インターフェイスおよび動作をユーザーが変更またはパーソナル化できるように設定できます。ASP.NET Web パーツ コントロール セットには、中心的な機能の 1 つとしてこのパーソナル化機能が用意されています。パーソナル化を使用すると、Web パーツ コントロールのプロパティまたは状態を長期ストレージに保存し、特定のブラウザ セッションには拘束されないようにできます。
パーソナル化の動作
パーソナル化を使用すると、いくつかの固有の特性を備えた Web パーツ コントロール用プロパティを作成できます。パーソナル化できるプロパティには次のものがあります。
特定のユーザーと Web ページの結び付け。個々のページ上のパーソナル化可能なコントロールに対する各ユーザーの設定は、パーソナル化データに保存できます。ユーザーはこのデータを使用して Web ページ上の UI を変更し、その個別の設定を保存できます。
パーソナル化の保持。パーソナル化設定は単一のブラウザ セッションに限定されません。この設定は長期ストレージに格納されるため、アプリケーションはユーザーが特定のページにアクセスするたびにそのユーザーの設定を取得できます。
パーソナル化では、ASP.NET アプリケーション サービス データベースを使用してパーソナル化データが格納されます。既定では、ASP.NET アプリケーションがパーソナル化や、ロール、メンバシップ、プロファイルなどの他のアプリケーション サービスのいずれかを初めて使用するときに、ASP.NET が "app_data" という名前のサブフォルダにこのデータベースを自動的に作成します。また既定で、ASP.NET は、すべてのアプリケーション サービス用のデータベース スキーマが格納されたデータベースを単一の SQL Server Express データベース ファイルとして作成します。Web.config ファイルを使用すると、パーソナル化に対して個別のデータベース ファイルが作成されるようにアプリケーションを設定できます。さらに、Web.config ファイルでは、既定の SQL Server Express データベース ファイルを使用する代わりに SQL Server データベースを指定して、アプリケーション サービス データを格納できます。
プロバイダ層を通した保持。パーソナル化データを格納および取得するしくみはプロバイダ コンポーネントとデータ ストアで構成されます。ASP.NET には既定の Microsoft SQL プロバイダとデーベースが用意されています。また、カスタム プロバイダを作成して任意のデータ ストアを使用するように設定できます。
任意の Web パーツ コントロール上での宣言。カスタム コントロールを開発する場合、コードに Personalizable 属性を追加すると、任意の Web パーツ コントロールの特定のプロパティをパーソナル化できます。これらは Web パーツ コントロールとして使用できるため、WebPart クラスから派生するカスタム コントロールに加え、ASP.NET サーバー コントロール、カスタム サーバー コントロール、またはユーザー コントロールにも適用されます。
メモ : 通常のプロパティにはパーソナル化できるプロパティのような永続性がないため、その処理方法が異なることに注意が必要です。WebPart コントロールまたはその他のサーバー コントロールをプログラムで WebPartZoneBase ゾーンに追加する場合、およびそのパーソナル化できないプロパティをプログラムで設定しようとする場合 (たとえば、Label コントロールの Text プロパティを設定する場合) は、これらのプロパティ値をパーソナル化長期ストレージで保持する方法がないため、コントロールを追加した後にプロパティが既定値にリセットされます。プロパティを長期ストレージで保持するには、それをソース コードの Personalizable 属性でマークする必要があります。同じブラウザ セッション内の要求についてのみプロパティを保持する場合は、長期ストレージの代わりにビューステートを使用できます。
パーソナル化機能およびその他の ASP.NET 機能
Web アプリケーションの状態データの保持に関して、パーソナル化は他の ASP.NET 技法と比べて次の点が異なります。
パーソナル化は Web パーツの機能です。パーソナル化は単独では使用できません。パーソナル化を使用するには、WebPartZone 内のコントロールを使用して、これらのコントロールが Web パーツ機能を備えるようにする必要があります。
メモ : すべての ASP.NET サーバー コントロール、カスタム コントロール、またはユーザー コントロールを Web パーツ コントロールとして使用してパーソナル化を利用できます。
パーソナル化はビューステートとは異なります。ビューステートとパーソナル化は共にコントロールの状態データを保持できますが、ビューステート データが現在のブラウザ セッションでのみ保持されるのに対し、パーソナル化データは長期間保持されます。
パーソナル化はプロファイルとは異なります。 パーソナル化は、特定の Web ページ上にあるコントロールのユーザー固有の状態データのみを格納します。個人としてのユーザーに関連し、Web アプリケーションの複数のページにわたって使用することを目的とする情報 (買い物カゴ アプリケーションのアカウント情報など) は、プロファイルで保持する必要があります。詳細については、「ASP.NET プロファイル プロパティの概要」を参照してください。
パーソナル化の主要概念
Web パーツ コントロールでパーソナル化を使用する場合は、パーソナル化の動作に影響を与えるいくつかの概念について理解する必要があります。
最初の概念は、ページのパーソナル化スコープです。ページのパーソナル化スコープは、ユーザーがページ上でパーソナル化による変更を適用できる範囲を表します。Web パーツ ページでは常に、ページのパーソナル化スコープは、共有またはユーザーのいずれかの状態になります。共有スコープでは、パーソナル化によるページ上のすべての変更が全ユーザーに適用され、ユーザー スコープでは、パーソナル化によるページ上の変更は現在のユーザーにのみ適用されます。
2 番目に関連する概念は、コントロールの可視性です。コントロールの可視性によって、指定したコントロールを個別のユーザーに表示するかまたはすべてのユーザーに表示するかを決定します。ページ上のそれぞれの WebPart コントロールは、そのページのすべてのユーザーに表示される共有コントロール、または個別のユーザーにのみ表示されるユーザーごとのコントロールのいずれかです。可視性は、コントロールをページに追加する方法によって決まります。コントロールが Web ページのマークアップの宣言で追加される場合 (スタティック コントロール)、それは常に共有コントロールになります。コントロールがアプリケーション コードで追加されるかまたはコントロールのカタログからユーザーの選択によって追加される場合 (ダイナミック コントロール)、可視性はページの現在のパーソナル化スコープによって決まります。そのページが共有スコープの状態にある場合は、動的に追加されたコントロールが共有され、一方、ページがユーザー スコープの状態にある場合は、コントロールはユーザーごとのコントロールになります。
3 番目の重要な概念は、プロパティのスコープです。ソース コードの Personalizable 属性を使用して、パーソナル化可能なプロパティをコントロールに作成する場合、そのプロパティのパーソナル化スコープを Shared または User (User が既定のスコープ) のいずれかに設定できます。これにより、コントロールのプロパティを、すべてのユーザーがパーソナル化できるようにしたり、ページのスコープが Shared の場合は承認されたユーザーだけがパーソナル化できるようにしたりなど、詳細に制御できます。
つまり、ページのパーソナル化スコープ、コントロールの可視性、およびプロパティのパーソナル化スコープというこれらの概念によって、ユーザー別にどの Web パーツ コントロールを表示したりパーソナル化したりできるかの範囲を設定できます。ユーザーがさまざまなスコープで Web パーツ コントロールをパーソナル化したときに、それらがどのように動作するかについての概要を、次の表に示します。
コントロールの可視性 |
共有スコープのページ |
ユーザー スコープのページ |
---|---|---|
共有コントロール (WebPart コントロールが既定で共有されます) |
承認されたユーザーは、すべてのユーザーのコントロールに関して、共有スコープおよびユーザー スコープの両方のプロパティをパーソナル化できます。 動的コントロール (プログラムによってページに追加されるか、またはコントロールのカタログから追加されるコントロール) の場合、承認されたユーザーは、すべてのユーザーに関して、ダイナミック コントロールを完全に削除できます。 静的コントロール (.aspx ページのマークアップで宣言されるコントロール) の場合は削除できませんが、承認されたユーザーは、すべてのユーザーに関してスタティック コントロールを終了できます。 |
個々のユーザーは、共有としてスコープ設定されたプロパティをパーソナル化できません。ユーザーはユーザー スコープに設定されたプロパティをパーソナル化できます。これらのプロパティの値は、共有スコープでページが作成されるときに割り当てられたプロパティ値より優先されます。コントロールのユーザー固有のパーソナル化データが失われるかリセットされた場合、ユーザー スコープに設定されたプロパティは、ページが共有スコープの状態であったときの値に戻ります。 個々のユーザーは、そのユーザー用の共有コントロールを終了することは可能で、それによりこのコントロールはページ カタログに追加されます。ただし、完全に削除することはできません。 |
ユーザーごとのコントロール |
このコントロールはページ上に表示されないため、共有スコープのページでパーソナル化できません。このコントロールは、ページがユーザー スコープの状態にある場合にのみ表示されます。 |
このコントロールのインスタンスは完全に個人用に設定されているため、個々のユーザーは、そのユーザー用のコントロールに関して、共有スコープおよびユーザー スコープのパーソナル化可能な両方のプロパティをパーソナル化できます。 また、個々のユーザーは、このコントロールを完全に削除できます。 |
必須のパーソナル化コンポーネント
次の表は、Web パーツ コントロール セットの 2 つのコンポーネントを示しています。これらはパーソナル化に不可欠なコンポーネントであり、パーソナル化を使用するときには常に、直接または間接的に使用します。
Web パーツ コントロール |
説明 |
---|---|
ページ上のすてべての Web パーツの管理、パーソナル化の有効化または無効化、およびパーソナル化データの有効期間の管理を行います。どの Web パーツ ページにも必要なコントロールは、WebPartManager コントロール 1 つだけです。 |
|
パーソナル化操作を実行するのに必要なロジックを実装します。 |