Variantes SharePoint – Synchronisez vos listes par code

Variantes SharePoint – Synchronisez vos listes par code


Dans le cadre la mise en place d’une configuration automatique des variantes avec SharePoint, j’ai eu besoin de synchroniser deux listes entre elles via du code personnalisé.

Microsoft ne fournissant aucune API permettant de le faire et n’ayant pas trouvé de documentation sur la toile, je vous partage ma solution pour résoudre ce problème.

Contexte

Avec le mécanisme de variantes, il est possible de synchroniser des listes entre un site de variantes source et un ou plusieurs sites de variantes cibles selon vos étiquettes de langue:

Context

Principe des variantes SharePoint

Synchronisation via l’interface utilisateur

Par défaut, il vous est exclusivement possible de réaliser cette opération via l’interface utilisateur via cette procédure :

  1. Créer la liste sur le site de variante source
  2. Dans l’onglet Variantes, cliquez sur « Paramètres »

Variantes_Parametres

La fenêtre suivante apparaît permettant de sélectionner les étiquettes cibles à synchroniser :

Variantes_Creation

Fenêtre de création manuelle de variantes

En arrière-plan

Les variantes utilisent de base deux listes cachées sur le site racine de la collection de sites :

  • Une liste de relations permettant de sauvegarder les liaisons entre sites, listes et éléments pour chaque « variante de langue »
  • Une liste d’étiquettes de langue (‘fr’, ‘en’, etc…)

Lorsqu’une synchronisation entre deux listes est faite via l’interface, les effets « visibles » sont les suivants :

Ajout des relations dans la liste de configuration cachée

Variantes_Liste_Relations

Liste cachée des variantes SharePoint

Ajout d’un « WorkItem » pour le travail du minuteur de création de liste.
Astuce : voici un petit script PowerShell permettant d’obtenir les « Work Items » pour travail de minuteur particulier. Pour le GUID correspondant aux bons travaux, je me suis référé à cet article.

Variantes_WorkItem

Récupération des WorkItems de variantes SharePoint

Synchronisation via code

Solution non fonctionnelle

La première solution pour automatiser cette étape serait de reproduire les actions « visibles » de synchronisation, à savoir:

  • Créer une entrée dans la liste de relations manuellement avec les bons GUID.
  • Ajouter un WorkItem pour le travail du minuteur de la même forme que celui créer via l’interface (à la manière de ce que l’on peut voir pour la création de hiérarchies de sites automatique. Cf ici)

Malheureusement, par cette manière, il ne vous sera pas possible de synchroniser votre liste dans votre site cible avec cette stratégie. Le travail du minuteur ne tiendra pas compte de vos ajouts manuels et aucune erreur ne sera levée.

Solution fonctionnelle

Pour comprendre les actions déclenchées par l’interface utilisateur, il vous faut décompiler l’assembly de SharePoint Microsoft.SharePoint.Publishing et plus particulièrement le code behind de la page « CreationVariationsPage ».

Variantes_CodeBehind

Un tour dans les Dlls de SharePoint pour comprendre ce qu’il se passe…

Il est ensuite possible par réflection, de reproduire cette séquence depuis votre application. Voici le code C# :

Note : le code complet est disponible ici :

Bonne traduction!

Liens

github_icon

Si vous travaillez par PowerShell et que vous souhaitez automatiser la configuration de variantes SharePoint, vous pouvez également utiliser la commande Sync-DSPList disponible dans le Dynamite SharePoint Toolkit. Plus de détails ici.

+ There are no comments

Add yours