SharePointの概要
Microsoft Office SharePoint Server(MOSS)は、組織内のコミュニケーションやコラボレーションを促進する、強力なWebベースのポータルパッケージです。
MOSSを使用すると、Webパーツフレームワークを通してWebアプリケーションを素早く構築することができます。Webパーツはパッケージされたコンポーネントになっており、ページに組み込むと、データの視覚化やデータ入力補助といった機能をアプリケーションに追加します。
この記事では、NetAdvantage for ASP.NETのリッチなコントロールを活用して、MOSS上でのWebパーツ作成をスムーズに行う方法を説明します。
SharePointの要件
MOSS Webパーツページでは、すべてのコンポーネントはWebPart
基本クラスから派生する必要があります。一方、NetAdvantage for ASP.NETコントロールは、コアのASP.NET基本クラスであるWebControl
から派生しています。
この不一致のため、NetAdvantage for ASP.NETコントロールはWebパーツページに直接追加することができません。
SharePointのWebパーツとしてNetAdvantage for ASP.NETを組み込む
この問題の解決方法は、WebControl
を複合Webパーツにラップすることです。これにより、通常のASP.NETコントロールでもSharePoint Webパーツページの世界に持ってくることができます。
「複合Webパーツ」は、複数の一般的なWebControl
をホストするシンプルな入れ物です。モジュール化とパーソナライズ性を特徴とするWebパーツフレームワークの世界に、さらに標準的なWebControlがもつ機能性と再利用性をもたらします。
このように、一つまたは複数のNetAdvantage for ASP.NET Webコントロールを中心にWebパーツの入れ物を作成するのは簡単です。ユーザーのニーズによって、ラッパーをシンプルにすることも高度にすることもできます。
より高度なラッパーの場合、エンドユーザーがカスタマイズできるように、パブリックプロパティをWebパーツに追加することができます。さらに一歩進めて、データバインディングやドリルダウンのシナリオを実現するコネクションポイントの追加さえできます。
以下の例では、このうち基本、すなわちシンプルな入れ物を対象として話を進めます。
実装
作業を開始するには、派生元にしたい基本クラスを決定する必要があります。
以前のバージョンのMicrosoft Office SharePointでは、Webパーツが派生できるのはSharePointアセンブリで定義されたSharePoint WebPart
クラスからに限定されていました。Windows SharePoint Services 3.0(WSS)は.NET Framework 2.0の最上部に構築されるので、.NET FrameworkのWebPart
クラスをもとに派生することが可能となりました。
.NET Framework WebPart
基本クラスの使用が推奨されますが、SharePointWebPart
クラスの使用を検討してもよいと思われる理由がいくつかあります。詳細はMSDNの記事を参照してください。
本稿ではSharePointで定義したWebPart
クラスを使用します。これによって、以前のバージョンのWSSと後方互換性を確保することができます。
Webパーツの作成
使用する基本クラスを決定したら、Visual Studio 2005を使用して新しいC#またはVB.NETクラスライブラリプロジェクトを作成します。以下のMSDNトピックを使用して作業を開始できます。
上記の「Hello World」スタイルの記事では、コントロールのRender
メソッドのオーバーライドが拡張性モデルとして使用されましたが、複合Webパーツを作成する際には、レンダリング処理などの作業を子コントロールに分担することができます。そのため、必ずしもRender
メソッドをオーバーライドする必要がなくなる代わりに、WebPartのControlsコレクション内に作成されたコンポジションモデルに依存することになります。
WebPartのControlsコレクションに、NetAdvantageのWebGridなどフル機能を持ち合わせたASP.NETコントロールを追加することによって、図1のように追加作業なしで出力を自動的にレンダリングします。
using igGrid = Infragistics.WebUI.UltraWebGrid; using igGauge = Infragistics.WebUI.UltraWebGauge; // ……(略)…… private igGrid.UltraWebGrid _Grid; private igGrid.UltraWebGrid Grid { get { this.EnsureChiidControls(); return this._Grid; } } private igGauge.UltraGauge _Gauge; private igGauge.UltraGauge Gauge { get { this.EnsureChildControls(); return this._Gauge; } } protected override void CreateChildControls() { base.CreateChildControls(); //create our composites this._Gauge = new igGauge.UltraGauge(); this._Gauge.ID = "Gauge"; this._Grid = new igGrid.UltraWebGrid("Grid"); //add composites to controls collection //this is the most important piece this.Controls.Add(this._Gauge); this.Controls.Add(this._Grid); }
上記のコードでは、WebGrid
およびWebGauge
を作成し、それらをカスタムのパーツのControls
コレクションに追加しています。CreateChildControls
は基本コントロールフレームワークによって自動的に呼び出されるメソッドで、EnsureChildControls
メソッドによって一度だけ呼び出されることが保証されます。子コントロールから起動したイベントが正しく発生することを保証するために、WebPart
クラスのOnInit
メソッド内からEnsureChildControls
を呼び出すことを推奨します。
コンパイル時の注意
デプロイにおけるセキュリティの煩雑さを回避するために、厳密な名前キーでアセンブリにサインすることが最善です。Visual Studioに含まれるユーティリティであるsn.exeを使用してキーを生成できます。
コマンドの文法は次のとおりです。
sn -k [path]
厳密な名前キーが配置されている、ファイルのパスと名前で[path]を置き換えます。
Project
プロパティを使用してキーファイルを指定します。これはアセンブリにサインするために使用されます。
デプロイ
MOSSにカスタムアセンブリと共に、参照として使用されるInfragisticsアセンブリをコピーする必要があります。コードアクセスセキュリティの例外を回避するためにGACにアセンブリをインストールするのが最善です。
NetAdvantage for ASP.NET [CLR2]アセンブリには組み込みリソースとして必要なJavaScriptファイルが含まれているので、スクリプトファイル用の仮想ディレクトリの作成は不要です。ただし、カスタムのイメージやCSSスタイルシートを使用する場合、それらのリソース用のディレクトリを設定したいことがあります。WSSにディレクトリを通知して「ワイルドカードインクルード」のためにマークをすることも必要です。
IISを使用して、リソースすべてを含む仮想ディレクトリをSharePointサイトに追加できます。仮想ディレクトリを追加したら、ディレクトリを含めるためにSharePointサーバー管理ページを使用します。
管理パスの定義
管理パスを定義するには、最初にSharePointサーバー管理ページを開きます。[アプリケーション構成の管理]タブをクリックし、[SharePoint Webアプリケーション構成の管理]セクションで[管理パスの定義]をクリックします。仮想ディレクトリに適切な相対URLを入力し、[種類]ドロップダウンボックスから[ワイルドカードを使用した管理対象パス]オプションを選択します。最後に[OK]をクリックします。
Webパーツの使用
これでカスタムのWebパーツの構築とデプロイができました。ではこれをページに追加しましょう。WebパーツはWebパーツ定義ファイル(.dwp)を使用してインポートされます。Webパーツのための.dwpファイルを作成するには、前述のMSDNのガイドを参考にWebパーツをSafeControlとして登録します。
パーツの登録が完了して.dwpファイルを作成したら、SharePoint Webパーツページから[インポート]メニュー項目を使用してカスタムのパーツをインポートします。インポートが成功すれば、ページの任意の領域にカスタムのWebパーツを追加できます。
まとめ
標準のWebControl
をWebパーツページに直接追加することはできませんが、シンプルなラッパーを使用することで素早くこれを実現できます。
WebPart
クラスを作成して、2つのNetAdvantage for ASP.NETコントロール、すなわちWebGrid
およびWebGauge
をWebPart
クラスに追加しました。WebPart
の入れ物によって、Webパーツページにコントロールを挿入することが可能となり、基本のWebGauge
およびWebGrid
は、WebPart
の影に隠れて見えませんが有効な機能として動作します。
任意のNetAdvantage for ASP.NETコントロールでこの同じパターンを使用すれば、Microsoft Office SharePoint Serverの開発を魅力的かつ敏速に達成することができるでしょう。