【问题标题】:Custom events code to update a Component on localize自定义事件代码以在本地化时更新组件
【发布时间】:2025-12-05 04:40:01
【问题描述】:

我正在 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();

如果我在发布/提交阶段执行此操作并执行签出/更新和保存/签入,我可以让更改持续本地化的唯一方法。这不是很好,因为它需要几秒钟在组件本地化后在单独的事务中执行 & 执行它。有谁知道更优雅的方法来做到这一点?

【问题讨论】:

  • 发生本地化事件时您的代码是否触发?
  • 是的,我记录了很多输出,包括看起来正确的组件 XML。

标签: tridion tridion-2011


【解决方案1】:

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

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

【讨论】: