SharePoint Onlineに対して、プログラムからサイドリンクバーやトップリンクバーのリンクを更新・削除する方法を説明します。
確認環境:Visual Studio 2017(C#), Office 365 Business Premium, CSOM
前提条件は追加のときと同じく、CSOMのClientContextクラスのオブジェクトは作成済みで、SharePoint Onlineの認証も済んでいるとします。
(認証の手順はC#でSPOに接続する方法を参照してください)
サンプルコードは、「CSOMでSharePointのナビゲーションを追加する」で追加したリンクに対して実際に更新・削除します。
リンクの更新
リンクを更新するプログラムは、
- QuickLaunchから更新対象のリンクを取得する
- プロパティを変更する
- リンク(NavigationNodeクラスのオブジェクト)のUpdateメソッドを呼ぶ
- 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();
上記コード実行前
実行後。実際にリンクテキストが更新されています。

削除
リンクを削除するプログラムは、
- QuickLaunchから更新対象のリンクを取得する
- リンク(NavigationNodeクラスのオブジェクト)のDeleteObjectメソッドを呼ぶ
- 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」というリンクが消えました。
