Dans un article précédent, je vous ai parlé de comment exporter en CSV les termes du service des métadonnées gérées.

Aujourd’hui, je vais vous parler de comment importer les termes exportés vers un TermSet donné.

Le principe est le même, on se base toujours sur l’API de la taxonomie de SharePoint 2010:

Microsoft.SharePoint.Taxonomy
|_ Classe TaxonomySession
|__ Classe TermStore
|___ Classe Group
|____ Classe TermSet
|_____ Classe Term

Le script ci-dessous reprend également l’ID des termes, ce qui peux être très utile dans certains cas (déploiement inter-environnement).

Function Import-SPTermSetTerms {
    param 
	(
        [string]$SiteUrl = $(throw "Please provide a Site Collection URL"),
        [string]$TermStoreName 	= $(throw "Please provide a Term Store Name"),
        [string]$TermGroupName 	= $(throw "Please provide a Term Group Name"),
        [string]$TermSetName 	= $(throw "Please provide a Term Set Name"),
        [string]$CsvFilePath	= $(throw "Please provide an CSV File Path")
    )
	try
	{
		$SPSite = Get-SPSite $SiteUrl
	}
	catch { }
	if ($SPSite -ne $null)
	{
		#Initialisation de la session de taxonomie
		$TaxonomySession = new-object Microsoft.SharePoint.Taxonomy.TaxonomySession($SPSite, $true)
		if ($TaxonomySession -ne $null)
		{
			#Récupération du TermStore
			$TermStore = $TaxonomySession.TermStores[$TermStoreName]
			if ($TermStore -ne $null)
			{
				#Récupération du TermGroup
				$TermGroup = $TermStore.Groups[$TermGroupName]
	            if ($TermGroup -ne $null)
	            {
					#Récupération du TermSet
					$TermSet = $TermGroup.TermSets[$TermSetName]
					if ($TermSet -ne $null)
					{
						$CsvFile = Import-csv -path $CsvFilePath
						if ($CsvFile -ne $null) 
						{
							foreach($line in $CsvFile)
							{
								[string]$TermName = $line.Name 
								if (![string]::IsNullOrEmpty($TermName)) 
								{
									$term = $null
									try 
									{
										#Encode le "&"
										$dll = [Microsoft.SharePoint.Taxonomy.TermSet]
										[string]$NormalizedTermName = $dll::NormalizeName($TermName)
										$term = $TermSet.Terms[$NormalizedTermName]
									}
                                    catch { }
 
                                    if ($term -eq $null) 
									{
										#Création du term en anglais
										$NewTerm = $TermSet.CreateTerm($TermName, 1033, [guid]$line.Id)
										
										#Création du Label en Français
										$NewTerm.CreateLabel($TermName, 1036, $false) | Out-Null
										
										#La Validation des changements du TermStore
										$TermSet.TermStore.CommitAll()
										write-host "Term $TermName has been created"
									}
									else { Write-Warning "The term $TermName exists already" }
                                }
                            }
                        }
                        else { return "The Input File Path is invalid" }
					}
					else { Write-Error "The TermSet '$TermSetName' is Null" }
				}
				else { Write-Error "The TermGroup '$TermGroupName' is Null" }
			}
			else { Write-Error "The TermStore '$TermStoreName' is Null" }
		}
		else { Write-Error "Taxonomy Session for $SiteUrl is Null" }
	}
	else { Write-Error "The SharePoint site $SiteUrl is Null" }
}