我想在其子项中获取父值。
父和子正在使用相同的模板(我的意思是它是相同的标准值),如果父更新内容中的字段值(不是__standard值),子项中的相同字段也会更改。
我不知道我是否可以在Sitecore中使用“插入规则”。 我可以知道如何使用“插入规则”吗?
答案 0 :(得分:2)
您可以在保存父项时更新子项。这里描述了一些挂钩保存父项的选项:
要更新子项目,您需要执行以下操作:
foreach (var child in parent.GetChildren())
{
child.Editing.BeginEdit();
child.Fields["My Field"].Value = parent.Fields["My Field"].Value;
child.Editing.EndEdit();
}
答案 1 :(得分:1)
我不确定这是否是使用插入规则的最佳位置。
但是,您可以改为使用item:created
事件:
<event name="item:created">
<handler type="YourNameSpace.UpdateFieldEventHandler, YourAssembly" method="OnItemCreated" />
</event>
public class UpdateFieldEventHandler
{
public void OnItemCreated(object sender, EventArgs args)
{
using (new SecurityDisabler())
{
ItemCreatedEventArgs arg = Event.ExtractParameter(args, 0) as ItemCreatedEventArgs;
if (arg != null && arg.Item.TemplateName == "Your Template"
&& arg.Item.Parent.TemplateName == "Your Template")
{
arg.Item.Editing.BeginEdit();
arg.Item["Your Field Name"] = arg.Item.Parent["Your Field Name"];
arg.Item.Editing.EndEdit();
}
}
}
}
代码未经过测试,但在最坏的情况下,它应该指向正确的方向。
答案 2 :(得分:0)
保存时,您将知道当前项目,并且您可以检查是否存在相同模板的子项目,如果是,则更新那些项目。
我不确定你是否需要知道父项目,但如果你需要,你可以对正在保存的当前项目做一个item.parent。