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」というリンクが消えました。