在sitecore中自动取消发布已归档项目

问题描述 投票:0回答:1

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

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

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

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

更新19-02-2019。事实证明,Sitecore在归档后删除了该项目,因此我最终使用OnItemDeleted事件来进行自定义处理。

c# sitecore archive
1个回答
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);
        }
    }
  }
}

这会将您的已归档项目设置为不可发布,并将从“Web”数据库中删除。

或者,您可以使用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>

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

© www.soinside.com 2019 - 2024. All rights reserved.