Программно создавать сайт, используя пользовательский веб -шаблон в SharePoint 2010
-
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();
}
}
}
Чтобы получить имя существующего шаблона сайта {Имя шаблона сайта} Следуйте следующим шагам
Сохраните сайт как шаблон.
Перейдите в настройки сайта -> Сайты и рабочие пространства -> Создать.
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>
ярлык