SharePoint アドイン製品一覧
SharePoint 2010 開発のステップ・バイ・ステップ
Windows Azure 入門
Windows Azure How-To 集
WCF / WF 入門
環境:.NET Framework 4.0 Community Technology Preview (CTP)Visual Studio 2010 Community Technology Preview (CTP)
こんにちは。
今回は、配置後のアクションについてです。この機能も前回同様、かなりの手作業が必要になっていますが、最終的にどのような機能になるかは未定ですのでご注意ください。
機能の背景
前回の繰り返しになりますが、 VSTO は、エンタープライズシステムを想定した手段です。
現実のアプリケーションでは、配布後の独自な環境設定なども必要になることでしょう。特に開発現場/利用現場では、ドキュメントの配置方法をカスタマイズしたいという声をよく聞きます。VSTO のアーキテクチャはある意味美しくできており、アドインではないドキュメントレベルのアプリケーションでは、ドキュメント (.xslx, .xltx, .docx など) とアセンブリ (.dll) は分離して管理するようになっています。例えば、ClickOnce で配布する際もアセンブリのみの配布や更新をおこない、ドキュメントは利用者が各自(独自)で編集をおこなってローカルに保存できるようになっています。
しかし、"現場" では、これを "美しいアプリケーション構造" と評価してくれることは少ないのが現状です。ドキュメントレベルの開発ではドキュメント上に表示領域のデザインやボタンの配置などをおこなっていることが多く、ClickOnce の配置の際にはドキュメントも一緒に配置してほしい (どうすれば良いの ?) といった質問をよく頂きます。これまでも、厳密にはドキュメントの配布ができるよう ClickOnce をカスタマイズすることはできたのですが、ファイルはすべてユーザーフォルダの深い階層の下にアプリケーションと一緒に配布されてしまい、期待する動きとは異なっていました。
動作確認
では、実際に動作を確認してみましょう。CTP では、まだ機能のベースが存在しているのみですので、今回は、すべて手作業で実施 しています (これが機能の最終形ではありません)。よって今回の設定方法はおぼえておいても意味がありませんが、内部の動きと仕組み (何がどのように拡張されているか) を理解しておくという意味で重要です。
今回は、上記の「機能の背景」に従って、Excel テンプレートのアプリケーションを作成し、このテンプレートファイル (.xltx) を ClickOnce と同時にデスクトップ上に配置するようなアプリケーションのサンプルを作成してみます。
まず、Visual Studio 2010 で、簡単な Excel テンプレートのプロジェクトを作成してみましょう。今回は「ExcelTemplate1」という名称の [Excel 2007 Template] プロジェクトを作成し、簡単に実装をおこいます (例:テンプレートドキュメント上にボタンを配置してメッセージボックスを表示、など)。
つぎに、配置後のカスタムアクションを実装します。上記のソリューションなどに [クラスライブラリ] のプロジェクトを追加し、以下の通り実装します。
この処理を見て頂くとわかりますが、通常のインストーラプロジェクトのカスタム動作のように、「初回のインストール時のみ設定」、「更新時も独自の処理を実施」、「アンインストール時にロールバック処理を実行」など、開発者により柔軟な処理を記述することが可能です。
つぎに、最初に作成した ExcelTemplate1 のプロジェクトに、上記のクラスライブラリのプロジェクトを参照追加します。そして、ExcelTemplate1 プロジェクトを共有フォルダなどに発行 (ClickOnce発行) すると、上記のクラスライブラリの dll (以降、このアセンブリの名称を DeploymentActions.dll とします) も一緒に発行先のフォルダに配置されます。
では、発行されたアプリケーションマニフェスト (ExcelTemplate1.dll.manifest) を以下のように手作業で編集し、テンプレートファイル (ExcelTemplate1.xltx) も同時に (ユーザーフォルダに) 配布をおこない、かつこの配布されたデータファイルをデスクトップ上にコピーする上記のカスタムアクションを実行するように設定しましょう。(変更後のマニフェストを最後に掲載しておきます)
2010/04/04 追記 :下記の 3 - 6 ですが、すみません、MSDN に記述している通り、以下の手順のほうが簡単です。。。 (下記を実施した場合、この 3 - 6 は不要です)Visual Studio のプロジェクト (上記の ExcelTemplate1) をいったんビルドするVisual Studio のプロジェクト (上記の ExcelTemplate1) に、「Template」という名称をフォルダを追加する (ソリューションエクスプローラで、プロジェクトをマウスで右クリックして、[追加] - [新しいフォルダ] を選択)作成したファイル内に、ビルドで作成された出力フォルダ内の ExcelTemplate.xltx を追加する (ソリューションエクスプローラでフォルダをマウスで右クリックして、[追加] - [既存の項目] を選択)なお、カスタマイズ機能が含まれたファイルでなければならないので、必ず、上記のビルドで作成された出力ファイルを追加してください。上記で配置された ExcelTemplate.xltx のプロパティウィンドウで、[ビルドアクション] プロパティとして「コンテンツ」、[出力ディレクトリにコピー] プロパティとして「新しい場合はコピーする」を選択する発行をおこなう
変更後のマニフェストは、以下の通りになるでしょう。(太字は追加した箇所です)
<?xml version="1.0" encoding="utf-8"?><asmv1:assembly . . .> . . . . . 途中省略 <dependency> <dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="ExcelTemplate1.dll" size="14848"> <assemblyIdentity name="ExcelTemplate1" version="1.0.0.0" language="neutral" processorArchitecture="msil" /> <hash> <dsig:Transforms> <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" /> </dsig:Transforms> <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> <dsig:DigestValue>sUq/+HxhLz3c4fQxlKr/551Vr/4=</dsig:DigestValue> </hash> </dependentAssembly> </dependency> <file name="Template\ExcelTemplate1.xltx" size="13066"> <hash> <dsig:Transforms> <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" /> </dsig:Transforms> <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> <dsig:DigestValue>XiFFsbicrL0OfpnhZ9TguJ/jkJc=</dsig:DigestValue> </hash> </file> <vstav3:addIn xmlns:vstav3="urn:schemas-microsoft-com:vsta.v3"> <vstav3:entryPointsCollection> <vstav3:entryPoints> <vstav3:entryPoint class="ExcelTemplate1.ThisWorkbook"> <assemblyIdentity name="ExcelTemplate1" version="1.0.0.0" language="neutral" processorArchitecture="msil" /> </vstav3:entryPoint> <vstav3:entryPoint class="ExcelTemplate1.Sheet1"> <assemblyIdentity name="ExcelTemplate1" version="1.0.0.0" language="neutral" processorArchitecture="msil" /> </vstav3:entryPoint> <vstav3:entryPoint class="ExcelTemplate1.Sheet2"> <assemblyIdentity name="ExcelTemplate1" version="1.0.0.0" language="neutral" processorArchitecture="msil" /> </vstav3:entryPoint> <vstav3:entryPoint class="ExcelTemplate1.Sheet3"> <assemblyIdentity name="ExcelTemplate1" version="1.0.0.0" language="neutral" processorArchitecture="msil" /> </vstav3:entryPoint> </vstav3:entryPoints> </vstav3:entryPointsCollection> <vstav3:update enabled="true"> <vstav3:expiration maximumAge="7" unit="days" /> </vstav3:update> <vstav3:postActions> <vstav3:postAction> <vstav3:entryPoint class="DeploymentActions.CopyTemplate"> <assemblyIdentity name="DeploymentActions" version="1.0.0.0" language="neutral" processorArchitecture="msil" /> </vstav3:entryPoint> <vstav3:postActionData> <Filename>ExcelTemplate1.xltx</Filename> </vstav3:postActionData> </vstav3:postAction> </vstav3:postActions> <vstav3:application> <vstov4:customizations xmlns:vstov4="urn:schemas-microsoft-com:vsto.v4"> <vstov4:customization> <vstov4:document solutionId="ac6e3fad-df42-413d-9ba8-b1d2fdac0915" /> </vstov4:customization> </vstov4:customizations> </vstav3:application> </vstav3:addIn></asmv1:assembly>
最後に、Visual Studio コマンドプロンプトなどを起動し、.NET Framework SDK の mage コマンドを以下の通り実行し、マニフェストと署名を再設定します。
Mage -sign "Application Files\ExcelTemplate1_1_0_0_0\ExcelTemplate1.dll.manifest" -Certfile "C:\Demo\PostDeploymentAction\ExcelTemplate1\ExcelTemplate1_TemporaryKey.pfx"Mage -update ExcelTemplate1.vsto -AppManifest "Application Files\ExcelTemplate1_1_0_0_0\ExcelTemplate1.dll.manifest"Mage -sign ExcelTemplate1.vsto -CertFile "C:\Demo\PostDeploymentAction\ExcelTemplate1\ExcelTemplate1_TemporaryKey.pfx"
発行先のディレクトリの ExcelTemplate1.vsto をクリックすると、ドキュメントレベルの機能が追加されると共に、テンプレートファイル ExcelTemplate.xltx がユーザーのデスクトップ上に配置されます。このファイル (テンプレート) は、インストールされたアセンブリと関連付いていますので (ファイルの _AssemblyLocation プロパティに記載されています)、テンプレートを開いてドキュメント上からインストールされたビジネスロジックを実行することが可能です。
また、上記のカスタムアクション (カスタムの CopyTemplate クラス) のメソッドで記載しているように、アンインストールをおこなうと、デスクトップ上のテンプレートもきれいに削除されます。
ここでは手作業による設定をおこないましたが (この手段はあくまでも暫定的なものです)、CTP には、VSTO アプリケーション配置後のカスタム動作のための基本的な仕組み (.NET Framework 4.0 のマニフェストの新仕様) が備わっていることがおわかり頂けるでしょう。
関連ナンバー
PingBack from http://blogs.msdn.com/tsmatsuz/archive/2009/01/28/tech-days-visual-studio-2010-vsto-ctp-3.aspx