2010-01-13 9 views
2

Dans SharePoint 2010, il existe une nouvelle méthode CreateWeb dans le service Web Sites dans le but de créer de nouveaux sous-sites SharePoint. Il y a, cependant, beaucoup de problèmes avec cela - eh bien, c'est mon expérience au moins. Voici le code qui devrait utiliser le service Web et sa méthode correctement:Comment créer un nouveau sous-site dans SharePoint 2010 à l'aide de services Web?

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 exception Soap si quelque chose de mal est arrivé (par exemple un sous-site avec l'adresse « newsite » existe déjà, ou le modèle spécifié n'existe pas).

Si tout est correct, une exception InvalidOperation est déclenchée avec le message "Il y a une erreur dans le document XML (1, 310).", Mais le site est réellement créé! Si tout est OK, mais que j'utilise ma propre solution au lieu du modèle SharePoint non défini par défaut (tel que le site Team, STS # 0), j'obtiens une exception Soap et le site n'est pas créé.

Cela a été une expérience terrible jusqu'à présent. S'il vous plaît poster vos expériences avec la création de sous-site dans SP 2010, et mieux encore, postez vos résolutions à ces problèmes si vous en avez. Salut à tous!

Répondre

1

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

  • Activez votre modèle de site
  • Parcourir pour 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é dynamiquement, donc le simple affichage du code HTML ne fonctionnera que si vous êtes intéressé par l'un des modèles par défaut de l'onglet sélectionné par défaut.
  • Recherchez la valeur de l'élément d'option représentant votre modèle. Cela ressemblera à "{guid} #templatename". Assurez-vous que l'onglet "Personnalisé" est toujours ouvert ou que vous ne pourrez peut-être pas le trouver.
  • Utilisez cette valeur en tant que paramètre de modèle pour CreateWeb.

[je roule ma SP SOAP « à la main » il est trivial de voir la demande complète et la réponse.]

+0

Ouais, tu as raison, le paramètre de chaîne de modèle doit être fourni en {site_guid} #template_name. Cependant, InvalidExceptio est toujours déclenché chaque fois que j'appelle la méthode CreateWeb (et que le site est créé). Donc, le problème reste. Avez-vous été capable de créer un site en utilisant la méthode CreateWeb sans aucune exception? C'est un tel drag ... Je sais que c'est en beta, mais quand même ... :) – Boris

+0

Ça marche bien ici. Nous avons rencontré un problème avec un modèle de site qui n'a pas pu être chargé, mais il a également échoué à se charger sous les mécanismes normaux. J'espère que vous trouverez une solution. –

+0

InvalidException est une erreur confirmée par Microsoft. Eh bien, j'espère qu'ils le répareront dans la version officielle de SharePoint 2010. – Boris

0
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); 
} 
Questions connexes