【问题标题】:Automatically unpublish archived items in sitecore在 sitecore 中自动取消发布归档项目
【发布时间】:2023-03-24 12:45:01
【问题描述】:

我面临一项任务,当项目自动存档时,我应该在 sitecore 中取消发布它们。

我无法找到 sitecore 文档中描述的任何在自动存档项目时触发的事件,即到达存档日期时。

我可以同时使用管道和事件,并且 sitecore 版本是 7.2。

很抱歉,我没有举例说明我是如何尝试解决它的,但我真的迷失了。

2019 年 2 月 19 日更新。 事实证明,Sitecore 在归档项目后会删除它,所以我最终使用 OnItemDeleted 事件来进行自定义处理。

【问题讨论】:

  • 我确实考虑过一个工作流,但我不确定它是否在项目自动归档时执行,你知道吗?
  • Sitecore OOTB Sitecore 是否自动归档?还是你创造的东西?
  • 是的,它是 OOTB - 它是自动存档,当达到“存档日期”时,sitecore 会自动将其从主数据库树中“删除”到存档文件夹/应用程序中。现在我正在考虑一项将运行每个例如的任务。 5 分钟,找到新归档的项目并取消发布它们......

标签: c# sitecore archive


【解决方案1】:

您可以使用自定义处理器来做到这一点:

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>

试试这个,让我知道它是否有效。

【讨论】:

  • 谢谢,我下班后周一试试。我只是觉得 uiArchiveItems 仅在存档实际上是从 ui 完成时才被触发
  • 您的解决方案在从 UI 激活存档时有效,当项目自动存档时它不起作用:(相反,事实证明该项目在存档后被删除,所以我可以使用 OnItemDeleted 事件而是。
猜你喜欢
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多