none
Sharepoint 2013. Определение названия шаблона сайта в евент ресивере. RRS feed

  • Вопрос

  • День добрый. 

    Создаю шаблон веба программно:

    <?xml version="1.0" encoding="utf-8"?>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <WebTemplate AdjustHijriDays="0" AlternateCssUrl="" AlternateHeader="" BaseTemplateID="1" BaseTemplateName="STS" BaseConfigurationID="0" 
                   CalendarType="1" Collation="7" ContainsDefaultLists="TRUE" CustomizedCssFiles="" CustomJSUrl="" 
                   ExcludeFromOfflineClient="FALSE" Locale="1049" Name="CustomTemplateName" ParserEnabled="TRUE" PortalName="" 
                   PortalUrl="" PresenceEnabled="TRUE" ProductVersion="15" QuickLaunchEnabled="TRUE" HideSiteContentsLink="TRUE" 
                   EnableMinimalDownload="TRUE" Subweb="FALSE" SyndicationEnabled="TRUE" Time24="TRUE" TimeZone="51" Title="Сайт проекта" 
                   TreeViewEnabled="FALSE" UIVersionConfigurationEnabled="FALSE" xmlns="http://schemas.microsoft.com/sharepoint/"  DisplayCategory="LightPoint"/>
    </Elements>

    Необходимо добавить некоторые списки/страницы на веб с таким шаблоном. Для этого создаю ресивер с событием WebProvisioned, в котором нужно определить, создан ли сайт от моего шаблона. Если да, добавляю списки/страницы.

    Беда в том, что properties.Web.WebTemplate и properties.Web.WebTemplateId возвращают значения не моего шаблона, а базового. 

    Сталкивался кто нибудь с таким?


    • Изменено Abibok Yura 18 августа 2014 г. 12:26
    18 августа 2014 г. 12:25

Ответы

  • Нашел решение. PropertyBag 

    1. Создаем <WebTemplate> и кидаем его в фичу со скоупом Farm.

    2. Создаем <PropertyBag> с нашим свойством, которое будет идентифицировать вебы с нашим темплейтом. Кидаем этот элемент в фичу со скоупом Web. 

    3. В файле ONet.xml прописываем id фичи со скоупом Web

    <WebFeatures>
            <Feature ID="{a79ee4c9-da8b-4ff0-9095-ebc342b60297}" />

    ..............

    4. Проверяем свойство файла ONet.xml 

    DeploymentType = ElementFile

    Все. Веб, созданный от этого шаблона будет изначально хранить в PropertyBag наше св-во, по которому мы определим, что он был создан именно от нашего шаблона.

    Здесь более подробно описано, даже можно скачать исходники

    http://blogs.msdn.com/b/vesku/archive/2010/10/14/sharepoint-2010-and-web-templates.aspx#references 

    • Помечено в качестве ответа Abibok Yura 19 августа 2014 г. 11:59
    19 августа 2014 г. 11:59

Все ответы

  • Добрый день,

    это сделать не просто. Вы всегда будете получать:

    BaseTemplateName="STS" BaseTemplateID="1" .

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

    manifest.xml TemplateID , запаковать и отправить обратно (не пробовал, но может и получится).

    Так же можно задействовать PropertyBag с дополнительным свойством CustomTemplateID.

    Отпишитесь о результатах, это многим интересно.

    • Предложено в качестве ответа Alexander Ulmaskulov 19 августа 2014 г. 7:37
    • Отменено предложение в качестве ответа Abibok Yura 19 августа 2014 г. 7:53
    19 августа 2014 г. 3:32
  • Нашел решение. PropertyBag 

    1. Создаем <WebTemplate> и кидаем его в фичу со скоупом Farm.

    2. Создаем <PropertyBag> с нашим свойством, которое будет идентифицировать вебы с нашим темплейтом. Кидаем этот элемент в фичу со скоупом Web. 

    3. В файле ONet.xml прописываем id фичи со скоупом Web

    <WebFeatures>
            <Feature ID="{a79ee4c9-da8b-4ff0-9095-ebc342b60297}" />

    ..............

    4. Проверяем свойство файла ONet.xml 

    DeploymentType = ElementFile

    Все. Веб, созданный от этого шаблона будет изначально хранить в PropertyBag наше св-во, по которому мы определим, что он был создан именно от нашего шаблона.

    Здесь более подробно описано, даже можно скачать исходники

    http://blogs.msdn.com/b/vesku/archive/2010/10/14/sharepoint-2010-and-web-templates.aspx#references 

    • Помечено в качестве ответа Abibok Yura 19 августа 2014 г. 11:59
    19 августа 2014 г. 11:59