Удалить элемент sitecore из индекса solr без публикации родительского элемента

Я столкнулся с бизнес-требованием, когда хочу удалить элемент из основного и веб-сайта, а также удалить соответствующий элемент из индексов solr. бизнес не хочет публиковать родительский элемент, так как может быть изменение родственного или родственного элемента, поэтому я не могу запустить какую-либо стратегию, например onPublishEndAsync , onPublishEndAsyncSingleInstance onPublishEndAsyncPreview здесь я пытаюсь что-то вроде ниже, но это не работает

    var ParentItem = item.Parent;
                using (new EditContext(item))
                {
                    if (Sitecore.Configuration.Settings.RecycleBinActive)
                        item.Recycle();
                    else
                        item.Delete();
                }
                   if (item == null)
                return;
            ISearchIndex index = ContentSearchManager.GetIndex((SitecoreIndexableItem)ParentItem );
            if (index == null)
                return;
            index.Refresh(new SitecoreIndexableItem(ParentItem )); or 
           index.RefreshAsync(new SitecoreIndexableItem(item), IndexingOptions.ForcedIndexing, new System.Threading.CancellationToken());

Я не получаю никаких ошибок в файлах журнала sitecore или solr, но индекс не удаляет элемент


person Sunil Aher    schedule 08.10.2020    source источник


Ответы (1)


Вы можете пометить свой элемент как недоступный для публикации, опубликовать его (это удалит элемент из web базы данных и из web индекса), а затем удалить его.

Вот пример кода, который неопубликовал элемент из всех публикуемых целевых баз данных:

using (new SecurityDisabler())
{
    var targets = PublishManager.GetPublishingTargets(item.Database)
        .Select(i => Database.GetDatabase(i[FieldIDs.PublishingTargetDatabase]))
        .ToArray();

    var languages = LanguageManager.GetLanguages(item.Database).ToArray();

    item.Editing.BeginEdit();
    item.Publishing.NeverPublish = true;
    item.Editing.EndEdit();

    var handle = PublishManager.PublishItem(item, targets, languages, false, false);
    PublishManager.WaitFor(handle);
}

Просто выполните item.Recycle или Delete после.

Некоторое время назад я написал сообщение в блоге, описывающее, как добавить кнопку на ленту, которая будет удалять и отменять публикацию элемента одним щелчком мыши. Вы можете найти это здесь:

Автоматическая отмена публикации удаленного элемента Sitecore

person Marek Musielak    schedule 09.10.2020
comment
Отличный Марек! Как обычно, вы дали очень идеальное решение. Бизнес очень доволен этим. Я также объясняю, что они могут добиться этого путем существующего удаления, но им необходимо установить ограничение на публикацию в вашем доме. Я также обратился к объявлению sitecore, и они подтвердили, что дерево переиндексации не поддерживается в веб-базе данных. - person Sunil Aher; 14.10.2020
comment
@SunilAher Я рад, что смог помочь. Вы также можете прочитать, как создать пользовательскую кнопку на ленте, которая будет отменять публикацию и удалять элемент одним щелчком мыши: skillcore.net/sitecore/sitecore-unpublish-and-delete-item - person Marek Musielak; 14.10.2020