Share via


SharePoint Foundation REST インターフェイスを実装する

最終更新日: 2010年12月3日

適用対象: SharePoint Foundation 2010

Windows Communication Foundation (WCF) Web サービス作成チュートリアルのこのセクションでは、Microsoft Visual Studio 2010 で、ADO.NET Data Services および Microsoft SharePoint Foundation Representational State Transfer (REST) インターフェイスを使用する Windows フォーム アプリケーションを作成し、2 つの DataGridView コントロールでリスト データを操作する方法について説明します。SharePoint Foundation REST インターフェイスは、2 つのコントロールでプロジェクト リストと社員リストを操作するためのデータ コンテキストを提供します。社員コントロールには、ユーザーがプロジェクト コントロールで選択したプロジェクト アイテムに関連付けられている社員が表示されます。また、プロジェクト コントロールを使用すると、ユーザーがプロジェクト データ ソースのアイテムを変更したり、これらのデータで SharePoint リスト データを更新したりできます。

Windows フォーム アプリケーションを作成してリスト データを操作する

  1. Visual Studio を開き、[ファイル] をクリックして [新規作成] をポイントし、[プロジェクト] をクリックします。[新しいプロジェクト] ダイアログ ボックスの [インストールされているテンプレート] ボックスで、[Visual Basic] または [Visual C#] を選択し、[Windows]、[Windows フォーム アプリケーション] の順に選択して、[名前] ボックスに「ProjectTracker」と入力します。[OK] をクリックします。

  2. SharePoint サイトに格納されているデータに接続するには、[データ] をクリックし、[新しいデータ ソースを追加する] をクリックします。データ ソースの構成ウィザードで [SharePoint] を選択し、[次へ] をクリックします。

  3. [サービス参照の追加] ボックスに、ListData.svc (SharePoint Foundation REST インターフェイスへのアクセスを提供するサービス) へのパスを入力します。このパスにはリストが含まれる Web サイトが必要です。また、_vti_bin 仮想ディレクトリを指定する必要があります (例: http:// Server/sites/SiteCollection/WebSite/_vti_bin/ListData.svc)。サービス参照をプロジェクトに追加するには、[移動]、[OK]、[完了] の順にクリックします。サービス参照は、アプリケーションを REST インターフェイスに接続し、SharePoint Foundation サイトのエンティティ データ モデルを取得して、エンティティ クラスを定義します。このサービス参照には、厳密に型指定されたデータ ソースとして SharePoint Foundation リスト データが接続されます。

  4. Form1.cs の [デザイン] ビューで、[データ]、[データ ソースの表示] の順にクリックし、[データ ソース] ボックスを開きます。リスト データを操作するための UI を提供するには、プロジェクト リストおよび社員リストの DataGridView コントロールを [Form1] にドラッグします。

  5. DataGridView コントロールに不要な列が表示されないようにするには、コントロールを右クリックして [列の編集] をクリックし、[列の編集] ボックスの [選択した列] ボックスで各列を選択し、[削除] をクリックします。プロジェクト DataGridView コントロールから、[タイトル]、[説明]、および [期限日] を除くすべての列を削除します。社員 DataGridView コントロールから、[氏名]、[役職]、および [チーム] を除くすべての列を削除します。[バインド列のプロパティ] ボックスで、プロジェクト リストの [タイトル] 列と社員リストの [氏名] 列を [フィル] に設定し、[OK] をクリックします。

  6. DataGridView コントロールを SharePoint Foundation Web サイトのリスト データに設定するには、Form1 の端部をダブルクリックしてコードを表示します。using ステートメントを使用して、作成した ServiceReference1 名前空間をインポートします。次に、コンストラクターを使用して、厳密に型指定されたデータ コンテキストを作成し、リスト データを表します。このデータ コンテキストを使用すると、要求を Web サイトに送信できます。コンストラクターでは、REST インターフェイスを提供する WCF サービスの URI を指定し、指定した Web サイトのリスト データにアクセスします。次に例を示します。

    Imports ProjectTracker.ServiceReference1
    Imports System.Net
    
    Public Class Form1
    
        Private Shared websiteUrl As String = "http://YourServer/sites/YourSiteCollection/YourSite"
    
        Private context As New MyWebsiteDataContext(
            New Uri(websiteUrl + "/_vti_bin/listdata.svc"))
    
        Public Sub New()
            InitializeComponent()
        End Sub
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace ProjectTracker
    {
        using ServiceReference1;
        using System.Net;    
    
        public partial class Form1 : Form
        {
    
        private static string websiteUrl= "http://YourServer/sites/YourSiteCollection/YourSite";
    
            MyWebsiteDataContext context = new MyWebsiteDataContext(
                new Uri(websiteUrl + "/_vti_bin/listdata.svc"));
    
            public Form1()
            {
                InitializeComponent();
            }
    
  7. Form1_Load イベントで要求の認証を設定します。using ステートメントを追加し、System.Net 名前空間をインポートします。Windows 統合認証を使用すると、資格情報キャッシュの既定の資格情報を使用できます。また、Form1_Load イベントで、データ コンテキスト クラスを使用して、Visual Studio によって生成されたデータ ソースを、プロジェクト DataGridView コントロールに対して設定します。次に例を示します。

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            context.Credentials = CredentialCache.DefaultCredentials
    
            ProjectsBindingSource.DataSource = context.Projects
        End Sub
    
        private void Form1_Load(object sender, EventArgs e)
        {
            context.Credentials = CredentialCache.DefaultCredentials;
            projectsBindingSource.DataSource = context.Projects;
        }
    
  8. 社員 DataGridView コントロールをリスト データに設定するには、プロジェクト データ ソースで CurrentChanged イベントのハンドラーを作成します。ユーザーがプロジェクト DataGridView でプロジェクトを選択すると、社員 DataGridView は、選択されたプロジェクトに従って、従業員のフィルターされたリストによって設定されます。[デザイン] ビューで CurrentChanged イベントを追加するには、フォームの下で [projectsBindingSource] を右クリックして [プロパティ] をクリックし、[プロパティ] ウィンドウのイベント アイコンをクリックして、[CurrentChanged] イベントをダブルクリックします。

  9. 統合言語クエリ (LINQ) を使用して、現在選択されているプロジェクトの ID と同じプロジェクト ID を持つ社員をフィルターします。現在選択されているプロジェクトを取得するには、プロジェクト データ ソースの Current プロパティを使用し、現在のアイテムを [ProjectsItem] 型としてキャストします。次に例を示します。

        Private Sub ProjectsBindingSource_CurrentChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProjectsBindingSource.CurrentChanged
            EmployeesBindingSource.DataSource =
                From emp In context.Employees _
                Where emp.Project.Id = DirectCast(ProjectsBindingSource.Current, ProjectsItem).Id _
                Select emp
        End Sub
    
        private void projectsBindingSource_CurrentChanged(object sender, EventArgs e)
        {
            employeesBindingSource.DataSource =
                from emp in context.Employees
                where emp.Project.Id == ((ProjectsItem)projectsBindingSource.Current).Id
                select emp;
        }
    

    この例では、社員リストのプロジェクト ルックアップ列からマップされたプロジェクト リストのプロジェクト ナビゲーション プロパティが使用されていることに注意してください。

  10. 更新サポートを追加するには、ユーザーがフォーム データのデータを変更するタイミングが Web サイトで変更されるように、[デザイン] ビューで [保存] ボタンを有効にします。それには、[Form1] メニューで [保存] アイコンを右クリックし、[有効] をクリックします。[保存] ボタンをダブルクリックしてコードを表示し、[projectsBindingNavigatorSaveItem_Click] イベント ハンドラーを挿入します。次のコード行を追加し、ADO.NET Data Services に対して変更を Web サイトに保存するように指示します。

        Private Sub ProjectsBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProjectsBindingNavigatorSaveItem.Click
            context.SaveChanges()
        End Sub
    
        private void projectsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            context.SaveChanges();
        }
    
  11. Windows フォーム アプリケーションを作成しているので、変更されたオブジェクトに関してデータ コンテキストに通知するコードを追加する必要があります。CurrentItemChanged イベントを追加するには、まず、[デザイン] ビューで [projectBindingSource] を右クリックして [プロパティ] をクリックし、[プロパティ] ウィンドウのイベント アイコンをクリックします。次に、[CurrentItemChanged] イベントをダブルクリックし、Form1.cs にハンドラーを挿入します。このハンドラーで ADO.NET データ コンテキストの UpdateObject(Object) メソッドを使用し、Current プロパティを使用してどのプロパティが変更されているかを示します。次に例を示します。

        Private Sub ProjectsBindingSource_CurrentItemChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProjectsBindingSource.CurrentItemChanged
            context.UpdateObject(ProjectsBindingSource.Current)
        End Sub
    End Class
    
        private void projectsBindingSource_CurrentItemChanged(object sender, EventArgs e)
        {
            context.UpdateObject(projectsBindingSource.Current);
        }
    }}
    
  12. フォームをテストするには、F5 キーを押して、プロジェクト DataGridView のアイテムに対して変更をいくつか加えます。[保存] をクリックすると、その変更が Web サイトに反映されます。

    注意

    変更が反映されていることを確認するには、[保存] をクリックする前に、変更を加えたセルの外をクリックしなければならないことがあります。

完全な Form1 コード例については、「SharePoint Foundation の WCF Form1 サンプルを完了する」を参照してください。

関連項目

概念

SharePoint Foundation REST インターフェイスを実装する

ADO.NET Data Services を使用して SharePoint Foundation のクエリを実行する

その他の技術情報

WCF REST Programming Model