Программно создавать сайт, используя пользовательский веб -шаблон в SharePoint 2010

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/5044

  •  16-10-2019
  •  | 
  •  

Вопрос

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

В 2007 году я получал

SPWebTemplate template = site.GetCustomWebTemplates(LCID)[number];

и использовал этот spwebtemplate в

SPWeb newSite = web.Webs.Add(url, title, description, LCID, template, true, false);

Это работало довольно хорошо в 2007 году. Но в 2010 году шаблоны сайта сохраняются в магазине решений

SPSite.Solutions

который возвращает только Spusersolution Objects, а не Spwebtates.

Поэтому мой вопрос: как я могу программно создавать сайты, используя шаблоны сайта из магазина решений.


Обновление: я пытался использовать

SPWeb newSite = web.Webs.Add(url, title, desc, LCID, templateName, true, false);

где TemplateName-это строка, подобная '{Template-Guid} #templateName', но он все еще не работает. Он выбрасывает следующую ошибку:

Critical error: File or arguments not valid for site template '{4a2d8952-a0af-49a6-8f55-46a59c8d68a2}#CustomerSiteTemplate'. Parameter name: WebTemplate 

Есть ли другие идеи, как создать сайт на основе Spwebtemplate?

Это было полезно?

Решение 3

Наконец я нашел место/свойство, где хранятся мои ранее сохраненные шаблоны сайта:

SPWebTemplateCollection templates = portal.GetWebTemplates(LCID);

Другие советы

Вот как это сделать с помощью пользовательского определения SharePoint WebTemaple 2010 года:

<?xml version="1.0" encoding="utf-8"?>
  <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
   <WebTemplate
    Name="CustomWebTemplate"
    BaseTemplateName="STS"
    BaseTemplateID="1"
    BaseConfigurationID="0"
    Title="Custom Site Template Title"
    Description=""
    DisplayCategory="Custom Template" />
  </Elements>

Сначала найдите пользовательские шаблоны "заголовок"

private static String GetTemplate(string solutionName, SPSite siteCollection)
    {
        string templateName = null;
        SPWebTemplateCollection coll = siteCollection.GetWebTemplates(1033);

        foreach (SPWebTemplate template in coll)
        {
            if (template.Title.Equals("Custom Site Template Title", StringComparison.CurrentCultureIgnoreCase))
            {
                templateName = template.Name;
            }
        }

        return templateName;
    }

Затем создайте сайт:

  private static void AddSite(SPWeb parentSite, string name, string templateName)
    {
        //Create the new site from the template
        bool allowUnsafeupdates = parentSite.AllowUnsafeUpdates;
        parentSite.AllowUnsafeUpdates = true;

        SPWeb newSite = parentSite.Webs.Add(name, name, name, 1033, templateName, false, false);
        newSite.Update();

        parentSite.AllowUnsafeUpdates = allowUnsafeupdates;
    }

Спасибо за пост. Но использование метода GetTemplate (String SolutionName, SPSite SiteCollection) выше смог получить имя шаблона, но, поскольку в моей коллекции SpwebtemplAteCollection у меня есть несколько шаблонов сайта с одним и тем же «названием». Таким образом, использование «заголовка» не возвращает мне правильный шаблон сайта, который мне нужен. Например, сначала у меня есть шаблон сайта «Хост», затем я удалил его, воссоздаю новый шаблон сайта, который снова назвал его с заголовком «Хост». Поэтому моя проблема в том, что когда был создан новый сайт, он использовал старый шаблон «хост» вместо нового, кто -нибудь может мне помочь?

string templateFromMethod = GetTemplate("hosts", siteInUserContext);

SPWeb newSubWeb = subsites.Add(TextBox1.Text, TextBox1.Text, TextBox1.Text, 1033, templateFromMethod, false, false);

private static String GetTemplate(string solutionName, SPSite siteCollection) 
        { 
            string templateName = null; 
            //SPWebTemplateCollection coll = siteCollection.GetWebTemplates(1033); 
            SPWebTemplateCollection coll = siteCollection.GetCustomWebTemplates(1033); 
            foreach (SPWebTemplate template in coll) 
            {

                if (template.Title.Equals(solutionName, StringComparison.CurrentCultureIgnoreCase))
                {
                    templateName = template.Name;
                } 
            } 
            return templateName; 
        } 

Вот как я это сделал:

Извлеките из моего блога:

Обратите внимание, что SiteUrl ниже содержит URL для коллекции сайтов, например, Site_Name или Sites/Site_Name. Это может быть либо относительным, либо абсолютным для типичных сайтов.

protected void CreateTeamSite(string siteUrl, string newsiteName, SPFieldUserValue siteOwner)
{
    try
    {
        using (SPSite site = new SPSite(“http://SPSite”))
        {
            using (SPWeb web = site.OpenWeb())
            {
                web.AllowUnsafeUpdates = true;

                // Set the user for your new site
                string ownerLogin = siteOwner.User.LoginName; //user’s login name
                string ownerEmail = siteOwner.User.Email;
                string ownerName = siteOwner.User.Name;

                //Create new web site
                SPWeb newWeb = siteCollection.Add(“/” + siteUrl, siteName, “site description”, 1033,{Name of the Site Template}, ownerLogin,ownerName,ownerEmail );
                newWeb.Update();
            }
        }
}

Чтобы получить имя существующего шаблона сайта {Имя шаблона сайта} Следуйте следующим шагам

  1. Сохраните сайт как шаблон.

  2. Перейдите в настройки сайта -> Сайты и рабочие пространства -> Создать.

  3. IE Инструменты> Инструменты разработчика> Найти> SELECT ELEMENT, нажмите> Просмотреть> Источник> DOM (элемент)> Выделите и скопируйте раздел

    тест

Тот, что жирным шрифтом, будет названием вашего шаблона вашего сайта.

источник

Я использовал приведенный ниже код для создания субсификации с помощью CSOM C#

public bool CreateSite(ClientContext ctx,SomeClassWithDetails request) {
            try
            {
                WebCreationInformation wci = new WebCreationInformation();
                wci.Url = "Url of Subsite";
                wci.Title = "subsite title";
                wci.Description = "subsite description";
                wci.UseSamePermissionsAsParentSite = true;
                wci.WebTemplate = "{GUID_OF_TEMPLATE}#TemplateName";
                wci.Language = 1033; //English -1033, French 1036 etc
                Web w = ctx.Site.RootWeb.Webs.Add(wci);
                ctx.ExecuteQuery();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

Кроме того, если вы не знаете ценность шаблона, вы можете получить, если посетить приведенный ниже URL

https://sharepointsite/_api/web/GetAvailableWebTemplates(1033)

1033 для английского, 1036 для французского и т. Д.

Поиск с именем шаблона, и вы должны использовать значение внутри <d:Name> ярлык

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top