Within Sitecore, the Delete button is the bigger mystery for non-Sitecore experts….
Everybody assumes that an author going in the Authoring console and Deleting an item, the item got deleted and Unpublished… but unfortunately, this is not the case….
In the case you want the item to be deleted and unpublished, you have to delete the item and have to publish the parent of the item — with sub-items — just to remove it from a target database…
IMO Sitecore standard behavior should be to delete and unpublish, automatically but unfortunately this is not the case…
There are several possible solutions to this issue and this blog explain the possible customisation that you could do to mitigate the issue…
Introducing a new button:
https://sitecorejunkie.com/2013/08/04/delete-an-item-across-multiple-databases-in-sitecore/
Configuring Workflows: http://www.nonlinearcreations.com/Digital/how-we-think/articles/2016/02/Item-deletion-and-immediate-publication-in-Sitecore-8-and-8-1.aspx
My favorite option is to extend the Item Delete event to remove the item from the publishing targets as well…
This code explains how to do it…
public void OnItemDeleted(object sender, EventArgs args) { Item deltedItem = Event.ExtractParameter(args, 0) as Item; CleanUp(deltedItem.Id.ToString()); } public CleanUp(string itemId) { // Get all publishing targets var publishingTargets = Sitecore.Publishing.PublishManager.GetPublishingTargets(item.Database); // Loop through each target, determine the database, and publish foreach(var publishingTarget in publishingTargets) { // Find the target database name, move to the next publishing target if it is empty. var targetDatabaseName = publishingTarget["Target database"]; if (string.IsNullOrEmpty(targetDatabaseName)) continue; // Get the target database, if missing skip var targetDatabase = Sitecore.Configuration.Factory.GetDatabase(targetDatabaseName); if (targetDatabase == null) continue; DeleteItemInDatabase(targetDatabaseName, itemId); } } private static void DeleteItemInDatabases(IEnumerable databases, string itemId) { foreach(string database in databases) { DeleteItemInDatabase(database, itemId); } } private static void DeleteItemInDatabase(string databaseName, string itemId) { Database database = Factory.GetDatabase(databaseName); DeleteItem(database.GetItem(itemId)); } private static void DeleteItem(Item item) { if (Settings.RecycleBinActive) { item.Recycle(); } else { item.Delete(); } }
[…] made a post https://sitecorecommerce.wordpress.com/2018/11/05/sitecore-delete-published-items/ on how to handle the deletion of items across databases. And I remembered that I wrote code for […]
LikeLike
Thanks for this post.. just found it, but I’m using Sitecore 9.2 and am wondering if it’s still necessary to publish the parent of a deleted item. I need to make sure deleted items are no longer searchable or available. Thanks for any help/insight you can provide.
LikeLike