Пользовательский шаблон не найден при создании сайта SharePoint в ASP - PullRequest
0 голосов
/ 15 марта 2011

Я пытаюсь программно создать сайт SharePoint из пользовательского шаблона с использованием кода ASPX.Это код, связанный с обработчиком события для кнопки, которая запускает действие:

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;
}

Дело в том, что шаблон, который я ищу , действительно найден вызовомto 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)

Это кажется мне очень странным, поскольку шаблон определенно входит в число доступных шаблонов.Кто-нибудь знает, что происходит?

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Вы можете попробовать эту функцию ... у меня отлично работает!

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;
        }
0 голосов
/ 15 марта 2011

Мне как-то удалось заставить эту вещь работать, но не совсем очевидно, что решило проблему. Изменен цикл поиска шаблонов с

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

до

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

Также изменено "template.Name" на "template" в спецификации шаблона. Это не должно вызывать никакой разницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...