【问题标题】:Overriding Content of SDL Tridion Component using Event Handlers使用事件处理程序覆盖 SDL Tridion 组件的内容
【发布时间】:2012-07-17 06:40:21
【问题描述】:

如何使用事件处理程序覆盖组件的字段值?当我有下面的代码 sn-p 时,保存组件时没有错误。但是事件处理程序所做的内容更改不会反映在组件中。我希望单值字段“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...";
    }
}

【问题讨论】:

    标签: tridion tridion-2011


    【解决方案1】:

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

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

    【讨论】:

    • 之所以会这样,是因为ItemFields集合是一个所谓的分离集合,所以在里面进行更改并不会直接更新组件。
    • 在旧版 API 中,您可以使用分离的集合,然后使用它在“父”对象上再次设置相关的集合属性。这看起来像是使用核心服务的等效方法,对吧?
    • 如果你的意思是 TOM,我不认为字段集合是分离的。像 'Component.Fields("heading").Value(1) = "Test" : Component.Save (True)' 这样的东西就可以了。啊,黄金时代..
    猜你喜欢
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多