使用代码添加分支模板不会复制布局/渲染数据,为什么/如何修复?

时间:2016-01-04 12:26:06

标签: c# sitecore sitecore-branch-templates

我有一个继承自标准模板的分支模板。如果我将渲染添加到分支模板并使用菜单功能添加到Sitecore(插入 - >插入模板 - >等),渲染等按预期显示,即与分支模板中的完全相同。好像我预期的那样。

当我尝试在代码中添加分支模板时,会出现问题。这样做似乎忽略了分支模板中的任何渲染。显示的渲染仅是标准模板中的渲染。我已经尝试将所有渲染数据移动到分支模板中,但这导致没有布局数据被发送到新创建的项目。我创建了这个项目:

Item parent = SitecoreService.Database.GetItem(parentPath);
if (parent == null)
   throw new NullReferenceException("Cannot load item to act as parent from path: " + parentPath);

Item branchItem = SitecoreService.Database.GetItem(new ID(branchTemplateId));
branchItem.Fields.ReadAll();
//BranchItem branch = SitecoreService.Database.GetItem(new ID(branchTemplateId));
if (branchItem == null)
   throw new ApplicationException("Failed ot find template branch with the id:" + branchTemplateId);

Item itemFromBranch = parent.Add(itemName, new BranchItem(branchItem)); 

我实际上尝试了以上几种变体(使用隐式强制转换,在ReadAll中添加和删除Fields等)。

通过代码创建时,渲染字段为空白,当通过菜单创建时,渲染字段为" Raw"因此值:

<r  xmlns:xsd="http://www.w3.org/2001/XMLSchema"><d id="{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}" l="{9FCEC8D8-9676-4C12-A9E2-72E0EAD07B5B}"><r ds="{CE6EB528-B937-4B0F-9897-B26C4EF8AFEE}" id="{89E00DE8-774D-4584-8002-9C28E8099711}" par="" ph="header" uid="{9AAB1306-BF20-44E7-B83C-26DA7173DC9C}" /><r ds="{A046699C-5FDF-468F-8FDF-3E9FAB0A35D0}" id="{19DD096B-F95E-46C0-A290-12A4B04E910C}" par="" ph="header" uid="{EB1AEB53-E001-42B3-BDFD-7570817E3B59}" /><r id="{7DE1675E-B511-4879-9003-7AC46E83A07B}" ph="header" uid="{4CF3F325-258D-4749-9CE0-61B4675692E1}" /><r id="{A00BE211-B0E0-462A-B377-BEBFF753D250}" ph="header" uid="{EC988DBC-AE99-44A9-BE4A-153B9C02C9F7}" /><r ds="{5A6B1B00-6941-44BB-9418-07784826E5AF}" id="{784DE1DD-B3FB-4A2D-BF4D-7CF9DDEA8C49}" par="" ph="footer" uid="{948F0EC3-DB97-47E8-8C06-4FACC2FBF7DC}" /></d></r>

我在这里缺少什么?

试过马雷克斯&#39;建议如下,但似乎也这样做:

Item parent = SitecoreService.Database.GetItem(parentPath);
if (parent == null)
    throw new NullReferenceException("Cannot load item to act as parent from path: " + parentPath);

BranchItem branchItem = SitecoreService.Database.GetItem(new ID(branchTemplateId));

if (branchItem == null)
     throw new ApplicationException("Failed ot find template branch with the id:" + branchTemplateId);


Item itemFromBranch = Context.Workflow.AddItem(itemName, branchItem, parent);

2 个答案:

答案 0 :(得分:2)

UI命令使用Workflow.AddItem方法。

尝试以下代码:

Item branchItem = (BranchItem)SitecoreService.Database.GetItem(new ID(branchTemplateId));
if (branchItem == null)
    throw new ApplicationException("Failed ot find template branch with the id:" + branchTemplateId);

Context.Workflow.AddItem(itemName, branchItem, parent);

答案 1 :(得分:1)

尝试使用以下

var branchpath = "your/branch/template/path";

using (new SecurityDisabler())
{
   var masterDb = Sitecore.Configuration.Factory.GetDatabase("master");

   Item parentItem = masterDb.Items["path/to/parent/item/here"];

   BranchItem template = masterDb.GetItem(branchpath);

   parentItem.Add("YourItemName", template);

}

由于