2017-12-18 35 views
0

루트 수준에서 기존 사이트의 하위 사이트가 아닌 새 사이트를 만들고 싶습니다. CSOM을 사용하여 사이트를 만듭니다. 현재 시나리오에서는 인증을 위해 클라이언트 컨텍스트에 사이트 URL을 제공하고 작업을 수행해야합니다. 다음은 의사 코드입니다.CSOM을 사용하여 온라인으로 sharepoint에 새 사이트를 만들 수 있습니까?

string url = "https://mysharepoint.com/sites/testsite"; 

        SecureString f_SecurePass = new SecureString(); 
        foreach (char ch in pass) 
         f_SecurePass.AppendChar(ch); 

        clientcontext = new ClientContext(url); 

        var credentials = new SharePointOnlineCredentials(userid, f_SecurePass);     

        clientcontext.Credentials = credentials; 
        Web web = clientcontext.Web; 

        clientcontext.Load(web, website => website.Lists); 
        clientcontext.ExecuteQuery(); 

       WebCreationInformation wci = new WebCreationInformation(); 
       wci.Url = "/TestAPISite2"; 
       wci.Title = "TestAPISite2"; 
       wci.Language = 1033; 

       var newsite = clientcontext.Site.RootWeb.Webs.Add(wci); 
       clientcontext.ExecuteQuery(); 

해결책을 제안하십시오. 요구 사항에 대해서는

답변

0

:

내가 루트 수준에서 새 사이트를 만들

( 사이트를 기존에 하위 사이트되지 않음). 그것은 사이트 모음라고 SharePoint terminology

:

  • site collection/top level site/parent site - 사이트 모음 하위 사이트 (일명 웹)

에 포함 할 수있는 웹 사이트입니다 SharePoint CSOM API Tenant class은 이러한 목적으로 사용되며 특히 Tenant.CreateSite method입니다. 여기

은 예이다 :

const string username = "[email protected]"; 
const string password = "password"; 
const string tenantAdminUrl = "https://contoso-admin.sharepoint.com/"; 

using (var ctx = GetContext(tenantAdminUrl,userName,password)) 
{ 
    CreateSite(ctx, "https://contoso.sharepoint.com/sites/marketing","Marketing"); 
} 

여기서

internal static void CreateSite(ClientContext context, String url, String owner, String title =null, String template = null, uint? localeId = null, int? compatibilityLevel = null, long? storageQuota = null, double? resourceQuota = null, int? timeZoneId = null) 
{ 
    var tenant = new Tenant(context); 

    if (url == null) 
      throw new ArgumentException("Site Url must be specified"); 

    if (string.IsNullOrEmpty(owner)) 
      throw new ArgumentException("Site Owner must be specified"); 

    var siteCreationProperties = new SiteCreationProperties {Url = url, Owner = owner}; 
    if (!string.IsNullOrEmpty(template)) 
      siteCreationProperties.Template = template; 
    if (!string.IsNullOrEmpty(title)) 
      siteCreationProperties.Title = title; 
    if (localeId.HasValue) 
      siteCreationProperties.Lcid = localeId.Value; 
    if (compatibilityLevel.HasValue) 
      siteCreationProperties.CompatibilityLevel = compatibilityLevel.Value; 
    if (storageQuota.HasValue) 
     siteCreationProperties.StorageMaximumLevel = storageQuota.Value; 
    if (resourceQuota.HasValue) 
     siteCreationProperties.UserCodeMaximumLevel = resourceQuota.Value; 
    if (timeZoneId.HasValue) 
     siteCreationProperties.TimeZoneId = timeZoneId.Value; 
    var siteOp = tenant.CreateSite(siteCreationProperties); 
    context.Load(siteOp); 
    context.ExecuteQuery(); 
} 

public static ClientContext GetContext(string url, string userName, string password) 
{ 
    var securePassword = new SecureString(); 
    foreach (var ch in password) securePassword.AppendChar(ch); 
    return new ClientContext(url) {Credentials = new SharePointOnlineCredentials(userName, securePassword)}; 
}