Установить общий доступ к полям Sitecore для всех шаблонов в проекте - PullRequest
3 голосов
/ 25 ноября 2011

Мне нужно установить для свойства Shared для многих полей шаблона значение false.Есть ли простой способ сделать это в коде без изменения идентификаторов полей?Я написал следующий код, но он, похоже, не обновляет свойство.

Sitecore.Data.Database masterDb = Sitecore.Configuration.Factory.GetDatabase("master");

using (new Sitecore.SecurityModel.SecurityDisabler())
{
    try
    {
        var templates = TemplateManager.GetTemplates(masterDb);

        foreach (var template in templates.Values)
        {
            if (template.FullName.StartsWith("FolderName"))
            {
                foreach (var field in template.GetFields(false))
                {
                    TemplateManager.ChangeFieldSharing(field, TemplateFieldSharing.None, masterDb);
                }
            }
        }
    }
    catch (Exception ex)
    {
    }
}

1 Ответ

7 голосов
/ 25 ноября 2011

В то время как вызов TemplateManager.GetTemplates возвращает вам коллекцию объектов Template, вам нужен объект TemplateItem, чтобы иметь возможность его редактировать. Вы можете использовать идентификатор, чтобы получить его от существующего объекта Database.

Затем вам нужно выполнить итерацию в каждом TemplateSectionItem шаблона, прежде чем вы сможете добраться до TemplateFieldItem, где вы можете получить доступ к свойству InnerItem и внести изменения в общее поле. Вам также нужно отметить BeginEdit() и EndEdit(), чтобы вы могли выполнить изменение.

Sitecore.Data.Database masterDb = Sitecore.Configuration.Factory.GetDatabase("master");

using (new Sitecore.SecurityModel.SecurityDisabler())
{
    try
    {                     
        var templates = TemplateManager.GetTemplates(masterDb);

        foreach (var template in templates.Values)
        {                         
            if (template.FullName.StartsWith("FolderName"))
            {                             
                var tmpl = masterDb.GetTemplate(template.ID);

                foreach (var section in tmpl.GetSections())
                {                                 
                    foreach (var templateFieldItem in section.GetFields())
                    {
                        templateFieldItem.BeginEdit();
                        templateFieldItem.InnerItem[TemplateFieldIDs.Shared] = "0";
                        templateFieldItem.EndEdit();   
                    }    
                }
            }
        }
    }
    catch (Exception ex)
    {
        Response.Write("Error" + ex.Message);
    }
}

Надеюсь, это поможет :)

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