2011-03-15 2 views
0

ASPX 코드 숨김을 사용하여 사용자 지정 서식 파일에서 프로그래밍 방식으로 SharePoint 사이트를 만들려고합니다.) (ASP에서 SharePoint 사이트를 만들 때 사용자 지정 서식 파일을 찾을 수 없습니다.

것은이
protected void Trigger_OnClick(object sender, EventArgs e) 
{ 

SPSite site = new SPSite("http://portal.innovit.internal/sites/lab/prosjektstyring-prototyp"); 

using (SPWeb web = site.OpenWeb()) 
{ 
    try 
    { 
     SPWebTemplate template = getSiteTemplate(web, "prosjektrom", 1044); 

     // Create new subsite 
     web.Webs.Add("templateSubsite3", "Subsite created in VS from template 3", 
        "What the title says", 1033, template.Name, false, false); 
    } 
    catch (Exception ex) 
    { 
     TextOutput.Text = ex.Message; 
     StackTrace.Text = ex.StackTrace; 
    } 
} 
} 

/// <summary> 
/// Look up a site template from site by name and Locale id (1033 = english 
/// 1044 = bokmål). Return null if no result. 
/// </summary> 
private SPWebTemplate getSiteTemplate(SPWeb parent, String templateName, 
             uint localeID) 
{ 
    // Loop through all available templates 
foreach (SPWebTemplate thisTemplate in parent.GetAvailableWebTemplates(localeID)) 
{ 
    if (thisTemplate.Title.ToLower().Equals(templateName.ToLower())) 
    return thisTemplate; 
} 
return null; 
} 

, 내가 찾고 있어요 템플릿이 실제로 parent.GetAvailableWebTemplates에 대한 호출에 의해 발견입니다 :이 작업을 실행하는 버튼에 대한 이벤트 처리기에 연결된 코드입니다 : 템플릿 이름은 "{54833785-C62D-48E0-9DC7-1D458BB60814} #prosjektrom"이고 제목은 "prosjektrom"입니다. 그러나 예외가 발생합니다.

"File or arguments not valid for site template {54833785-C62D-48E0-9DC7-1D458BB60814}#prosjektrom. Parameter name: WebTemplate" 
at Microsoft.SharePoint.SPWebTemplateCollection.get_Item(String strKey) 
at Microsoft.SharePoint.SPWeb.ApplyWebTemplate(String strWebTemplate) 
at Microsoft.SharePoint.SPWeb.CreateWeb(String strWebUrl, String strTitle, String strDescription, UInt32 nLCID, String strWebTemplate, Boolean bCreateUniqueSubweb, Boolean bConvertIfThere) 
at Microsoft.SharePoint.SPWebCollection.Add(String strWebUrl, String strTitle, String strDescription, UInt32 nLCID, String strWebTemplate, Boolean useUniquePermissions, Boolean bConvertIfThere) 
at CreateSiteDialog2.Layouts.CreateSiteDialog2.CreateSiteDialog2.Trigger_OnClick(Object sender, EventArgs e) 

템플릿이 사용 가능한 템플릿 중 하나이기 때문에 실제로 이상하게 보입니다. 누구가 무슨 일이 일어나는지 알아?

답변

0

어떻게 든이 문제를 해결할 수 있었지만 문제가 무엇이 해결되었는지는 완전히 명확하지 않습니다.

foreach (SPWebTemplate thisTemplate in SPContext.Current.Web.GetAvailableWebTemplates(localeID)) 

foreach (SPWebTemplate thisTemplate in parent.GetAvailableWebTemplates(localeID)) 

에서 템플릿을 보이는 루프를 변경 또한 템플릿의 사양에 "template.Name"을 "템플릿"로 변경. 그러나 이것은 아무런 차이를 일으키지 않아야합니다.

1

이 기능을 사용해 볼 수 있습니다 ... 나를 위해 잘 작동합니다!

private String getUniqueTemplateID(String strTemplateName, SPSite site) 
     { 
      String strUniqueID = ""; 

      SPWebTemplate webTemplate = site.GetWebTemplates(1033).Cast<SPWebTemplate>().FirstOrDefault(wt => wt.Title == strTemplateName); 

      strUniqueID = webTemplate.Name; 

      return strUniqueID; 
     } 
관련 문제