Sitecore如何使用插入规则

时间:2015-01-29 21:22:54

标签: sitecore

我想在其子项中获取父值。

父和子正在使用相同的模板(我的意思是它是相同的标准值),如果父更新内容中的字段值(不是__standard值),子项中的相同字段也会更改。

我不知道我是否可以在Sitecore中使用“插入规则”。 我可以知道如何使用“插入规则”吗?

3 个答案:

答案 0 :(得分:2)

您可以在保存父项时更新子项。这里描述了一些挂钩保存父项的选项:

http://www.sitecore.net/Learn/Blogs/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/11/Intercepting-Item-Updates-with-Sitecore.aspx

要更新子项目,您需要执行以下操作:

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。