Sitecore 如何使用插入规则

Sitecore How to Use Insert Rule

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

父项和子项使用相同的模板(我的意思是它是相同的标准值)并且如果父项更新内容中的字段值之一(不是 __standard 值),则子项中的相同字段也有变化。

我不确定是否可以在 Sitecore 中使用 "Insert Rule"。 我可以知道如何使用 "Insert Rule" 吗?

您可以在保存父项时更新子项。此处描述了一些用于保存父项的选项:

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();
}

我不确定这是否是使用插入规则的最佳位置。

但是您可以改用 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();
            }
        }
    }
}

代码未经测试,但在最坏的情况下它应该为您指明正确的方向。

保存时您会知道当前项目,您可以检查是否存在同一模板的子项目,如果存在则更新它们。

我不确定此时您是否需要了解父项目,但如果需要,您可以对当前要保存的项目执行 item.parent。