SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

リッチクライアントエキスパート(AD)

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

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

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

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を呼び出すことを推奨します。

次のページ
コンパイル時の注意

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
リッチクライアントエキスパート連載記事一覧

もっと読む

この記事の著者

インフラジスティックス・ジャパン株式会社 山田 達也(インフラジスティックス・ジャパンカブシキガイシャ ヤマダ タツヤ)

国内ソフトベンダーにて多数の.NETプロジェクトに携わる。現在はインフラジスティックス・ジャパンで開発サポートを担当しつつ、リッチクライアントやRIA技術を広めるべくエバンジェリスト修行中。趣味は全国競馬場巡りで夢はラスベガス在住。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2826 2008/08/21 14:09

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング