Автоматически отменять публикацию заархивированных элементов в sitecore - PullRequest
0 голосов
/ 07 февраля 2019

Я столкнулся с задачей, когда я должен отменить публикацию элементов в sitecore, когда они автоматически архивируются.

Я не могу найти события, описанные в документации по sitecore, которые запускаются приэлемент автоматически архивируется, то есть когда достигается дата архивации.

Я могу использовать как конвейеры, так и события, и версия sitecore - 7.2.

Извините, что не далпример того, как я пытался ее решить, но я действительно потерян в темноте.

Обновление 19-02-2019. Оказывается, Sitecore удаляет элемент послеон заархивирован, поэтому я вместо этого использовал событие OnItemDeleted для выполнения пользовательской обработки.

1 Ответ

0 голосов
/ 08 февраля 2019

вы можете сделать это с помощью специального процессора:

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>

Попробуйте это и дайтея знаю, сработало ли это.

...