Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

SharePoint ServerのWebパーツにリッチなUIを組み込むテクニック

Infragistics NetAdvantageチュートリアル その9 - SharePoint Webパーツでの利用

  • LINEで送る
  • このエントリーをはてなブックマークに追加

Microsoft Office SharePoint ServerではWebパーツフレームワークを通してWebアプリケーションを素早く構築できますが、一般的なASP.NETコントロールを組み込むにはいくつか工夫が必要です。本稿では、Webコントロールをラップし、SharePointアプリケーションにリッチなUIを追加する方法を紹介します。

目次

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のように追加作業なしで出力を自動的にレンダリングします。

図1 - WebPartのControlsコレクションにNetAdvantage for ASP.NETを追加
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を呼び出すことを推奨します。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:リッチクライアントエキスパート
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5