SolutionXML

前回の続きで、SolutionXML の使い方を紹介します。SolutionXML は図面全体に 1 つと各セルに 1 つずつ作成することができます。要素名を SolutionXML としてその中に任意のデータを挿入していくことが可能です。図面を XML 形式で保存しておけば、XML パーサーを使ってデータの読み書きができます。また、図面をバイナリ形式で保存しても失われることがありません。

SDK にある VS.NET 用のウィザードとコード ライブラリアンを使って、小さなデモ プロジェクトを作っていきます。コード ライブラリアンには SolutionXML の読み書きを行うためのモジュールが登録されています。

では VS.NET を起動して、新しい Visual C# プロジェクトを作成しましょう。[テンプレート] には [Visio add-in or add-on] というアイコンがみえるはずなのでそれを選択して [OK] をクリックしてください。

プロジェクト作成のためのウィザードが起動します。2 番目の画面では、[Create Visio EXE add-on] を選択してください。Add-in と Add-on の違いについては別の機会に触れることにします。次の画面で [Finish] をクリックすると、必要な参照設定が終わった状態の Visio アドオンのプロジェクト (しかもセットアップ プロジェクトつき) がコード入力を待っているはずです。まずはコンパイルできるかどうか確認してください。

AddonDialog.cs にいくつかのコントロールがついていますが今回は使いません。フォームに新しいボタンを 1 つ追加し、それを今回のコードのトリガとしましょう。

さて、SDK ツールの 1 つである Code Librarian Viewer を起動してください。右側のツリーで C# 、Integration、Data Storage、と展開していくと [String To Formula]、[Formula to String]、[Data Storage in Solution XML] というコード サンプルが出てくるはずです。[String To Formula] を右クリックして [Copy] を選択するとサンプルを丸ごとコピーできます。VS.NET に戻り、クラスを追加し、VS が追加したコードはすべて削除してコピーしたばかりのサンプルをそのまま貼り付けてください。これで String To Formula クラスがプロジェクトに追加されました。同じ要領で [Formula to String] と [Data Storage in Solution XML] も追加します。Data Storage in Solution XML が今回の主役で、このクラスの中にあるデモ コードをそのまま使って SolutionXML を扱ってみることにします。残りの 2 つのクラスはデモを動かすために必要なものです。

フォームに戻り、先ほど追加したボタンをダブルクリック。クリック メソッドのコードが入力できるようになるので、以下のコードを入力します。Visio と Data Storage in Solution XML のインスタンスを作成し、Data Storage in Solution XML のデモ用メソッドを呼び出しています。

Microsoft.Office.Interop.Visio.Application visioApplication;
Microsoft.Samples.Visio.CSharp.SolutionXmlManipulator xmlUtil;
visioApplication = new Microsoft.Office.Interop.Visio.Application();
xmlUtil = new Microsoft.Samples.Visio.CSharp.SolutionXmlManipulator();

xmlUtil.DemoSolutionXml(visioApplication);

Using キーワードを使えばもっとすっきりできるのですが今回は割愛します。

では F5 を押してデバッグしてみましょう。問題がなければ AddonDialog フォームが表示されるので、先ほどのボタンをクリックしてみてください。 Visio が起動し、以下のようなポップアップ ダイアログが表示されます。

これが今回 VisioDocument と UserCell の中に埋めこんだ SolutionXML です。デバッグを終了して、Data Storage in Solution XML の DemoSolutionXml をのぞいてみると、定数で指定した XML データを図面の中に埋め込んだり、読み出したりしているのがわかると思います。GetDocumentXML や SetCellXML といった便利なメソッドもすべてこのクラスが提供しています。

コードが作成した図面は図形などのデータは何も追加されていませんが、実は見えないところでデータが埋め込まれているわけです。せっかくだからこの図面は XML 形式で保存しておいて、次回また使ってみることにしましょう。

最後にヒントを 1 つ。XML 形式で保存するときに、SolutionXML 内の XML 構造を Visio に自動的に検証させる機能があります。レジストリ キーを追加する必要があるので、自己責任で、という条件つきになってしまいますが。

- HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Visio\Application に XMLValidateOnSave という名前の文字列値を追加します
- XMLValidateOnSave のデータを 1 にします

それではまた次回。

<担当: M>
この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。マイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。