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();
ドキュメントの次に追加されました。
