我有一个模板两个文本字段.用户基于该模板创建项目并将内容输入到第一个文本字段中.
在项目保存时,我希望能够以某种方式操纵该值,并在保存项目时将其写入第二个字段.
我已经阅读了3种方法 - 项目:已保存,项目:保存或项目保存规则引擎.我正在寻找这些方法的区别的解释,如果你必须选择哪一个?
项目已保存是项目保存后触发的事件.我不会使用它,因为一旦你想再次更新相同的项目它会链接事件.有办法避免这种情况,但我宁愿使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
只需更改字段的值,或者在这种情况下更改项目名称,就足够了.
配置是这样的:
<events>
<event name="item:saving">
<handler patch:before="handler[@type='Sitecore.Tasks.ItemEventHandler, Sitecore.Kernel']"
type="TYPE, ASSEMBLY" method="OnItemSaving">
</handler>
</event>
</events>
Run Code Online (Sandbox Code Playgroud)