SharePoint Onlineに対して、プログラムからサイドリンクバーやトップリンクバーにリンクを追加する方法を説明します。
確認環境:Visual Studio 2017(C#), Office 365 Business Premium, CSOM
前提条件として、「CSOMでSharePointのナビゲーションを読み取る」のときと同じく、CSOMのClientContextクラスのオブジェクトは作成済みで、SharePoint Onlineの認証も済んでいるとします。
サンプルコードは、サイドリンクバーを対象に、追加します。
Web.Navigation.QuickLaunchがサイドリンクバーのリンク集を表しています。このプロパティがNavigationNodeCollectionクラスのオブジェクトなので、NavigationNodeCollecitonクラスに対する操作が主な作業です。
Table of Contents
追加概要
追加の場合には、NavigationNodeCreationInformationクラスのオブジェクトが必要です。
手順としては、
- NavigationNodeCreationInformationクラスをインスタンス化
- インスタンスに、リンクのプロパティ(リンクテキスト、リンク先URL、リンクの位置)を設定
- QuickLauchのAddメソッドでインスタンスを追加
- CSOMなので、QuickLaunchをLoadしたうえで、ExecuteQuery
となります。
リンクのAPIは追加先の位置によって若干ですが違いがあります。
位置指定なしの場合:先頭に追加
実際に追加してみます。
実行前のサイドリンクバーはこんな感じ。
位置指定なしで追加するサンプルコード
var web = context.Web; var ci = new NavigationNodeCreationInformation() { Title = "test", Url = "https://msdn.microsoft.com/ja-jp/default.aspx" }; web.Navigation.QuickLaunch.Add(ci); context.ExecuteQuery();
結果。赤枠の位置に追加されました。
位置指定なしで追加した場合は先頭に追加されるようです。
AsLastNode=true:最後に追加
NavigationNodeCreationInformation.AsLastNode property
AsLastNodeプロパティをtrueにするとリンクコレクションの最後に追加されます。
var web = context.Web; var ci = new NavigationNodeCreationInformation() { Title = "test_last", Url = "https://msdn.microsoft.com/ja-jp/default.aspx", AsLastNode = true }; web.Navigation.QuickLaunch.Add(ci); context.ExecuteQuery();
結果。実際には、サイトコンテンツの上(最後から2番目)に追加されました。
追加位置を指定:指定リンクの後に追加
最後に特定の位置にリンクを追加する方法です。既存のリンクを取得しておいて、NavigationNodeCreationInformation.PreviousNodeに取得したリンクを設定すると、そのリンクの後に追加されます。
ここでは、「ドキュメント」というリンクを取得しその次に追加しています。
// 既存のリンクを取得(このリンクの後に追加される) var web = context.Web; context.Load(web.Navigation.QuickLaunch); context.ExecuteQuery(); var previousNode = web.Navigation .QuickLaunch .Where(node => node.Title == "ドキュメント") .First(); var ci = new NavigationNodeCreationInformation() { Title = "test_middle", Url = "https://msdn.microsoft.com/ja-jp/default.aspx", PreviousNode = previousNode }; web.Navigation.QuickLaunch.Add(ci); context.ExecuteQuery();
ドキュメントの次に追加されました。