1

我遇到了业务需求,我想从 master 和 web 中删除项目,并从 solr 索引中删除相应的项目。企业不想发布父项,因为我的兄弟或父项可能会发生变化,因此我无法触发任何策略,例如onPublishEndAsynconPublishEndAsyncSingleInstance 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 日志文件中没有收到任何错误,但索引没有删除项目

4

1 回答 1

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.RecycleDelete之后。

前段时间我写了一篇博客文章,描述了如何添加一个功能区按钮,该按钮将单击“删除和取消发布”项目。你可以在这里找到它:

自动取消发布已删除的 Sitecore 项目

于 2020-10-09T09:14:55.710 回答