9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SharePoint リストを CSOM で取得する

Posted at

SharePoint リスト(カスタムリスト、ドキュメントライブラリ、etc...)を C# の CSOM(Client Side Object Model)で取得します。 今回は特定の SharePoint リストを取得する場合のコードを紹介します。

環境

  • .NET Framework 4.6.1
  • Microsoft.SharePointOnline.CSOM 16.1.19515.12000
  • SharePointPnPCoreOnline 3.16.1912

※ SharePointPnPCoreOnline は Microsoft.SharePointOnline.CSOM の拡張ライブラリで、便利なクラスや拡張メソッドが提供されています。

サンプルコード

ListSample.cs

前提

SharePoint のオブジェクトを取得するためには、その対象オブジェクトを Load してから ExecuteQuery を実行する必要があります。
また、オブジェクトを取得するとき、既定で一部のプロパティにアクセスできません。これらのプロパティにアクセスするためには、プロパティを明示的に読み込む必要があります。

CSOM メソッド版

CSOM のメソッドで SharePoint リストを取得するためのメソッドは2つあります。
ListCollection クラスの GetById, GetByTitle です。

// using CSOM
var listCsomById = context.Web.Lists.GetById(Guid.Parse("3542cfd9-85b5-4e7d-82fa-7ea70761c0c7"));
context.Load(listCsomById);
context.ExecuteQueryRetry();
Console.WriteLine(listCsomById.Title);

// using CSOM with expressions
// SharePoint リストオブジェクトを取得すると同時に
// 既定でアクセスできない HasUniqueRoleAssignments プロパティを読み込む
var listCsomByTitle = context.Web.Lists.GetByTitle("CsomByTitle");
// 2行で書くバージョン
context.Load(listCsomByTitle);
context.Load(listCsomByTitle, l => l.HasUniqueRoleAssignments);
// 1行で書くバージョン
//context.Load(listCsomByTitle, l => l, l => l.HasUniqueRoleAssignments);
context.ExecuteQueryRetry();
Console.WriteLine(listCsomByTitle.Title);
Console.WriteLine(listCsomByTitle.HasUniqueRoleAssignments);

PnP 拡張メソッド版

PnP の拡張メソッドで SharePoint リストを取得するためのメソッドは3つあります。
CSOM の Web クラスの拡張メソッド GetListById, GetListByTitle, GetListByUrl です。

// using PnP
var listPnPById = context.Web.GetListById(Guid.Parse("f470fb72-1528-45e4-a929-a144146c1b1f"));
Console.WriteLine(listPnPById.Title);

// using PnP
var listPnPByUrl = context.Web.GetListByUrl("PnPByUrl");
Console.WriteLine(listPnPByUrl.Title);

// using PnP with expressions
var listPnPByTitle = context.Web.GetListByTitle("PnPByTitle", l => l.HasUniqueRoleAssignments);
Console.WriteLine(listPnPByTitle.Title);
Console.WriteLine(listPnPByTitle.HasUniqueRoleAssignments);

PnP 拡張メソッドの特徴

PnP 拡張メソッドの特徴として、内部的に Load & ExecuteQuery を実行しているため、ユーザー側のコードに Load & ExecuteQuery を書く必要がありません。
また、取得対象のオブジェクトが存在しない場合、拡張メソッドの戻り値として null を返します。
大量のオブジェクトを繰り返し処理する場合を除けば、PnP 拡張メソッドを積極的に使っても良いと思います。

CSOM や PnP の特徴(癖?)については後日まとめようと思います。

参照

SharePoint .NET Server、CSOM、JSOM、および REST API インデックス | Microsoft Docs
SharePoint のクライアント ライブラリ コードを使用して基本的な操作を完了する | Microsoft Docs

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?