c# - 在 sitecore 中自动取消发布归档项目
问题描述
我面临一项任务,当它们自动存档时,我应该在 sitecore 中取消发布项目。
我无法找到在自动归档项目时触发的站点核心文档中描述的任何事件,即到达归档日期时。
我可以同时使用管道和事件,并且 sitecore 版本是 7.2。
很抱歉没有举例说明我是如何尝试解决它的,但我真的迷失在黑暗中了。
2019 年 2 月 19 日更新。 事实证明,Sitecore 在归档项目后会删除它,因此我最终使用 OnItemDeleted 事件来进行自定义处理。
解决方案
您可以使用自定义处理器执行此操作:
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() 方法直接从 Web 数据库中删除该项目,但就个人而言,这不是最佳选择,因为您需要更新索引。
然后,创建一个配置文件来定义您的处理器并在项目归档之前将其插入,即Execute方法。
<?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>
试试这个,让我知道它是否有效。
推荐阅读
- python - Scikit Learn 中的 CountVectorizer
- python - python中变量的顺序使用集合的.update方法
- javascript - 水平滚动 - 将类添加到当前视口中的活动 div
- git - 如何限制 git 存储库的存储?
- php - 使用 Eloquent 的 Laravel 联合查询
- machine-learning - 谷歌云架构:数据湖可以用于 OLTP 吗?
- ios - 通过下拉 TableView 关闭 ViewController
- api - Postman 授权 API-Key
- testing - kotlin 多平台覆盖?
- grouping - 如何确定给定的字符串是否是组的一部分?