Now requirement to import taxonomy from .csv file using PowerShell as well set taxonomy as site navigation with url.
1. Create .csv file
2. Create new script and paste below code.
Param(
[string] $siteUrl = $(throw "Error: Parameter siteUrl is required"),
[boolean]$emptyfirst
)
##Variables that should not be edited
$termsetName="My Navigation"
function CreateTerm( $parent, $name, $url )
{
Write-Host "Adding term $($parent.Name) -> $name"
$term = $parent.CreateTerm("$name", 1033)
$term.IsAvailableForTagging = $false
$term.SetLocalCustomProperty("_Sys_Nav_ExcludedProviders", '"CurrentNavigationTaxonomyProvider"')
$term.SetLocalCustomProperty("_Sys_Nav_SimpleLinkUrl", $url)
#$term.SetLocalCustomProperty("tIME", $url)
return $term
}
function GetTerm($termName, $parent)
{
$termName = [Microsoft.SharePoint.Taxonomy.TaxonomyItem]::NormalizeName($termName)
$term = $null
if( $termName -ne "" -and $parent -ne $null ){
if( $parent.Terms -ne $null ) {
$term = $parent.Terms | Where-Object {$_.Name -eq "$termName"}
}
if($term -eq $null ){
$term = CreateTerm -parent $parent -name "$termName" -url $_.URL
}
}
return $term;
}
function ImportTermSet([Microsoft.SharePoint.Taxonomy.TermSet]$set, [PSCustomObject]$terms) {
$terms | foreach {
$level1TermName = $_."Level 1 Term"
$level2TermName = $_."Level 2 Term"
$level3TermName = $_."Level 3 Term"
$level1Term = GetTerm -termName $level1TermName -parent $set
$level2Term = GetTerm -termName $level2TermName -parent $level1Term
$level3Term = GetTerm -termName $level3TermName -parent $level2Term
}
$ErrorActionPreference = "Continue";
}
Write-Host "Loading IIS module"
Import-Module WebAdministration
Write-Host "Loading SharePoint Commandlets"
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
Write-Host -ForegroundColor Green " Commandlets Loaded ... Loading Variables"
Write-Host "Connecting to Term Store"
Write-host
$termsetName="My Navigation"
$site = Get-SPSite $siteUrl
$web = $site.RootWeb
$session = [Microsoft.SharePoint.Publishing.Navigation.TaxonomyNavigation]::CreateTaxonomySessionForEdit($web)
$store = $session.TermStores[0]
$group = $session.TermStores.Groups | Where-Object {$_.SiteCollectionAccessIds -eq $site.ID }
$navigationSet = $group.TermSets | where { $_.Name -eq $termsetName }
if( $navigationSet -ne $null -and $emptyfirst) {
Write-Host -ForegroundColor Yellow "Removing existing termset"
$navigationSet.Delete()
$navigationSet = $null
}
if( $navigationSet -eq $null) {
Write-Host -ForegroundColor Yellow "Creating termset"
$navigationSet = $group.CreateTermSet($termsetName)
}
$navigationSet.SetCustomProperty("_Sys_Nav_IsNavigationTermSet", "True")
$navigationSet.SetCustomProperty("_Sys_Nav_AttachedWeb_SiteId", $site.ID.ToString())
$navigationSet.SetCustomProperty("_Sys_Nav_AttachedWeb_WebId", $site.RootWeb.ID.ToString())
$navigationSet.SetCustomProperty("_Sys_Nav_AttachedWeb_OriginalUrl", $site.RootWeb.Url )
#2013-02-05T12:52:07.5250653Z
$date = Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ"
$navigationSet.SetCustomProperty("_Sys_Nav_AttachedWeb_Timestamp", $date )
Write-Host "Importing Term Set CSV File"
$scriptpath = $MyInvocation.MyCommand.Path
$dir = Split-Path $scriptpath
$fileEntries = [IO.Directory]::GetFiles($dir);
foreach($fileName in $fileEntries)
{
$ext=[System.IO.Path]::GetExtension($fileName)
if($ext -eq ".csv")
{
Write-Host -ForegroundColor Green "Processing $fileName"
$CSVFILEPATH=$fileName;
$terms = Import-Csv -Delimiter ';' $fileName
ImportTermSet $navigationSet $terms
"All term sets have been imported"
Write-Host
}
}
$store.CommitAll()
Write-Host "Setting site nav to use taxonomy"
$settings = new-object Microsoft.SharePoint.Publishing.Navigation.WebNavigationSettings($web);
$settings.GlobalNavigation.Source = [Microsoft.SharePoint.Publishing.Navigation.StandardNavigationSource]::TaxonomyProvider
$settings.GlobalNavigation.TermStoreId = $store.Id
$settings.GlobalNavigation.TermSetId = $navigationSet.Id
$web.Update()
$settings.Update($session)
Note :
1. Script file and .csv file should be in same folder.
2. This script supports import for multiple .csv files too. However it has to be in same folder.
3. Script will look for .csv in the current folder and will do import to Term store.
4.As well this script will set site navigation to use the taxonomy, It will set the navigation link with provided url to the term.