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 の拡張ライブラリで、便利なクラスや拡張メソッドが提供されています。
サンプルコード
前提
SharePoint のオブジェクトを取得するためには、その対象オブジェクトを Load してから ExecuteQuery を実行する必要があります。
また、オブジェクトを取得するとき、既定で一部のプロパティにアクセスできません。これらのプロパティにアクセスするためには、プロパティを明示的に読み込む必要があります。
CSOM メソッド版
CSOM のメソッドで SharePoint リストを取得するためのメソッドは2つあります。
ListCollection クラスの GetById, GetByTitle です。
// using CSOMvarlistCsomById=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 プロパティを読み込むvarlistCsomByTitle=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 PnPvarlistPnPById=context.Web.GetListById(Guid.Parse("f470fb72-1528-45e4-a929-a144146c1b1f"));Console.WriteLine(listPnPById.Title);// using PnPvarlistPnPByUrl=context.Web.GetListByUrl("PnPByUrl");Console.WriteLine(listPnPByUrl.Title);// using PnP with expressionsvarlistPnPByTitle=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