中心的オブジェクトであるクライアント コンテキスト
最終更新日: 2010年7月15日
適用対象: SharePoint Foundation 2010
サーバー コンテキストでのサーバー オブジェクトに対するプログラミングでは、オブジェクト モデルへのアクセスを提供する中心的なオブジェクトをインスタンス化したり返したりする必要がありますが、これと同様に、クライアント側の新しいオブジェクト モデルでも、ClientContext オブジェクト (JavaScript: ClientContext) をすべての操作の "中心となる存在" として使用します。サイトやデータを取得して操作するプロセスは、コンテキスト オブジェクトの取得によって開始されます。たとえば、ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection") は、指定されたサイト コレクションに対するコンテキスト オブジェクトをインスタンス化します。
ClientContext オブジェクト (JavaScript: ClientContext) は、クライアント オブジェクト モデルにアクセスするための重要なエントリ ポイントとして、またサイト コレクション内で要求をまとめてアクションを開始するための中心的なオブジェクトとしての役割を果たします。ほかの SharePoint Foundation クライアント オブジェクトにリモートでアクセスするためのサイト コレクションまたは Web サイトを取得するには、ClientContext オブジェクト (JavaScript: ClientContext) のオブジェクト プロパティを使用します。
ClientContext() コンストラクター (JavaScript: ClientContext(serverRelativeUrl)) は、指定された Web サイトまたはサイト コレクションに基づいてクライアント コンテキストを初期化します。マネージ クライアント オブジェクト モデルでは、URL が特定の Web サイトの絶対 URL である必要があります。ECMAScript (JavaScript、JScript) オブジェクト モデルでは、サーバー相対 URL が必要であるか、パラメーターが一切必要ないかのどちらかになります。JavaScript でパラメーターをとらないコンストラクターを使用する場合、ターゲット Web サイトの URL は、Web ページを含む Web サイトの URL です。
実際にクエリを実行する前に、クライアント コンテキストによって返されるオブジェクトを使用して、実行するアクションを定義します。ClientContext クラス (JavaScript: ClientContext) は、Load<T>(T, []) (JavaScript: load(clientObject)) メソッドと LoadQuery() (JavaScript: loadQuery(clientObjectCollection, exp)) メソッドを ClientRuntimeContext クラス (JavaScript: ClientRuntimeContext) から継承しています。指定のアクションを実行し、指定のオブジェクトまたはプロパティを返すクエリを定義したうえで、これらのメソッドの 1 つを呼び出してそのクエリを読み込みます。
クエリの読み込みの完了後、ClientContext オブジェクト (JavaScript: ClientContext) の ExecuteQuery() メソッドまたは ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) メソッド (JavaScript: executeQueryAsync(succeededCallback, failedCallback)) を呼び出して、クエリをサーバーに送信します。Silverlight クライアント オブジェクト モデルには、ユーザー インターフェイス (UI) を変更しないスレッドから同期的に呼び出せる ExecuteQuery() メソッドと、スレッドが UI を変更する場合のための非同期の ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) メソッドの両方が用意されています。クエリを実行するためのこれらのメソッドは、クライアント上で行われるアクションを表す XML を作成してサーバーに送信します。マネージ オブジェクト モデルでは、こうした呼び出しが同期的に行われ、コードの実行はサーバーから応答を受け取るまでブロックされます。Silverlight オブジェクト モデルでは、この呼び出しを同期的にも非同期にも行えますが、JavaScript オブジェクト モデルでは常に非同期に行います。非同期呼び出しでは、引き続きコードが実行され、サーバーの応答を待つことはありません。Silverlight オブジェクト モデルと JavaScript オブジェクト モデルでは、サーバーの応答を受け取ったときに実行されるコールバック関数を実装できます。
SharePoint Foundation の Silverlight オブジェクト モデルと JavaScript オブジェクト モデルでは、クライアント コンテキストの Current プロパティ (JavaScript: current) を使用して、SharePoint Foundation 内で動作するページから現在の要求コンテキストを返すことができます。
以下の例は、ClientContext クラス (JavaScript: ClientContext) のメソッドを使用して Web サイトのタイトルを返すための基本的な手順を示しています。
using System;
using Microsoft.SharePoint.Client;
namespace Microsoft.SDK.SharePointServices.Samples
{
class UsingClientContext
{
static void Main()
{
ClientContext clientContext = new ClientContext("http://MyServer/sites/MySiteCollection");
Web oWebsite = clientContext.Web;
clientContext.Load(oWebsite);
clientContext.ExecuteQuery();
Console.WriteLine(oWebsite.Title);
}
}
}
Imports System
Imports Microsoft.SharePoint.Client
Namespace Microsoft.SDK.SharePointServices.Samples
Class UsingClientContext
Shared Sub Main()
Dim clientContext As New ClientContext("http://MyServer/sites/MySiteCollection")
Dim oWebsite As Web = clientContext.Web
clientContext.Load(oWebsite)
clientContext.ExecuteQuery()
Console.WriteLine(oWebsite.Title)
End Sub
End Class
End Namespace
function useClientContext() {
var clientContext = new SP.ClientContext('/sites/MySiteCollection');
this.oWebsite = clientContext.get_web();
clientContext.load(oWebsite);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
alert('Title: ' + oWebsite.get_title());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
関連項目
概念
クライアント オブジェクト、値オブジェクト、およびスカラー プロパティ
マネージ オブジェクト モデルと ECMAScript オブジェクト モデルの相違点
その他の技術情報
SharePoint Foundation 2010 のマネージ クライアント オブジェクト モデルの使用