使用事件处理程序覆盖SDL Tridion组件的内容

use*_*297 6 tridion tridion-2011

如何使用事件处理程序覆盖组件的字段值?当我有下面的代码片段时,保存组件时没有错误.但是事件处理程序完成的内容更改不会反映在Component中.我希望单值字段"size"具有"blabla ..."作为值.

// Call to Subscribe the events
EventSystem.Subscribe<Component, SaveEventArgs>(ComponentSaveInitiatedHandler,
                                                EventPhases.Initiated); 

private void ComponentSaveInitiatedHandler(Component component, 
                                          SaveEventArgs args, EventPhases phases)
{
    if (component.Schema.Title == "XYZ")
    {
        ItemFields Fields = new ItemFields(component.Content, component.Schema);
        SingleLineTextField textField = (SingleLineTextField)Fields["size"];
        textField.Value = "blabla...";
    }
}
Run Code Online (Sandbox Code Playgroud)

Qui*_*ijn 9

您需要使用XML字符串更新Content属性,如下所示:

ItemFields Fields = new ItemFields(component.Content, component.Schema);
SingleLineTextField textField = (SingleLineTextField)Fields["size"];
textField.Value = "blabla...";
component.Content = Fields.ToXml();
Run Code Online (Sandbox Code Playgroud)

  • 原因是因为ItemFields集合是一个所谓的分离集合,因此在那里进行更改不会直接更新组件. (2认同)