自定义事件代码,用于在本地化时更新组件

时间:2012-12-03 16:06:54

标签: tridion tridion-2011

我在SDL Tridion 2011 SP 1-1中编写了一些自定义事件代码,在初始化阶段修改了一个组件的保存或本地化字段:

var localize = EventSystem.Subscribe<Component, LocalizeEventArgs>(OnComponentLocalize, EventPhases.Initiated);
var save = EventSystem.Subscribe<Component, SaveEventArgs>(OnComponentSave, EventPhases.Initiated);
_subscriptions.Add(localize);
_subscriptions.Add(save);

save事件工作正常但相同的代码不能处理localize事件 - 对组件的XML所做的任何更改都将被丢弃。我使用非常简单的代码:

var fields = new ItemFields(component.Content, component.Schema);
var translatedSummary = fields["summary"] as MultiLineTextField;
translatedSummary.Value = translation;
component.Content = fields.ToXml();

我可以让更改继续进行本地化的唯一方法是,如果我在发布/提交阶段执行此操作并执行检出/更新&amp;保存/签入。这不是很好,因为它需要几秒钟的时间来执行&amp;在本地化Component之后,它在单独的事务中执行。有没有人知道更加优雅的方式呢?

1 个答案:

答案 0 :(得分:5)

我认为本地化的操作只会改变项目的蓝图状态,并为新版本中的项目提供版本#1。我不认为你可以在不创建新版本(即版本2)的情况下对该项目进行任何修改。

这似乎就是你所发现的。我认为您唯一的选择(您已经发现)将在本地化发生后修改并重新保存该项目。