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

最終更新日: 2010年6月17日

適用対象: SharePoint Foundation 2010

この記事の内容
ADO.NET Data Services Framework を使用してクライアントからクエリを実行する長所と短所
サポートされるクライアント アプリケーションの種類
開発サーバーに ADO.NET Data Services をインストールする
SharePoint データ ソースを使用する ADO.NET Data Services のプログラミング

このトピックでは、REST (Representational State Transfer) Web サービスである ADO.NET Data Services フレームワーク (英語) を使用して、Microsoft SharePoint Foundation 内のリスト データのクエリを実行する方法の概要について説明します。このトピックは、このフレームワークに関する基本的な知識があることを前提としています。このフレームを使用してプログラムを作成する方法の詳細については、「Overview: ADO.NET Data Services (英語)」および「Using Microsoft ADO.NET Data Services (英語)」を参照してください。

フレームワークを使用して、データを追加、変更、および削除することもできます。

ADO.NET Data Services Framework を使用してクライアントからクエリを実行する長所と短所

ADO.NET Data Services Framework を使用してクライアント アプリケーションから SharePoint Foundation データのクエリを実行する場合の主な利点は、クエリ リスト データが厳密に型指定されることです。それぞれ種類が大きく異なるリストのアイテムを表している場合であっても、SharePoint Foundation クライアント オブジェクト モデルでは、任意の 2 つの ListItem オブジェクトの型は同じです。ただし、ADO.NET Data Services では、ターゲット データのコンテキスト (Web サイト) で各リストの型を作成するオブジェクト リレーショナル マッピングを使用しています。たとえば、お知らせリストのアイテムは AnnouncementsItem 型であり、タスク リストのアイテムは TasksItem 型です。

ADO.NET Data Services Framework を使用してクライアント アプリケーションから SharePoint Foundation データのクエリを実行する場合の主な欠点は、取得と書き込みがリスト データに限られることです。他の種類の SharePoint データは、ADO.NET Data Services でアクセスできません。

サポートされるクライアント アプリケーションの種類

コンソール アプリケーション、Windows Forms アプリケーション、Windows Presentation Foundation アプリケーション、および Silverlight アプリケーションを含めて、ほとんどすべてのクライアント アプリケーションで ADO.NET Data Services を使用して SharePoint Foundation データにアクセスできます。

開発サーバーに ADO.NET Data Services をインストールする

開発サーバーに ADO.NET Data Services がまだインストールされていない場合は、その OS に適したバージョンをダウンロードします。

ヒントヒント

"WCF Data Services" という名前で、Microsoft .NET Framework 4 を対象とする、このサービスの 1 つのバージョンがあります。SharePoint は Microsoft .NET Framework 3.5 を対象とするため、"WCF" バージョンを使用しないでください。

SharePoint データ ソースを使用する ADO.NET Data Services のプログラミング

ADO.NET Data Services を使用するプログラミングは、データ ソースにかかわらず基本的に同じです。Microsoft Visual Studio 2010 プロジェクトで、その URL を指定することによって RESTful サービスを追加します。SharePoint Foundation の場合、URL は常に http://<サーバー>/<サイト パス>/_vti_bin/listdata.svc です。<サイト パス> は、クライアントがアクセスするリスト データを持つ Web サイトへのパスです。サービス参照の名前の指定が求められます。

参照を追加すると、ADO.NET Data Services は、Web サイト内のリストに対するオブジェクト リレーショナル マッピングを作成し、それを reference.cs という名前のファイルに格納します。DataServiceContext クラスから派生する、<サイト名>DataContext という名前のクラスが作成されます。ここで、<サイト名> は、Web サイトの名前です。このクラスは、Web サイト内の各リストのプロパティを持ちます。この各プロパティは DataServiceQuery<TElement> 型であり、型パラメーターはリストを構成するアイテムの型です。これらのアイテムの型は、reference.cs で宣言される型です。それぞれに、<リスト名>Item という名前が付けられます。ここで、<リスト名> はリストの名前です。たとえば、AnnouncementsItem という名前が付けられます。このような各アイテム型は、リスト内のすべてのフィールド (列) のプロパティを持ちます。

reference.cs ファイル内のすべてのものは、自身の名前空間の中にあります。名前空間は、program.cs ファイル (または Windows Forms アプリケーションの form.cs ファイル) で指定した名前空間など、プロジェクトの名前空間と、サービス参照に指定した名前を連結して構成されます。たとえば、プロジェクトの名前空間が Contoso.SharePoint.Client で、サービス参照に指定した名前が MySiteService の場合、オブジェクト リレーショナル マッピングの名前空間は Contoso.SharePoint.Client.MySiteService になります。

プログラム ロジックを作成する方法は、他の ADO.NET Data Services データ ソースの場合と同じです。最初に、サービス参照名前空間の短い名前を指定した using ステートメントを、program.cs、form.cs など、ロジックが含まれるコード ファイルの名前空間のかっこの内側に追加します。次に例を示します。

namespace Contoso.SharePoint.Client
{
    using MySiteService;
}

次の重要な手順は、データ コンテキストへの参照の取得です。これが、オブジェクト リレーショナル マッピング内で、オブジェクトへのゲートウェイの役割を果たします。次の例では、MyServer は開発サーバーの名前で、MySite は Web サイトの名前です。そして MySiteDataContext は、オブジェクト リレーショナル マッピングで定義されるクラスです。

MySiteDataContext msdc = new MySiteDataContext(new Uri("http://MyServer/MySite/_vti_bin/listdata.svc"));

次の例に示すように、LINQ 構文クエリを使用して、Web サイト内のリストのクエリを実行できます。

var excitingAnnouncements = from announcement in msdc.Announcements
                            where announcement.Title.EndsWith("!")
                            select announcement;

同じリストに対して複数のクエリを実行する場合は、最初にリスト全体をローカルの List<T> オブジェクトに読み込み、そのオブジェクトを以降のソースとして使用することを検討してください。次に例を示します。

List<AnnouncmentsItem> allAnnouncements = msdc.Announcements.ToList();

var excitingAnnouncements = from announcement in allAnnouncements
                            where announcement.Title.EndsWith("!")
                            select announcement;

クライアント アプリケーションで行われたデータへの変更は、SaveChanges() メソッドで SharePoint Foundation リストに保存できます。次に例を示します。

var excitingAnnouncements = from announcement in msdc.Announcements
                            where announcement.Title.EndsWith("!")
                            select announcement;

foreach (var announcement in excitingAnnouncements)
{
    announcement.Title += "!!";
}
msdc.SaveChanges();