SharePoint オブジェクト モデルの概要を簡単に説明する

これは、プロバイダー ホスト型の SharePoint アドインの開発の基本に関する記事のシリーズの 4 番目です。SharePoint アドイン とこのシリーズの前の記事 (プロバイダー ホスト型の SharePoint アドインの作成を始めるにある記事) をよく理解しておいてください。

注:

プロバイダー ホスト型アドインに関するこのシリーズに沿って作業してきた場合は、このトピックでも引き続き使用できる Visual Studio ソリューションを既に所有しています。 また、「SharePoint_Provider-hosted_Add-Ins_Tutorials」でリポジトリをダウンロードして BeforeRibbonButton.sln ファイルを開くこともできます。

この記事では、コーディングから少し離れて、SharePoint クライアント側オブジェクト モデル (CSOM) の概要を確認します。 このモデルは、MSDN で大量かつ適切に文書化されています (リファレンス トピック、「方法」、コード サンプル)。 この記事では、その内のごく一部しか説明できません。 ですが、ごくわずかの説明でも、このシリーズで使用されるコードの大半がわかりやすくなります。

コンテンツの階層

次の表は、SharePoint とそれらを表す CSOM クラスのコンテンツの階層を示しています。 これらのエンティティは、それぞれそのすぐ下に子の型があります。

エンティティ クラス 注釈
SharePoint オンプレミス ファームまたは SharePoint Online サブスクリプション (テナントとも呼ばれる) CSOM では、このレベルへのプログラムによるアクセスのみが制限されます。 たとえば、ファームクラス、サブスクリプションクラス、テナントクラスはありません。 (アドインでは使用できない SharePoint のサーバー側オブジェクト モデルを使用すると、これらのエンティティへのプログラムによるアクセスが可能になります)。
サイト コレクション Site ブランド化されたマスター ページや、カスタム セキュリティ グループなど、すべての子 Web サイトに適用できる、主に管理上の理由、または SharePoint コンポーネントを収容するためにまとめられた Web サイトのコレクション。 すべての Web サイトは、何らかのサイト コレクションに属しています。
Web サイト Web ページと SharePoint コンポーネントのセット。 サブ Web サイトを持つことがあります。
リスト List ドキュメント ライブラリとその他の種類のファイルのライブラリも、このレベルです。 ドキュメント ライブラリは、各行には添付されたドキュメントが含まれ、作成者、最終編集日時、チェックアウトしたユーザーなど、ドキュメントに関するデータをその他の列に持つ、特別な種類のリストです。
リスト アイテム listItem 行のフィールドに特定の値を持つ、リストの行、つまりリスト アイテム。 型もあります。 次の行を を参照してください。
リスト アイテム Content Type リスト アイテムの型。 これらは ContentType クラスによって表されます。 それぞれ基本的には列とメタデータのセットです。 最もシンプルなものは、組み込みの Item コンテンツ タイプです。 その他のすべてのコンテンツタイプは、 Item から派生します。 SharePoint には、Event や Announcement など、多数の組み込みのコンテンツ タイプがあります。
Field Field オブジェクトには、元になるデータ型に関する情報だけでなく、特定のリスト アイテムの作成、表示、編集のためのフォームなど、データがフォームで書式設定されてレンダリングされる方法に関する情報も含まれます。

プログラムを使用して、カスタム リスト、コンテンツ タイプ、列タイプ、およびリスト アイテムを作成できます。

CSOM によって、コンテンツだけでなく、ユーザー、グループ、ロールおよびアクセス許可、分類、検索などにアクセスできます。

クライアント側のランタイムとバッチ処理

CSOM はバッチ処理システムを使用します。 マネージ コードのブロックが XML に変換され、1 つの HTTP 要求でサーバーに送信されます。 コマンドごとに、対応するサーバー オブジェクト モデルの呼び出しが行われ、サーバーは、JavaScript Object Notation (JSON) 形式でクライアントへ応答を返します。

クライアントの SharePoint コードは、SharePoint の Web サイト (および親サイト コレクション) の ID を含む現在の要求コンテキストを表すクライアント コンテキスト オブジェクトを取得して開始され、このコンテキストを通じて、CSOM オブジェクトへのアクセスを取得できます。 次の構造は、何度も目にすることになる基本的なものです。このコードについて、次の点に注意してください。

  using (var clientContext = spContext.CreateUserClientContextForSPHost())
  {
      // CRUD operation or query code goes here.

      clientContext.ExecuteQuery();
  }

このコードについては、次の点に注意してください。

  • spContext オブジェクトは SharePointContext 型であり、Office Developer Tools for Visual Studio によって生成される SharePointContext.cs (または .vb) ファイルで定義されます。 このファイルは変更できますが、その必要はほとんどありません。 ほとんどの SharePoint アドイン プロジェクトで、このファイルとツールによって生成される TokenHelper.cs (または .vb) ファイルが CSOM 自体の機能拡張として効率的に機能します。

  • clientContext オブジェクトは、CSOM 型 ClientContext です。

  • ExecuteQuery メソッドは、CRUD 操作コードを SharePoint サーバーに送信する XML メッセージにバンドルします。 ここで、同等のサーバー側のオブジェクト モデルのコードに変換されて実行されます。

このパターンの例は、このシリーズの前回の記事の GetLocalEmployeeName メソッドに記載されています。

private string GetLocalEmployeeName()
{
    ListItem localEmployee;

    using (var clientContext = spContext.CreateUserClientContextForSPHost())
    {
        List localEmployeesList = clientContext.Web.Lists.GetByTitle("Local Employees");
        localEmployee = localEmployeesList.GetItemById(listItemID);
        clientContext.Load(localEmployee);
        clientContext.ExecuteQuery();
    }
    return localEmployee["Title"].ToString();
}

このメソッドについて、次の点に注意してください。

  • using ブロックの最初の 2 行は、リストおよびリスト アイテム オブジェクトへの参照を取得します。 ただし実際には、これらの行が SharePoint のクライアント側のランタイムで実行される場合、これらは単純に XML 形式に変換されます。 ExecuteQuery メソッドは、その XML をサーバーに送信します。

  • Load メソッドは、メッセージに他のものを追加します。指定されたオブジェクトをクライアントに送信するようサーバーに通知します。 ExecuteQuery メソッドは、このオブジェクトを受信し (JSON として)、クライアント側の localEmployee 変数を初期化するために使用します。 後続のクライアント側のコードは、その ListItem オブジェクトとメンバーを参照します。 見てのとおり、次の行はアイテムの "Title" フィールドの値を参照します。 オブジェクトは読み込まれるまで実際にはクライアント側に存在しないため、この行は Load メソッドが呼び出されない場合に例外をスローします。

次の手順

次の記事では、コーディングに戻り、プロバイダー向けのホスト型アドインに SharePoint の書き込み操作を追加する方法について説明します。