Mise à jour labels enfants non fonctionnels après migration de SP2010 vers SP2013

Contexte

 

Vous avez généré sur votre environnement SharePoint 2010 une solution basée sur la fonctionnalité variations.

 

Imaginons que cette solution est la forme simple suivante :

 

  • Une collection de sites générée à partir du template de site « Publishing Portal ».
  • Cette collection de site héberge le site racine (de référence) pour les autres labels.
  • Un ou deux autres labels, voir beaucoup plus, sont présents dans cette solution basée sur les variations.

Au final la solution disponible sur SharePoint 2010 pourrait avoir la forme suivante.

 

 

Vous décidez de migrer ce contenu vers SharePoint 2013. Pour ce faire, la base de données est sauvegardée, restaurée sur le nouvel environnement SQL et attachée à la nouvelle application web SharePoint 2013 avec la commande PowerShell « Mount-SPContentDatabase ».

 

Dans ce nouvel environnement toute modification effectuée sur le label racine ne sera plus propagée vers les labels « enfants » faisant parties de la hiérarchie.

Résolution

 

La raison de ce dysfonctionnement, après la migration, est que tous les labels, autre que le label racine, devraient avoir une propriété nommée « NotificationMode » égale à False, alors que le label racive devrait cette propriété égale à True, ce qui n'est pas le cas. Cette propriété après la migration est positionnée à Null pour tous les labels.

 

Une solution de contournement a été trouvée par le service support de Microsoft et ce dysfonctionnement a été reportée auprès du groupe produit SharePoint.

Conclusion

 

La solution de contournement suivante a été officialisée (supporté) par le groupe produit SharePoint et la fourniture d'une solution sous forme de correctif est pour l'instant hors du champ de vision des prochaines mises à jour SharePoint 2013.

 

Le script PowerShell suivant peut être utilisé pour mettre à jour les labels appartenant à la hiérarchie.

 

$web = Get-SPWeb https://nomDuSite

$list = $web.GetListFromUrl("/Variation Labels/AllItems.aspx")

$nbItems = $list.ItemCount

For ($i = 0 ; $i -lt $nbItems ; $i++)

{

   If ($i -eq 0)

   {

     $item = $list.Items[$i]

     $item["NotificationMode"] = $true

     $item.Update()

   }

   Else

   {

     $item = $list.Items[$i]

     $item["NotificationMode"] = $false

     $item.Update()

   }

}

Je remercie Dominique Vives pour la relecture de ce blog.

 

Yamine Taiëb