2 votes

Comment créer un nouveau sous-site dans SharePoint 2010 à l'aide de services Web ?

Dans SharePoint 2010, il y a une nouvelle méthode CreateWeb dans le service web Sites avec le but de créer de nouveaux sous-sites SharePoint. Il y a, cependant, beaucoup de problèmes avec cette méthode - c'est du moins mon expérience. Voici le code qui devrait utiliser le service web et sa méthode correctement :

Uri site = new Uri("http://sp2010site/"); 
string webServicePath = "_vti_bin/Sites.asmx";
string webServiceUrl = Path.Combine(site.AbsoluteUri, webServicePath);

Sites webService = new Sites();
webService.Credentials = CredentialCache.DefaultNetworkCredentials;
webService.Url = webServiceUrl;

//the following line creates the sub site
string result = webService.CreateWeb("newsite", "New Site", "Site desc", "STS#0", 
    1033, true, 1033, true, 1033, true, true, true, true, true, true, true);

Le code suivant renvoie l'exception Soap si quelque chose de mal s'est produit (par exemple, un sous-site avec l'adresse "newsite" existe déjà, ou le modèle spécifié n'existe pas).

Si tout va bien, une exception InvalidOperation est déclenchée avec le message "There is an error in XML document (1, 310).", mais le site est effectivement créé !

Si tout va bien, mais que j'utilise ma propre solution au lieu du modèle SharePoint par défaut (comme le site Team, c'est-à-dire STS#0), je reçois une exception Soap et le site n'est pas créé.

C'est une expérience terrible jusqu'à présent. Merci de nous faire part de vos expériences avec la création de sous-sites dans SP 2010, et mieux encore, de nous faire part de vos solutions à ces problèmes si vous en avez. Merci à tous !

1voto

Les étapes de SP2010 bêta quelque chose pour créer un [sous] site à partir d'un modèle [personnalisé] :

  • Activez votre modèle de site
  • Naviguez jusqu'à betasoftwaresucks/_layouts/templatepick.aspx
  • Cliquez sur l'onglet "Personnalisé". Vous devriez être en mesure de voir votre modèle
  • Ouvrez un outil qui peut inspecter le DOM (par exemple, IE Developer Tools ou Firebug). Le DOM est modifié de manière dynamique, de sorte que la simple visualisation du HTML ne fonctionnera pas, sauf si vous êtes intéressé par l'un des modèles par défaut de l'onglet sélectionné par défaut.
  • Trouvez le valeur de l'élément optionnel représentant votre modèle. Cela ressemblera à "{guid}#templateename". Assurez-vous que l'onglet "Custom" est toujours ouvert, sinon vous risquez de ne pas pouvoir le trouver.
  • Utilisez cette valeur comme paramètre de modèle pour CreateWeb.

(Je roule mon SP SOAP "à la main", il est donc trivial de voir la demande et la réponse complètes).

0voto

Shyam sundar shah Points 877
SharepointSiteService.Sites siteWS = new SharepointSiteService.Sites();
                                siteWS.Credentials = new System.Net.NetworkCredential("user1", "password", "domain");
try 
{

                                            SharepointSiteService.Template[] templates;
                                            siteWS.GetSiteTemplates(1033, out templates);
                                            SharepointSiteService.Template template = (from SharepointSiteService.Template t
                                            in templates
                                                                                       where t.Title == "Test Template"
                                                                                       select t).FirstOrDefault();

siteWS.CreateWeb("<parent web name>" + "/" + <sub web name>" + "/" + <sub web name>", "Test web", "Test Web", template.Name, 1033, true, 1033, true, 1033, true, false, false, false, false, false, false); 
}
catch (Microsoft.SharePoint.SoapServer.SoapServerException e)
{
                                        System.Diagnostics.EventLog.WriteEntry("SharePoint Foundation", "soap exception" + e.Detail + e.Message + e.Source + e.Node);
}
catch (Exception ex)
{
                                        System.Diagnostics.EventLog.WriteEntry("SharePoint Foundation", "Site Created");
                                        System.Diagnostics.EventLog.WriteEntry("SharePoint Foundation", ex.Message + ex.Source + ex.StackTrace);
 }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X