SharePoint アドイン製品一覧
SharePoint 2010 開発のステップ・バイ・ステップ
Windows Azure 入門
Windows Azure How-To 集
WCF / WF 入門
【環境】Visual Studio 2005 Tools for the Microsoft Office systemMicrosoft Office 2003または、Visual Studio Codename Orcas March 2007 CTP 以降 (Trinity Beta 1 以降)the Microsoft Office system 2007
こんにちは。
今日は、Office 開発における Cached という仕組みと、それをどのようなビジネスアプリケーションの中でどう応用していくかを簡単に説明します。(Microsoft On などでスマートクライアントのセミナーを聞かれたことのある方は、既にご存知の内容です。)
以下、Microsoft Office 2003 を例に説明します。
【Cached を使わないとどうなってしまうのか】
まず、その効果を理解してもらうため、以下のようなアプリケーションを作成してみましょう。Visual Studio 2005 で [Visual C#] - [Office] の [Excel ブック] プロジェクトを作成します。
結果は、一瞬データが表示されて、すぐに空っぽになってしまったはずです。
なぜこのような動作をするのでしょうか?理由を説明しましょう。
検索ボタンを押して取得したデータは、メモリ内のデータセット(またはデータテーブル)と呼ばれるオブジェクトに格納され、格納されたメモリ上のデータとコントロールの間でバインドがおこなわれているからです。つまり、メモリ上のデータは、Excel を終了した段階で空になってしまうのです。(ADO.NET の非接続型アーキテクチャについて、こちら が参考になるでしょう。)
尚、Microsoft Office 2007 の Word のコンテンツコントロールでお試しの方は、ドキュメントを保存するとデータはページ上に保存されますが、内部のデータセット (もしくはデータテーブル) はやはりクリアされています。
起動時にデータをデータベースに毎回接続して自動で取得するようなアプリケーションであれば問題ありませんが、このように [検索] ボタンなどでデータを取得した場合にはデータを永続化しておく必要があるのです。
【では、Cached を使ってみましょう】
データセット (DataSet) やデータテーブル (DataTable) は、XML にシリアライズすることが可能です。このため、 このような状況に対処するには、デスクトップアプリケーションであれば、通常、XML として保存するためのボタンなどを設けて対処しますが、Office アプリケーションの場合、ユーザはOffice文書とやりとりをしていますから、別途XMLとしてファイル保存などしたくはないでしょう。こうしたことに対処するため、VSTO では、データに Cached 属性を指定しておくことで、Office のバイナリの文書内にシリアライズして保存しておくというテクノロジーがあります。
使い方は、簡単です。
今度は、ちゃんと保存できるようになりましたね。シリアライザブルなものであれば、こうして処理をすることが可能になります。
この XML によるシリアライズの仕組みは大変利口にできています。データセットオブジェクトは、ユーザが情報の編集をおこなっている際も、どのデータが挿入され、どのデータが変更されたかといった情報(RowState)や、変更・削除されたものについては編集前の情報も含め保持しています。この仕組みによって、データベースへ Update をおこなう際には、更新されたレコードだけを対象にデータベースに書き込むなどの利口な処理をおこなっています。また、UI 上で編集をロールバックするといった処理も可能です。実は、上記のシリアライズでは、こうした RowState などの状態も含め保存をおこなっています。ですから、日にちをまたがって編集処理をおこなうようなシナリオでも、この仕組みを有効に活用することができるようになっています。