我正在 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();
我可以让更改持续本地化的唯一方法是,如果我在 Post / Commit 阶段执行它并执行签出 / 更新和保存 / 签入。这不是很好,因为它需要几秒钟来执行 &在组件本地化后在单独的事务中执行此操作。有谁知道更优雅的方法来做到这一点?