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

コンパイル時の注意

 デプロイにおけるセキュリティの煩雑さを回避するために、厳密な名前キーでアセンブリにサインすることが最善です。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パーツを追加できます。

図2 - 【Webパーツの例】 複合Webパーツ内のAdventureWorksにバインドされたWebGridおよびWebGauge
図2 - 【Webパーツの例】 複合Webパーツ内のAdventureWorksにバインドされたWebGridおよびWebGauge

まとめ

 標準のWebControlをWebパーツページに直接追加することはできませんが、シンプルなラッパーを使用することで素早くこれを実現できます。

 WebPartクラスを作成して、2つのNetAdvantage for ASP.NETコントロール、すなわちWebGridおよびWebGaugeWebPartクラスに追加しました。WebPartの入れ物によって、Webパーツページにコントロールを挿入することが可能となり、基本のWebGaugeおよびWebGridは、WebPartの影に隠れて見えませんが有効な機能として動作します。

 任意のNetAdvantage for ASP.NETコントロールでこの同じパターンを使用すれば、Microsoft Office SharePoint Serverの開発を魅力的かつ敏速に達成することができるでしょう。

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

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

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング