基于另一个更新一个字段的值

时间:2014-08-07 20:56:54

标签: save sitecore

我有一个模板两个文本字段。用户基于该模板创建项目并将内容输入到第一个文本字段中。

在项目保存时,我希望能够以某种方式操纵该值,并在保存项目时将其写入第二个字段。

我已经阅读了3种方法 - 项目:已保存,项目:保存或项目保存规则引擎。我正在寻找这些方法差异的解释,如果你必须选择哪一个?

1 个答案:

答案 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>