如何使用Web服务在SharePoint 2010中创建新的子站点?

时间:2010-01-13 11:09:14

标签: sharepoint

在SharePoint 2010中,站点Web服务中有一个新方法CreateWeb,用于创建新的SharePoint子站点。然而,它有很多问题 - 至少,这是我的经验。以下是应该正确使用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);

如果发生错误,以下代码将返回Soap异常(例如,已存在地址为“newsite”的子站点,或者指定的模板不存在)。

如果一切正常,则会触发InvalidOperation异常,并显示消息“XML文档中存在错误(1,310)。”,但该网站实际上已创建!

如果一切正常,但是我使用自己的解决方案而不是非默认的SharePoint模板(例如团队网站,即STS#0),我会收到Soap异常并且不会创建该网站。

到目前为止,这是一次糟糕的经历。请在SP 2010中发布您的子网站创建经验,如果您有任何问题,请将解决方案发布到这些问题。干得好!

2 个答案:

答案 0 :(得分:1)

SP2010 beta中的步骤可以从[自定义]模板创建[sub]网站:

  • 激活您的网站模板
  • 浏览到betasoftwaresucks / _layouts / templatepick.aspx
  • 点击“自定义”标签。您应该能够看到模板
  • 打开一个可以检查DOM的工具(例如IE Developer Tools或Firebug)。 DOM是动态修改的,因此除非您对默认选定选项卡中的某个默认模板感兴趣,否则只是查看HTML将无效。
  • 找到代表您模板的选项元素的。它看起来像“{guid} #templatename”。确保“自定义”标签仍处于打开状态,或者您可能无法找到它。
  • 将该值用作CreateWeb的模板参数。

[我手动滚动我的SP SOAP“所以看到完整的请求和响应是微不足道的。]

答案 1 :(得分: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);
 }