Supprimer un ListTemplate SharePoint
Les modèles de listes (ou ListTemplate) sont des styles prédéfinis de listes pour SharePoint, stockés dans la librairie « Gallerie de modèles de listes ». SharePoint permet de gérer ces listes via le code spécifique.
Ainsi pour ajouter un style (à partir d’une liste déjà existante) on peut utiliser la méthode :
maList.SaveAsTemplate("Custom_List_Template", "Custom_List_Template", "Description", false);
Mais, et j’insiste sur le Mais, si ce ListTemplate existe déjà (même nom de fichier / même nom de ListTemplate) il sera impossible de réécrire par dessus : une exception sera levée disant que ce ListTemplate existe déjà.
Pour supprimer l’ancien ListTemplate il existe deux méthodes, une qu’on trouve facilement sur les blogs anglophones (et qui marche, mais pas partout ! Vous allez voir !) et une deuxième qui fonctionne à tout les coups.
La première consiste à récupérer la liste s’appelant « List Template Gallery » et à supprimer votre ListTemplate :
using (SPSite oSPsite = new SPSite("http://myserver/site"))
{
using (SPWeb oSPWeb = oSPsite.OpenWeb())
{
SPList objLstTempGallery = oSPWeb.Lists["List Template Gallery"];
foreach (SPListItem objLstItem in objLstTempGallery.Items)
{
if (objLstItem.Title == "Custom_List_Template")
{
objLstItem.Delete();
objLstTempGallery.Update();
break;
}
}
}
}
Cette méthode fonctionne … mais uniquement si votre SharePoint est en anglais ! Et oui ! S’il est en français la liste ne s’appelle plus « List Template Gallery » mais « Gallerie de modèles de listes ».
(J’ai découvert ça à mes dépends : tout marchait sur la machine de développement en anglais – tout les développeurs sont bilingues, c’est bien connu
– et plus rien sur la machine de production en français … Help !
)
Pour récupérer la liste de ListTemplate il faut donc passer par une autre méthode (qui fonctionne avec toutes les langues) :
using (SPSite oSPsite = new SPSite("http://myserver/site"))
{
using (SPWeb w= oSPsite.OpenWeb())
{
SPList l = w.GetCatalog(SPListTemplateType.ListTemplateCatalog);
foreach (SPListItem o in l.Items)
{
if (o.Title == "Custom_List_Template")
{
o.Delete();
l.Update();
break;
}
}
}
}
