キャッシュされたデータ

更新 : 2008 年 7 月

対象

このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。

プロジェクトの種類

  • ドキュメント レベルのプロジェクト

Microsoft Office のバージョン

  • 2007 Microsoft Office system

  • Microsoft Office 2003

詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

(Microsoft Office Word または Microsoft Office Excel を起動せず) オフラインでデータにアクセスできるように、ドキュメント レベルのカスタマイズのデータ オブジェクトをキャッシュできます。オブジェクトをキャッシュするには、オブジェクトのデータ型が特定の要件を満たす必要があります。StringDataSet、および DataTable など、.NET Framework の一般的なデータ型の多くは、以下に示す要件を満たしています。

データ キャッシュにオブジェクトを追加するには 2 つの方法があります。

データ キャッシュにオブジェクトを追加すると、Word や Excel を起動せずに、キャッシュされたデータにアクセスしたり、キャッシュされたデータを変更したりできます。詳細については、「サーバー上のドキュメント内のデータへのアクセス」を参照してください。

キャッシュできるデータ オブジェクトの要件

作成するデータ型のインスタンスをキャッシュする場合は、そのデータ型が以下の要件を満たす必要があります。

  • ThisDocument クラスや ThisWorkbook クラスなど、ホスト項目の読み書き可能なパブリック フィールドまたはプロパティであること。

  • インデクサまたはその他のパラメータ化されたプロパティではないこと。

さらに、データ オブジェクトは XmlSerializer クラスによってシリアル化できる必要があります。これは、次の特性を備えていることを意味します。

  • パブリック型であること。

  • パラメータを使用しないパブリック コンストラクタがあること。

  • 追加のセキュリティ特権を必要とするコードを実行しないこと。

  • 読み書き可能なパブリック プロパティのみを公開していること (それ以外のプロパティは無視されます)。

  • 多次元配列を公開していないこと (入れ子になった配列は可)。

  • プロパティおよびフィールドからインターフェイスを返さないこと。

  • コレクションの場合、IDictionary を実装しないこと。

キャッシュされたオブジェクトの動作の制御

キャッシュされたオブジェクトの動作をより詳細に制御するには、キャッシュされたオブジェクトの型に ICachedType インターフェイスを実装します。たとえば、このインターフェイスを実装して、オブジェクト変更時のユーザーへの通知を制御できます。ICachedType を実装する方法を示すコード例については、次のサンプル アプリケーションの ControlCollection クラスを参照してください。

パスワードで保護されたドキュメント内のキャッシュされたデータに加えられた変更の永続化

Word 2007 や Excel 2007 のドキュメント レベルのプロジェクトで、パスワードで保護されたドキュメント内のデータ オブジェクトをキャッシュした場合、キャッシュされたデータに加えられた変更は保存されません。Visual Studio 2008 Service Pack 1 (SP1) 以降、2 つのメソッドをオーバーライドすることで、キャッシュされたデータへの変更を保存できるようになりました。ドキュメントを保存するときにこれらのメソッドをオーバーライドして一時的に保護を解除し、保存操作が完了した後に保護を再適用します。

詳細については、「方法 : パスワードで保護されたドキュメント内のデータをキャッシュする」を参照してください。

データ キャッシュに Null 値を追加するときのデータ損失の回避

データ キャッシュにオブジェクトを追加するとき、キャッシュされたすべてのオブジェクトは、ドキュメントを保存して閉じる前に null 以外の値に初期化される必要があります。ドキュメントを保存して閉じるとき、キャッシュされたいずれかのオブジェクトに null 値が設定されていると、Visual Studio Tools for Office ランタイムはデータ キャッシュから、キャッシュされたすべてのオブジェクトを自動的に削除します。

デザイン時に CachedAttribute 属性を使用して、null 値を設定したオブジェクトをデータ キャッシュに追加した場合は、ServerDocument クラスを使用して、キャッシュされたデータ オブジェクトを初期化してからドキュメントを開くことができます。この手法は、エンド ユーザーがドキュメントを開く前に、Word や Excel がインストールされていないサーバー上でキャッシュされたデータを初期化する場合に便利です。詳細については、「サーバー上のドキュメント内のデータへのアクセス」を参照してください。

ドキュメントでのキャッシュされたデータの格納方法

ドキュメント内のデータ オブジェクトをキャッシュするとき、Visual Studio Tools for Office ランタイムは、ドキュメントに格納されている XML 文字列にオブジェクトをシリアル化します。ドキュメントに格納される XML 文字列は、ソリューションが操作対象とする Microsoft Office のバージョンによって異なります。

  • Microsoft Office 2003 のカスタマイズでは、Visual Studio Tools for Office ランタイムは XML 文字列を実行時のストレージ コントロールに格納します。実行時のストレージ コントロールは、ドキュメントに埋め込まれる ActiveX コントロールです。詳細については、「実行時のストレージ コントロールの概要」を参照してください。

  • 2007 Microsoft Office system のカスタマイズでは、Visual Studio Tools for Office ランタイムは XML 文字列をドキュメントのカスタム XML 部分に格納します。詳細については、「カスタム XML 部分の概要」を参照してください。

参照

処理手順

方法 : オフラインで使用するデータまたはサーバー上で使用するデータをキャッシュする

方法 : Office ドキュメント内のデータ ソースをプログラムでキャッシュする

方法 : データ ソースのキャッシュをプログラムで停止する

方法 : パスワードで保護されたドキュメント内のデータをキャッシュする

チュートリアル : キャッシュされたデータセットを使用したマスター/詳細関係の作成

履歴の変更

日付

履歴

理由

2008 年 7 月

パスワードで保護されたドキュメント内のデータ キャッシュに関する情報を追加

SP1 機能変更