Tom*_*eld 3 .net c# asp.net sitecore sitecore6
我需要将很多模板字段的Shared属性设置为false.是否有一种简单的方法可以在没有字段ID更改的代码中执行此操作?我写了以下代码,但它似乎没有更新属性.
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)
{
}
}
Run Code Online (Sandbox Code Playgroud)
虽然TemplateManager.GetTemplates调用会为您提供Template对象集合,但您需要的是TemplateItem对象,以便能够对其进行编辑.您可以使用该ID从现有Database对象中获取该ID .
然后,您需要迭代到每个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);
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)