CSOMでSharePointのナビゲーションを更新・削除する

SharePoint Onlineに対して、プログラムからサイドリンクバーやトップリンクバーのリンクを更新・削除する方法を説明します。

確認環境:Visual Studio 2017(C#), Office 365 Business Premium, CSOM

前提条件は追加のときと同じく、CSOMのClientContextクラスのオブジェクトは作成済みで、SharePoint Onlineの認証も済んでいるとします。

(認証の手順はC#でSPOに接続する方法を参照してください)

サンプルコードは、「CSOMでSharePointのナビゲーションを追加する」で追加したリンクに対して実際に更新・削除します。

リンクの更新

リンクを更新するプログラムは、

  1. QuickLaunchから更新対象のリンクを取得する
  2. プロパティを変更する
  3. リンク(NavigationNodeクラスのオブジェクト)のUpdateメソッドを呼ぶ
  4. CSOMなので、ExecuteQuery

という流れです。

既存のリンクを取得する際に、QuickLaunchプロパティにアクセスして実際にデータを操作しているので、取得時点で一回クエリしています。

プロパティを変更したら、もう一度クエリしますが、その前にNavigationNode.Update()メソッドを呼ぶ必要があります。

// 1.サイドリンクバーから更新対象のリンクを取得する
var web = context.Web;
context.Load(web.Navigation.QuickLaunch);
context.ExecuteQuery();
var targetNode = web.Navigation
                    .QuickLaunch
                    .Where(node => node.Title == "test_middle")
                    .First();
// 2.プロパティを変更する
targetNode.Title += "_updated";
// 3.プロパティを変更したリンクのUpdateメソッドを呼ぶ
targetNode.Update();
// 4.リクエストを実際に発行する
context.ExecuteQuery();

上記コード実行前
実行後。実際にリンクテキストが更新されています。

削除

リンクを削除するプログラムは、

  1. QuickLaunchから更新対象のリンクを取得する
  2. リンク(NavigationNodeクラスのオブジェクト)のDeleteObjectメソッドを呼ぶ
  3. CSOMなので、ExecuteQuery

という流れです。

クエリ発行前にNavigationNode.DeleteObject()を呼びます。

サンプルコードはうえで更新したリンクを消してみます。

// 1.削除するリンク(更新したノード)を取得
var web = context.Web;
context.Load(web.Navigation.QuickLaunch);
context.ExecuteQuery();
var targetNode = web.Navigation
                    .QuickLaunch
                    .Where(node => node.Title == "test_middle_updated")
                    .First();
// 2.DeleteObjectメソッドを呼ぶ
targetNode.DeleteObject();
// 3.リクエストを実際に発行する
context.ExecuteQuery(); 

上で更新した「test_middle_updated」というリンクが消えました。