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 イベントは問題なく動作しますが、ローカライズ イベントでは同じコードが動作しません。コンポーネントの XML に加えられた変更はすべて破棄されます。私はかなり簡単なコードを使用しています:
var fields = new ItemFields(component.Content, component.Schema);
var translatedSummary = fields["summary"] as MultiLineTextField;
translatedSummary.Value = translation;
component.Content = fields.ToXml();
ローカリゼーションで変更を永続化する唯一の方法は、Post / Commit フェーズでそれを行い、チェックアウト / 更新 & 保存 / チェックインを行うことです。コンポーネントがローカライズされた後、別のトランザクションでそれを行います。これを行うためのよりエレガントな方法を知っている人はいますか?