вы можете сделать это с помощью специального процессора:
namespace Website.Pipelines
{
public class UnpublishArchivedItem : DeleteItems
{
public void Process(ClientPipelineArgs args)
{
Assert.ArgumentNotNull(args, "args");
Database database = Factory.GetDatabase(args.Parameters["database"]);
Assert.IsNotNull(database, typeof(Database), "Name: {0}", args.Parameters["database"]);
ListString listStrings = new ListString(args.Parameters["items"], '|');
Database target = Factory.GetDatabase("web");
foreach (string listString in listStrings)
{
Item item = database.GetItem(listString, Language.Parse(args.Parameters["language"]));
if (item == null)
{
continue;
}
Log.Audit(this, "Unpublish item: {0}", new string[] { AuditFormatter.FormatItem(item) });
item.Editing.BeginEdit();
item.Publishing.NeverPublish = true;
item.Editing.EndEdit();
PublishManager.PublishItem(item.Parent, new []{ target }, item.Languages, true, false);
}
}
}
}
Это зафиксирует ваш заархивированный элемент как неопубликованный и будет удален из "веб" базы данных.
Кроме того, вы можете напрямую удалить элемент из веб-базы данных с помощью метода item.Delete (), но лично он не является оптимальным, поскольку вам необходимо обновить свои индексы.
Затем создайте файл конфигурации, чтобы определить ваш процессор, и вставьте его до того, как элемент будет заархивирован, что является методом Выполнить .
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<processors>
<uiArchiveItems>
<processor type="Website.Pipelines.UnpublishArchivedItem,Website" patch:before="*[@method='Execute']" />
</uiArchiveItems>
</processors>
</sitecore>
</configuration>
Попробуйте это и дайтея знаю, сработало ли это.