更新日: 2010 年 5 月 28 日

Visual Basic の内容はこちらに掲載しています。10 行でズバリ!! SharePoint の Web パーツ作成とデータ アクセス (VB)

このコンテンツのポイント

  • SharePoint の Web パーツの作成方法を理解する
  • LINQ を使用した SharePoint サーバーへの接続 (アクセス) 方法を理解する

今回紹介するコード

<VisualWebPart1UserControl.ascx.cs>

C#
. . .
using System.Linq;

. . .

protected void Page_Load(object sender, EventArgs e)
{
    デモ用サイトDataContext dc = 
        new デモ用サイトDataContext("http://kkdeveva07/sites/officedemo");
    var q = from c in dc.お知らせ
            where c.有効期限 < DateTime.Now.AddMonths(12)
            select c;
    GridView1.DataSource = q;
    GridView1.DataBind();
}
 

目次

  1. はじめに
  2. 開発環境を準備する
  3. SharePoint サーバーへのデータ接続 (アクセス) 方法について
  4. Web パーツをデザインする
  5. LINQ を使用するためのデータ コンテキストを作成する
  6. コードを作成する
  7. 動作確認とデバッグをおこなう

 


1. はじめに

SharePoint では、SharePoint の画面上で利用可能な UI 部品を .NET Framework の「Web パーツ」として提供することができます。UI (ユーザー インターフェイス) 機能を「Web パーツ」として提供することで、SharePoint の利用者は、SharePoint の画面を使用して、サイトのトップページや独自に作成したページなどに、必要な Web パーツを貼り付けて自由にページをカスタマイズすることができます。(図 1)



図 1. SharePoint で使用されている Web パーツ

ここでは、SharePoint サーバーに接続してサイト上のリスト・ライブラリーのデータ一覧を表示する簡単な Web パーツを作成し、Web パーツの作成方法と、LINQ を使用した SharePoint サーバーへのデータ接続方法を理解します。

ページのトップへ


2. 開発環境を準備する

ここで紹介する SharePoint を使った開発では、デバッグ用に SharePoint Server (または SharePoint Foundation) を使用します。

あらかじめ、開発用のマシン (64 ビットの Windows 環境) に SharePoint Server 2010 以降、もしくはダウンロード センターから入手可能な SharePoint Foundation 2010 以降をインストールしてください。

また、LINQ から SharePoint に接続するために後述するように「データ コンテキスト」を作成しますが、今回は、この作成のために Imtech ICT Integrated Solutions 社の拡張アドインを使用するため、下記の手順でこの拡張機能 (アドイン) のインストールをおこなってください。(なお、データ コンテキストをこのアドインを使用せずに作成することも可能ですが、この方法については後述します。)

  1. インターネットに接続をおこないます。
  2. Visual Studio を管理者権限で起動し、メニューの [ツール] - [機能拡張マネージャー] を選択すると、拡張機能マネージャーの画面が表示されます。
  3. この画面で、左のタブから [オンライン ギャラリー] を選択し、右上の検索ボックスに 「SPMetal」と入力すると、「Imtech Get SPMetal Definition Extension」が表示されるので、この拡張機能 (アドイン) の [ダウンロード] ボタンを押してアドインをインストールします。(図 2)



図 2. 拡張機能マネージャー

  ページのトップへ


3. SharePoint サーバーへのデータ接続 (アクセス) 方法について

今回のように、SharePoint のサーバー上から SharePoint サーバーに接続してプログラミングをおこなうには、以下の 2 通りのデータ アクセスの方法があります。(リモート マシンからのデータ接続方法については、本シリーズの別の回で説明します。)

接続方法 内容
オブジェクト モデルの使用

SharePoint サーバーが提供するクラス ライブラリ (Microsoft.SharePoint.dll) を使用して、このライブラリ内のクラス (SPSite クラス、SPWeb クラスなど) を使って SharePoint サーバーにアクセスします。

このプログラミングについては、「10 行でズバリ!! SharePoint のサンドボックス ソリューションの作成 (C#)」で紹介しています。

LINQ の使用 言語統合クエリ (LINQ) を使用して、SharePoint に問い合わせをおこない、データを検索できます。(データの更新も可能です)

今回は、上記の LINQ を使用します。

ページのトップへ


4. Web パーツをデザインする

今回は、Web パーツ表示時に SharePoint のリスト アイテムの一覧を表示するためのグリッドを配置します。
まず、Visual Studio を管理者権限で起動します。

[ファイル] メニューの [新規作成] を選択して、[プロジェクト] をクリックします。表示される [新しいプロジェクト] ダイアログ ボックスの左のペインで [Visual C#] - [SharePoint] - [2010] ノードを展開し、図 3 の通り、テンプレートとして [視覚的 Web パーツ] をクリックして [OK] ボタンを押します。



図 3. プロジェクト テンプレートを選択してプロジェクトを作成

ウィザードが表示されるので、デバッグ時に使用する SharePoint のサイトの URL を設定し (図 4)、[完了] ボタンを押すと、プロジェクトが新規作成されます。(後述するデバッグの際に、作成した Web パーツがこのサイトに配置され、デバッグをおこなうことができます。)

図 4. デバッグ用の SharePoint サイトの指定

プロジェクトの VisualWebPart1UserControl.ascx (ユーザー コントロール) を開き、デザイン モードに切り替え、ツールボックス (左) から [GridView] をドラッグ アンド ドロップして配置します。(図 5)

図 5. GridView の配置

ページのトップへ


5. LINQ を使用するためのデータ コンテキストを作成する

つぎに、前述したように、SharePoint から LINQ を使用してリストのデータ一覧を取得し、上記で配置した GridView に表示します。このため、このプロジェクト内に、LINQ から SharePoint に接続するための「データ コンテキスト」を追加しますが、今回は、前述したように、あらかじめインストールした「Imtech Get SPMetal Definition Extension」のアドイン機能を使用します。

Visual Studio のメニュー [表示] - [サーバー エクスプローラー] を選択して [サーバー エクスプローラー] を表示します (図 6)。



図 6. サーバー エクスプローラー

サーバー エクスプローラーで [SharePoint 接続] のノードを展開し、ここに、今回使用する SharePoint のサイトが表示されていることを確認してください。(もし、今回使用する SharePoint サイトが表示されていない場合は、右上の のアイコンをクリックして、該当の SharePoint サイトを追加してください。)

サーバー エクスプローラーで、今回使用する SharePoint サイトをマウスで選択して右クリックをおこない、[Get SPMetal definition] コマンドを選択します。(図 7)



図 7. Get SPMetal definition の選択

上記で、プロジェクトに LINQ 接続のための専用のデータ コンテキストが作成されます。(図 8)

図 8. 追加されたデータ コンテキスト

Note : ここでは、あらかじめインストールされた拡張機能 (アドイン) を使用して LINQ 用のデータ コンテキストを使用しましたが、アドインを使用せず手動でこの作成をおこなう場合は、下記の手順で実施します。

  1. SharePoint 2010 管理シェルを管理者権限で起動します。
  2. 下記の通り、spmetal コマンドを実行します。(下記で、サイト URL、名前空間、コード ファイル名は、環境にあわせて適当な名前を設定してください。)

    spmetal /web:http://localhost/sites/officedemo /namespace:MyTestNamespace /code:SiteDataContext.cs
  3. コード ファイル (上記の場合、SiteDataContext.cs) が作成されるので、Visual Studio のプロジェクトにこの作成されたコードを追加します。(ソリューション エクスプローラーでプロジェクトをマウスで右クリックし、[追加] - [既存の項目] を選択します。)

ページのトップへ


6. コードを作成する

つぎに、上記で作成されたデータ コンテキストを使用して SharePoint にリストのデータ一覧の問い合わせをおこなって、GridView に表示します。今回は、SharePoint が既定で持っている 「お知らせ」 リストのデータを検索して表示します。

ユーザー コントロール (VisualWebPart1UserControl.ascx) をマウスで右クリックして [コードの表示] を選択して、コード ファイル (VisualWebPart1UserControl.ascx.cs) を表示します。
コード ファイルに、下記の LINQ 用の名前空間を追加します。

C#
using System.Linq;
 

コード中の Page_Load メソッドに、下記の通りコードを記述します。ここでは、上記で挿入したデータ コンテキスト (デモ用サイト) を使用して、「お知らせ」リストのデータを取得し、有効期限が 12 ヶ月後より前のデータを検索して GridView に設定しています。(下記のコードで、「デモ用サイト」は、サイトの名前にあわせて適宜変更してください。)

C#
protected void Page_Load(object sender, EventArgs e)
{
    デモ用サイトDataContext dc = 
        new デモ用サイトDataContext("http://kkdeveva07/sites/officedemo");
    var q = from c in dc.お知らせ
            where c.有効期限 < DateTime.Now.AddMonths(12)
            select c;
    GridView1.DataSource = q;
    GridView1.DataBind();
}
 

以上で、Web パーツが完成しました。

Note : ここでは、LINQ を使用した「検索」をおこないましたが、LINQ を使用して「データの更新」(追加/変更/削除) をおこなうこともできます。

ページのトップへ


7. 動作確認とデバッグをおこなう

Visual Studio で F5 キーを押して、ビルドとデバッグ実行をおこないます。

デバッグ実行を開始すると、Web パーツを冒頭で選択したデバッグ用のサイトに配置してブラウザが起動し、Visual Studio がデバッグを開始します。(ブレーク ポイントを置いて、変数の中身などを確認することもできます。)

Web パーツを挿入して動作確認をおこなうため、表示されるブラウザで、ページの編集アイコン (下図の赤の囲み) をクリックします。(ページが編集モードに切り替わります。)

図 9. ページの編集開始

リボンの [挿入] タブ [Web パーツ] ボタンをクリックします。

図 10. Web パーツの挿入

表示される画面で、[Custom] カテゴリの 「VisualWebPart1」を選択して、[追加] ボタンをクリックします (図 11)。

図 11. 挿入する Web パーツの選択

ページの保存をおこなうと、下図の通り、GridView に「お知らせ」リストの内容が表示されます。

図 12. 表示された Web パーツ

Note :Web パーツの配置と削除について
開発用の SharePoint サーバーに Web パーツを配置するには、Visual Studio でソリューション エクスプローラーからプロジェクトを右クリックして [配置] メニューを選択します。
また、SharePoint にインストールされたフィーチャー (今回の場合、Web パーツ) を削除するには、Visual Studio でソリューション エクスプローラーからプロジェクトを右クリックして [取り消し] メニューを選択するとアンインストールされます。しかし、Web パーツの場合は、さらに、以下の手順で、Web パーツ ギャラリーに登録されたエントリの削除もおこなってください。

  1. SharePoint の画面で、[サイトの操作] - [サイトの設定] メニューを選択します。
  2. 表示される画面で、[ギャラリー] カテゴリーの [Web パーツ] をクリックします。

  3. 登録されている Web パーツの一覧が表示されるので、この一覧から登録されている Web パーツを選択 (チェック ボックスをチェック) して、リボンの [ドキュメントの削除] をクリックします。

Note : LINQ を使用した検索では、上記の通り、表示されているサイト名、リスト名、列名などがプログラム コードでそのまま使用されるため (日本語名の場合は、作成されるクラス、プロパティなども日本語になります)、SharePoint の利用者がリスト名、列名などを変更すると、上記のプログラムは動作しなくなるので注意してください。
こうした厳密性が必要とされるアプリケーション開発では、LINQ ではなく、前述で紹介したオブジェクト モデル (Microsoft.SharePoint.dll のクラス ライブラリ) を使用したデータ アクセスをおこなってください。


Code Recipe

ページのトップへ