我有一个模板两个文本字段。用户基于该模板创建项目并将内容输入到第一个文本字段中。
在项目保存时,我希望能够以某种方式操纵该值,并在保存项目时将其写入第二个字段。
我已经阅读了3种方法 - 项目:已保存,项目:保存或项目保存规则引擎。我正在寻找这些方法差异的解释,如果你必须选择哪一个?
答案 0 :(得分:5)
项目已保存是保存项目后触发的事件。我不会使用它,因为一旦你想再次更新相同的项目它会链接事件。有办法避免这种情况,但我宁愿使用Item:Saving,它会在项目保存之前被触发。
规则引擎,我不确切知道它是如何满足您的需求的。
项目保存的示例,用于在保存之前更改项目名称:
public class ItemNameReplacementEventHandler
{
/// Called when [item saving].
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="args">The <see cref="System.EventArgs"/> instance containing the event data.</param>
public void OnItemSaving(object sender, EventArgs args){
var item = GetContextItem(args);
if (!ShouldChange(item))
return;
//do the replace
Regex pattern = new Regex(this.ReplaceFromRegexPattern);
string newName = pattern.Replace(item.Name, this.ReplaceToString);
item.Name = newName;
}
private static Item GetContextItem(EventArgs args)
{
return Event.ExtractParameter(args, 0) as Item;
}
}
只需更改字段的值,或者在本例中更改项目名称即可。
配置如下:
<events>
<event name="item:saving">
<handler patch:before="handler[@type='Sitecore.Tasks.ItemEventHandler, Sitecore.Kernel']"
type="TYPE, ASSEMBLY" method="OnItemSaving">
</handler>
</event>
</events>