C# 自动取消发布sitecore中的存档项目

C# 自动取消发布sitecore中的存档项目,c#,sitecore,archive,C#,Sitecore,Archive,我面临着一项任务,当项目自动存档时,我应该在sitecore中取消发布项目 我找不到sitecore文档中描述的在项目自动存档(即达到存档日期)时触发的任何事件 我可以使用管道和事件,sitecore版本是7.2 很抱歉,我没有举例说明我是如何试图解决这个问题的,但我在这里真的迷茫了 更新19-02-2019。 事实证明,Sitecore会在项目存档后删除该项目,因此我最终使用OnItemDeleted事件来执行自定义处理。您可以使用自定义处理器执行此操作: namespace Website.

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

我找不到sitecore文档中描述的在项目自动存档(即达到存档日期)时触发的任何事件

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

很抱歉,我没有举例说明我是如何试图解决这个问题的,但我在这里真的迷茫了

更新19-02-2019。
事实证明,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);
        }
    }
  }
}
这会将您的存档项目设置为不可发布,并将从“web”数据库中删除

或者,您可以使用item.Delete()方法直接从web数据库中删除该项,但就个人而言,这不是最佳的,因为您需要更新索引

然后,创建一个配置文件来定义处理器,并在项目存档之前插入它,这是执行方法

<?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>


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

也许这可以帮助我考虑一个工作流,但我不确定如果它是自动执行的,当项目被自动归档时,YPU知道吗?是SITECOROOTB SITECORE自动归档吗?或者它是您创建的?是的,它是OOTB-它是自动存档,当达到“存档日期”时,sitecore将自动将其从主数据库树中“删除”到存档文件夹/应用程序中。现在我正在考虑一项任务,每5分钟运行一次,查找新归档的项目并取消发布……谢谢,我将在周一回来工作时尝试。我的印象是,uiArchiveItems仅在实际上从UIS完成存档时触发。您的解决方案在从UI激活存档时起作用,但在项目自动存档时不起作用:(相反,结果是项目在存档后被删除,因此我可以改为使用OnItemDeleted事件。