SharePointerie avec TermSet.CreateTerm

Tout récemment, je me suis créé un script PowerShell pour alimenter un TermSet dans un magasin de métadonnées gérées à partir d’une base de données SQL. C’est alors que je suis tombé sur une SharePointerie digne de ce nom. Mon code s’assure de comparer les éléments du TermSet avec les éléments retourné par la requête SQL afin d’éviter les ajouts de doublons. Cependant, lorsque mon code s’exécute, j’obtiens tout de même l’erreur suivante:  « There is already a term with the same default label and parent term. »

Le problème est causé par le caractère esperluette (&) dans le terme que je tentais d’ajouter.

Ex :

Produit AB

Vs

Produit A&B

La différence est subtile mais il y a belle et bien une différence entre les deux esperluettes.

Après quelque recherches je suis tombé sur la documentation de la méthode TermSet.CreateTerm sur MSDN :

The name value will be normailized to trim consecutive spaces into one and replace the & character with the wide character version of the character (\uFF06). The leading and trailing spaces will be trimmed. It must be non-empty and cannot exceed 255 characters, and cannot contain any of the following characters ; « <>|&tab.

En bref, le caractère & est remplacé lorsqu’il est ajouté dans un TermSet.

La solution pour corriger le problème dans mon script consiste à comparer le terme en utilisant la méthode TaxonomyItem.NormalizeName.

Ex :


#Effectue l'encodage du caractère "&"
$tts = [Microsoft.SharePoint.Taxonomy.TermSet]
[string]$termeNormalisee = $tts::NormalizeName($nomTerme)
$terme = $ensembleTermes.Terms[$termeNormalisee]

L’autre solution, moins élégante, consiste à faire un remplacement du caractère esperluette.

Ex :

 

$valeurEnsembleTerme.Name.trim().Replace('&','&'))

En conclusion, le problème est bien documenté sur le site de MSDN mais il peut vous faire perdre beaucoup de temps.

Advertisements

Laisser un commentaire

Entrer les renseignements ci-dessous ou cliquer sur une icône pour ouvrir une session :

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l’aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s