mai
2009
(Si une personne suit, oui, je suis en train de me taper un petit outil pour automatiser la création de mes sites…et ca commence a bien marcher)
Dans mes aventures avec l’API, encore un gros arrachage de cheveux en vue
Cela fait déjà quelques mois que j’ai un système a peu prés stable pour créer automatiquement des webs, leur appliquer un modèle, des customisations de listes et Co.
Récemment, les exigences on t changes, il faut maintenant créer des collections de sites.
Première réaction, ok, facile, il suffit de trouver la « bonne ligne de commande ©T »
…en fait, c’est loin d’être aussi simple.
Premièrement, la ou on doit simplement ajouter notre site a la liste des modèles de sites pour créer un modèle de site, pour les modèles de collection de site, il faut aussi ajouter le modèle aux modèles disponibles. Pour cela, ca se passe cote serveur, avec stsadm…
Il faut donc:
- Créer le modèle de site (dans les actions du site, sauver en tant que modèle)
- Copier le modèle sur le serveur physique hébergeant l’application web (admettons, sur c:\montemplate.stp)
- Lancer un coup de stsadm
stsadm -o addtemplate -filename « C:\montemplate.stp » -title « mon site projet » -description « mon modèle de site projet » - Vérifier que le modèle a bien été ajouté, avec stsadm
stsadm -o enumtemplates
-> « mon site projet » – Language: 1033 – Site Template: _GLOBAL_#0 – Template Id: 1
(Note, pour revenir sur mes exemples avec la base de contenu, si le modèle est bien ajouté, ou le retrouvera aussi dans la base de Configuration, dans la table CustomTemplates )
Ok, maintenant, mon modèle est au bon endroit…ne reste qu’a l’exploiter …
Pour créer une nouvelle collection de sites, je vais simplement remonter au niveau de ma web application, récupérer la liste des Sites (Sites étant une collection de site, et pas des webs…), et ajouter un nouveau SPSite.
SPSiteCollection allSites = parentSite.WebApplication.Sites;
SPSite newSite = allSites.Add(« sites/nouveau site », « nom du site »,
« description du site », 1033, templateID, « MonDomaine\\MonUser »,
« mon nom a moi », « philippe.vialatte@monserveuremail.com »);
}
…sauf que ce n’est pas si simple…En effet, la ou, pour les SPWeb, on passe directement un template, comme ca :
SPWeb parentWeb = parentSite.OpenWeb();
SPWebTemplateCollection templates = parentSite.GetCustomWebTemplates(_localeU);
SPWebTemplate siteTemplate = templates[siteTemplateName]; return parentWeb.Webs.Add(webName, webName, « », _localeU, siteTemplate, false, false);
}
Pour les SPSite, il faut l’ID interne du modèle, qui est généré directement par Sharepoint (je vous laisse imaginer le bonheur si il faut maintenir un ID genre _GLOBAL_#1)
Une solution, si on connait le nom du fichier STP, ou si on se base sur le titre du modèle, est de passer par la collection des modèles
if (template.Title.ToLowerInvariant().Equals(« mon site projet »)) {
templateID = template.Name; // _GLOBAL_#0
}
}
Attention, il faut bien préciser le bon ID pour la locale, sinon, pas moyen de retrouver le modèle.
Si ca intéresse du monde, je rajouterais un projet un peu plus complet, pour montrer le procédé plus en détail
Articles récents
Archives
- janvier 2014
- septembre 2013
- août 2013
- mai 2013
- avril 2013
- janvier 2013
- août 2012
- juin 2012
- mai 2012
- avril 2012
- mars 2012
- novembre 2011
- septembre 2011
- août 2011
- juillet 2011
- juin 2011
- mai 2011
- avril 2011
- février 2011
- janvier 2011
- novembre 2010
- octobre 2010
- septembre 2010
- août 2010
- juillet 2010
- juin 2010
- mai 2010
- avril 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- juin 2009
- mai 2009
- avril 2009
- mars 2009
- février 2009
- janvier 2009