Sitecore 如何使用插入规则
Sitecore How to Use Insert Rule
我想在其子项目中获取父值。
父项和子项使用相同的模板(我的意思是它是相同的标准值)并且如果父项更新内容中的字段值之一(不是 __standard 值),则子项中的相同字段也有变化。
我不确定是否可以在 Sitecore 中使用 "Insert Rule"。
我可以知道如何使用 "Insert Rule" 吗?
您可以在保存父项时更新子项。此处描述了一些用于保存父项的选项:
要更新子项,您需要执行如下操作:
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。
我想在其子项目中获取父值。
父项和子项使用相同的模板(我的意思是它是相同的标准值)并且如果父项更新内容中的字段值之一(不是 __standard 值),则子项中的相同字段也有变化。
我不确定是否可以在 Sitecore 中使用 "Insert Rule"。 我可以知道如何使用 "Insert Rule" 吗?
您可以在保存父项时更新子项。此处描述了一些用于保存父项的选项:
要更新子项,您需要执行如下操作:
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。