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

ric*_*eym 7 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);
Run Code Online (Sandbox Code Playgroud)

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

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

我可以得到改变坚持本地化的唯一方法是,如果我在一个帖子做/提交阶段,并做了退房/更新和保存/办理入住手续.这不是很大,因为它需要几秒钟来执行&在本地化Component之后,它在单独的事务中执行.有谁知道更优雅的方式来做到这一点?

Chr*_*ers 5

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

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