以编程方式取消发布站点核心项目

本文关键字:站点 核心 项目 布站点 编程 方式 取消 | 更新日期: 2023-09-27 17:55:39

我知道可以使用Sitecore.Publishing.PublishManager从代码级别发布项目。我没有看到取消发布项目的选项。

以某种方式可能吗?

以编程方式取消发布站点核心项目

您需要

__Never publish字段的值设置为1(这是 Sitecore 存储布尔值的方式true发布项目。

是的,它正在发布,但由于 __Never publish 的值设置为 true,Sitecore 将从web数据库中删除该项目。

您还可以使用属性设置此字段的值item.Publishing.NeverPublish

像这样的东西应该可以解决问题:

item.Editing.BeginEdit();
item.Publishing.NeverPublish = true;
item.Editing.EndEdit();
PublishManager.PublishItem(item, targets, item.Languages, false, false);

不在工作流中

标记为NeverPublish的项目将在发布期间取消发布。由于NeverPublish是共享字段,因此所有版本都将取消发布。

bool originalNeverPublish = item.Publishing.NeverPublish;
item.Editing.BeginEdit();
item.Publishing.NeverPublish = true;
item.Editing.EndEdit();
PublishManager.PublishItem(item, targets, item.Languages, false, false);
item.Editing.BeginEdit();
item.Publishing.NeverPublish = originalNeverPublish;
item.Editing.EndEdit();

在工作流中

如果项目位于工作流中,则发布将发布处于 Final/IsApproved 状态的项目的所有版本,忽略 NeverPublish 的值。相反,我们应该更改要取消发布的版本的工作流状态。

在下面的示例中,我假设初始状态未标记为 Final/IsApproved

var workflowProvider = item.Database.WorkflowProvider;
var workflow = workflowProvider.GetWorkflow(item);
foreach (var version in item.Versions.GetVersions())
{
    if (workflow.IsApproved(version))
    {
        workflow.Start(version);
    }
}
PublishManager.PublishItem(item, targets, item.Languages, false, false);

发布项目只是将其移动到Web数据库中。

只需从该数据库中删除您的项目即可取消发布它。