我有一个继承自标准模板的分支模板。如果我将渲染添加到分支模板并使用菜单功能添加到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);
答案 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);
}
由于