Tech Note

Azure, Office 365, Power Platform, etc... の勉強手記

SharePoint リストを CSOM で取得する

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

※ 本投稿は以下の通り、Qiita でも投稿しています。
SharePoint リストを CSOM で取得する - Qiita

環境

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

サンプルコード

github.com

前提

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

docs.microsoft.com

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

PowerShell 基本の気づき

コマンドレットのヘルプ表示

Get-Help (cmdlet)

docs.microsoft.com

コマンドレットのあいまい検索

Get-*User

docs.microsoft.com

変数一覧表示

Get-Variable

f:id:shibatea:20200101011656p:plain

docs.microsoft.com

Office 365 PowerShell

  • Azure AD v1 (MSOnline)
  • Azure AD v2 (Azure AD for Graph)
  • Azure AD v2 preview (Azure AD for Graph preview)

Azure AD v1 と Azure AD v2 (preview) は両方同時にインストールは可能
Azure AD v2 と Azure AD v2 preview はどちらか片方しかインストールできない

docs.microsoft.com