/// <summary> /// Restoring items from the recycle bin does not invoke the data provider at all, so we have to attach to its event /// to cause restored items to be rewritten to disk if they are included. /// </summary> protected virtual void HandleItemRestored(RestoreItemCompletedEvent restoreItemCompletedEvent) { if (!restoreItemCompletedEvent.DatabaseName.Equals(Database.Name, StringComparison.Ordinal)) { return; } // we use a timer to delay the execution of our handler for a couple seconds. // at the time the handler is called, calling Database.GetItem(id) returns NULL, // or without cache an item with an orphan path. The delay allows Sitecore to catch up // with it. new Timer(state => { var item = GetSourceItemDataFromId(new ID(restoreItemCompletedEvent.ItemId), true); Assert.IsNotNull(item, "Item that was restored was null."); SerializeItemIfIncluded(item, "Restored"); }, null, 2000, Timeout.Infinite); }
/// <summary> /// Restoring items from the recycle bin does not invoke the data provider at all, so we have to attach to its event /// to cause restored items to be rewritten to disk if they are included. /// </summary> protected virtual void HandleItemRestored(RestoreItemCompletedEvent restoreItemCompletedEvent) { if (!restoreItemCompletedEvent.DatabaseName.Equals(Database.Name, StringComparison.Ordinal)) return; // we use a timer to delay the execution of our handler for a couple seconds. // at the time the handler is called, calling Database.GetItem(id) returns NULL, // or without cache an item with an orphan path. The delay allows Sitecore to catch up // with it. new Timer(state => { var item = GetItemFromId(new ID(restoreItemCompletedEvent.ItemId), true); Assert.IsNotNull(item, "Item that was restored was null."); var iitem = new ItemData(item); SerializeItemIfIncluded(iitem, "Restored"); }, null, 2000, Timeout.Infinite); }