从 solr 索引中删除 sitecore 项目而不发布父项目
Delete sitecore item from solr index without publishing parent item
我遇到了业务需求,我想从 master 和 web 中删除项目,并从 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 日志文件中没有收到任何错误,但索引没有删除项目
您可以将您的项目标记为不可发布,发布它(这将从 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
。
前段时间我写了一篇博客 post 描述了如何添加一个功能区按钮,只需单击一下即可“删除并取消发布”项目。你可以在这里找到它:
我遇到了业务需求,我想从 master 和 web 中删除项目,并从 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 日志文件中没有收到任何错误,但索引没有删除项目
您可以将您的项目标记为不可发布,发布它(这将从 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
。
前段时间我写了一篇博客 post 描述了如何添加一个功能区按钮,只需单击一下即可“删除并取消发布”项目。你可以在这里找到它: