我正在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);
保存事件可以正常工作,但是相同的代码对本地化事件不起作用-对组件XML所做的任何更改都将被丢弃。我正在使用非常简单的代码:
var fields = new ItemFields(component.Content, component.Schema);
var translatedSummary = fields["summary"] as MultiLineTextField;
translatedSummary.Value = translation;
component.Content = fields.ToXml();
我可以将更改保留在本地化上的唯一方法是,如果我在“发布”/“提交”阶段进行此操作,然后执行“ checkout ”/“更新”并保存/ checkin 。这并不是一件好事,因为它需要花费几秒钟的时间执行和在组件已本地化之后,在单独的事务中执行此操作。有谁知道一种更优雅的方式来做到这一点?
最佳答案
我认为本地化操作只会更改项目的蓝图状态,并在新出版物中为您提供该项目的版本1。我认为您不能在不创建新版本(即版本2)的情况下对该项目进行任何修改。
这似乎就是您所发现的。我认为您唯一的选择(您已经发现)将是在本地化之后修改并重新保存该项目。
关于tridion - 自定义事件代码以在本地化时更新组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13687161/