(From Realse notes)
The performance of the get item operation for both regular and cloned items has been
increased by introducing a separate shared field ‘__Source Item’ for keeping reference to original item. (436659)
However a small issue that turns into large problem if you already have cloned items since the item.Source now returns null
for your old clones.
This due to a private method in the item object (GetItemUriFromSourceItem decompiled code below) shows that if the new field is empty the ItemUri returns null.
ItemUri itemUri1 = (ItemUri) null;
string itemUri2 = this.Fields[FieldIDs.Source].GetValue(false, false);
string itemUri3 = this.Fields[FieldIDs.SourceItem].GetValue(false, false);
itemUri1 = ItemUri.Parse(itemUri2);
return (ItemUri) null;
Sitecore.Data.Version version = itemUri1 == (ItemUri) null ? this.Version : itemUri1.Version;
return new ItemUri(new ItemUri(itemUri3).ToString(false), this.Language, version, this.Database);
and why is the language taken from the cloned item and not the source item as done with the version ?
Found this problem after upgraded the dev server to patch 6 from patch 5.
Now you need to do a migration of all your old clones and set this field.