CodeZine(コードジン)

特集ページ一覧

SharePoint 2010のWebパーツを作成

Visual Studio 2010によるSharePoint 2010開発の基本(2)

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

目次

SharePointのリストの取得や更新を行うWebパーツの作成

 まず、Visual Studio 2010を使用してSharePoint 2010のWebパーツを作成してみましょう。

サンプルの概要

 SharePointサイトに含まれる「お知らせ」リストの取得や更新を行うWebパーツを作成します(図1)。データアクセスには、LINQ to SharePointを使用します。

図1:サンプル実行例
図1:サンプル実行例

サンプルの作成

 では、実際にサンプルを作成してみましょう。以下の手順で作成します。

[1]新しいプロジェクトを作成する

 SharePoint 2010のWebパーツ用の新しいプロジェクトを作成します。

 まず、管理者権限でVisual Studio 2010を起動します。これは、配置の際などVisual StudioからSharePointサーバーにアクセスするためには、管理者権限が必要となるためです。

 次に、[新しいプロジェクト]ダイアログボックス中で、[インストールされたテンプレート]から[Visual C#]-[SharePoint]-[2010]を選択し、右側のテンプレートの一覧から[視覚的Webパーツ]を選択します。プロジェクト名には「VisualWebPartProjectSample」と入力し、[OK]ボタンをクリックします(図2)。

図2:[新しいプロジェクト]ダイアログボックス
図2:[新しいプロジェクト]ダイアログボックス

 すると、[SharePoint カスタマイズウィザード]が表示されます。

 ここでは、ファームソリューションしか選択できないようになっていますが、SharePointソリューションの信頼レベルとしては、サンドボックスソリューションというもう1つの選択肢もあります。ファームソリューションは、IISワーカープロセスで実行されるのに対し、サンドボックスソリューションでは、SharePointユーザーコードソリューションワーカープロセスと呼ばれるIISワーカープロセスとは別のプロセス上で実行されるため、IISの再起動を行う必要がありません。サンドボックスソリューションのセキュリティ上の制限として、サーバー環境全体に影響を与えないよう、特定の機能のみにアクセスできます。

 サンドボックスソリューションによるWebパーツの作成も可能ですが、「視覚的Webパーツ」プロジェクトテンプレートを使用したWebパーツ作成時には、ファームソリューションしか選択できません。

 ここで、使用するSharePointサイトのURLを入力し、[完了]ボタンをクリックします(図3)。

図3:[SharePoint カスタマイズウィザード]
図3:[SharePoint カスタマイズウィザード]

 SharePoint 2010のWebパーツ用の新しいプロジェクトが作成されます。ソリューションエクスプローラーで確認すると、図4のようなソリューション構成となっています。[VisualWebPart1]という名前のWebパーツ用フォルダー内に、[VisualWebPart1UserControl.ascx]という名前のユーザーコントロールが作成されていることが分かります。

図4:新規プロジェクト作成直後のソリューション構成
図4:新規プロジェクト作成直後のソリューション構成

[2]LINQ to SharePoint用クラスを生成する

 SharePoint 2010に付属しているSPMetalというコマンドラインのツールを使用して、LINQ to SharePointのためのクラスを生成します。

 Windowsの[スタート]メニューから、[すべてのプログラム]-[Microsoft SharePoint 2010 Products]内の[SharePoint 2010 管理シェル]を起動します。

 管理シェル内で、次のSPMetalコマンドを実行します。

spmetal.exe /web:http://yhirose-pc /namespace:VisualWebPartProjectSample.VisualWebPart1 /code:SampleDC.cs

 /webオプションには、SharePointサイトのURLを指定します。/namespaceオプションには、生成されるクラスの名前空間を、/codeオプションには、出力ファイル名を指定します。これで、SharePointサイトのデータをLINQで操作するためのデータコンテキストやエンティティのクラスが生成されます。

 SPMetalコマンドには他にもいくつかのオプションを指定できます。詳細は、MSDNライブラリの「SPMetal」のページを参照してください。

[3]生成されたクラスをプロジェクトに追加する

 手順[2]で生成されたLINQ to SharePoint用クラスをプロジェクトに追加します。

 ソリューションエクスプローラーで、[VisualWebPart1]を右クリックし、[追加]-[既存の項目]をクリックします。表示された[既存項目の追加]ダイアログで、手順[2]で生成されたSampleDC.csファイルを選択し、[追加]ボタンをクリックします。

[4]参照設定に、Microsoft.SharePoint.Linqを追加する

 手順[3]で追加したLINQ to SharePoint用クラスはそのままだとコンパイルエラーになるため、プロジェクトの参照設定にMicrosoft.SharePoint.Linqを追加する必要があります。

 ソリューションエクスプローラーで、[参照設定]を右クリックし、[参照の追加]をクリックします。表示された[参照の追加]ダイアログで、[.NET]タブ内の[Microsoft.SharePoint.Linq]を選択し[OK]ボタンをクリックします(図5)。

図5:[参照の追加]ダイアログボックス
図5:[参照の追加]ダイアログボックス

[5]ユーザーコントロールの画面をデザインする

 ユーザーコントロール(VisualWebPart1UserControl.ascx)の画面デザインを行います。VisualWebPart1UserControl.ascxを[ソース]ビューで開き、自動生成されたWebパーツ用のディレクティブの下に、リスト1のようにコードを追加します(太字部分)。

[リスト1]ユーザーコントロールの画面デザイン(VisualWebPart1/VisualWebPart1UserControl.ascx)
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %> 
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="VisualWebPart1UserControl.ascx.cs" Inherits="VisualWebPartProjectSample.VisualWebPart1.VisualWebPart1UserControl" %>

<h3>お知らせ リストへのアクセスサンプル</h3>

<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
<br />
タイトル
<br />
<asp:TextBox ID="TitleTextBox" runat="server"></asp:TextBox>
<br />
本文
<br />
<asp:TextBox ID="BodyTextBox" runat="server" TextMode="MultiLine"></asp:TextBox>
<br />
<asp:Button ID="AddButton" runat="server" Text="追加" onclick="AddButton_Click" />

 SharePointサイトの「お知らせ」リストを表示するために、GridViewコントロールを配置します。そして、「お知らせ」リストに対するデータ追加用としてTextBoxコントロールを2つ、Buttonコントロールを1つ配置します。

 修正後のVisualWebPart1UserControl.ascxを[デザイン]ビューで表示すると、図6のようになります。

図6:ユーザーコントロールのデザイン
図6:ユーザーコントロールのデザイン

[6]ユーザーコントロールのコードを実装する

 ユーザーコントロールが動作するように、コードを実装します。

 VisualWebPart1UserControl.ascxの[デザイン]ビューで、[追加]ボタン(AddButton)をダブルクリックすると、コードビハインドファイルのVisualWebPart1UserControl.ascx.csが表示され、[追加]ボタンのClickイベントハンドラー(AddButton_Click)が生成されます。

 VisualWebPart1UserControl.ascx.csを、リスト2のように修正します。

[リスト2]ユーザーコントロールの実装(VisualWebPart1/VisualWebPart1UserControl.ascx.cs)
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

// (1)追加したusingディレクティブ
using System.Linq;
using Microsoft.SharePoint;

namespace VisualWebPartProjectSample.VisualWebPart1
{
    public partial class VisualWebPart1UserControl : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Refresh();
            }
        }

        private void Refresh()
        {
            // (2)データコンテキストの取得
            var dc = new SampleDCDataContext(SPContext.Current.Web.Url);

            // (3)LINQクエリの作成
            var query = from o in dc.お知らせ
                        select o;

            // (4)GridViewコントロールにバインド
            GridView1.DataSource = query;
            GridView1.DataBind();

            // 入力内容のクリア
            TitleTextBox.Text = string.Empty;
            BodyTextBox.Text = string.Empty;
        }

        protected void AddButton_Click(object sender, EventArgs e)
        {
            // データコンテキストの取得
            var dc = new SampleDCDataContext(SPContext.Current.Web.Url);

            // (5)新規オブジェクトの作成
            var o = new お知らせ();
            o.タイトル = TitleTextBox.Text;
            o.本文 = BodyTextBox.Text;

            // (6)オブジェクトの追加
            dc.お知らせ.InsertOnSubmit(o);
            dc.SubmitChanges();

            Refresh();
        }
    }
}

 (1)では、LINQやSharePoint用クラスライブラリを使用するための2つのusingディレクティブを追加しています。

 (2)では、SharePointサイトのアクセスするためのLINQ to SharePointのデータコンテキストを作成しています。SPContext.Current.Web.Urlプロパティにより、現在実行中のSharePointサイトのURLを取得します。SPContextクラスやSPWebクラスは、Microsoft.SharePoint名前空間で定義されているSharePoint用クラスライブラリに含まれています。

 (3)で「お知らせ」リスト内の全データを取得するLINQクエリを作成し、(4)でGridViewコントロールに結果をバインドしています。[追加]ボタンのClickイベントハンドラー内の、(5)では「お知らせ」リストの新しいアイテムを作成し、(6)ではアイテムを追加し変更を反映しています。同様の方法で、SharePointサイトに含まれる「予定表」や「タスク」などの他のリストにも簡単にアクセスできます。

 これで、サンプルWebパーツが完成しました。


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

バックナンバー

連載:Visual Studio 2010によるSharePoint 2010開発の基本

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト 広瀬 嘉久(株式会社ジェイテックジャパン)(ヒロセ ヨシヒサ )

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5