I'm writing some custom events code in SDL Tridion 2011 SP 1-1 which modifies a Component's field on save or localize, during the initialization phase:
var localize = EventSystem.Subscribe<Component, LocalizeEventArgs>(OnComponentLocalize, EventPhases.Initiated);
var save = EventSystem.Subscribe<Component, SaveEventArgs>(OnComponentSave, EventPhases.Initiated);
_subscriptions.Add(localize);
_subscriptions.Add(save);
The save event works fine but the same code doesn't work on the localize event - any changes made to the Component's XML are being discarded. I'm using pretty straightforward code:
var fields = new ItemFields(component.Content, component.Schema);
var translatedSummary = fields["summary"] as MultiLineTextField;
translatedSummary.Value = translation;
component.Content = fields.ToXml();
The only way I can get the changes to persist on localization is if I do it in a Post / Commit phase and do a check out / update & save / check in. This isn't great as it takes a few seconds to execute & does it in a separate transaction after the Component has been localized. Does anyone know of a more elegent way to do this?
I think the action of localizing will only change the the blueprint status of the item, and give you version #1 of the item in the new publication. I don't think you can make any modifications to that item without creating a new version (i.e. version 2).
This seems to be what you have found. I'm think your only option (which you have already discovered) will be to modify and re-save the item after he localization has occurred.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With