If you use structural navigation on your publishing Sharepoint site and navigation nodes are created as headings (NodeType = Heading), then it is quite straightforward to delete such navigation nodes programmatically. Here is how it can be done:
var web = ...
var pweb = PublishingWeb.GetPublishingWeb(web);
var globalNavigation = pweb.Navigation.GlobalNavigationNodes;
var nodePage = globalNavigation.Cast<SPNavigationNode>().FirstOrDefault(n => (n.Title == "Test"));
if (nodePage != null)
{
nodePage.Delete();
}
In this example we delete navigation node with title “Test”. However if you will try to delete navigation nodes which were created as AuthoredLink* (see NodeTypes Enum):
- AuthoredLink
- AuthoredLinkPlain
- AuthoredLinkToPage
- AuthoredLinkToWeb
using the same code you will find that link is not get deleted. The workaround is to change NodeType property first to Heading and then delete the node:
var web = ...
var pweb = PublishingWeb.GetPublishingWeb(web);
var globalNavigation = pweb.Navigation.GlobalNavigationNodes;
var nodePage = globalNavigation.Cast<SPNavigationNode>().FirstOrDefault(n => (n.Title == "Test" &&
(n.Properties != null && n.Properties["NodeType"] != null && n.Properties["NodeType"] is string &&
(n.Properties["NodeType"] as string == "AuthoredLink" || (n.Properties["NodeType"] as string).StartsWith("AuthoredLink"))));
if (nodePage != null)
{
nodePage.Properties["NodeType"] = "Heading";
nodePage.Update();
// reinitialize navigation nodes
pweb = PublishingWeb.GetPublishingWeb(web);
globalNavigation = pweb.Navigation.GlobalNavigationNodes;
nodePage = globalNavigation.Cast<SPNavigationNode>().FirstOrDefault(n => (n.Title == "Test);
if (nodePage != null)
{
nodePage.Delete();
}
}
After that AuthoredLink navigation node will be successfully deleted.
No comments:
Post a Comment