【问题标题】:Sitecore Publish creates corrupt itemSitecore Publish 创建损坏的项目
【发布时间】:2012-04-17 19:06:45
【问题描述】:

我有这段代码,我用它来发布到网络数据库。我遇到了一个问题,当我使用下面的代码发布时,我的 Web 数据库中有一个损坏的项目,当我单击它时,会出现错误“值不能为空”。参数名称“项目”。当我查看该项目时,它的图标是标准模板与具有自定义图标的自定义模板的图标。但是当我点击它时,我看到了所有字段以及上面提到的错误。

在 Web 数据库中存在与已发布项目同名的项目会是一个问题吗?

using (new SecurityDisabler())
{
    Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
    Sitecore.Data.Database target = Sitecore.Configuration.Factory.GetDatabase("web");
    Sitecore.Data.Items.Item home = master.GetItem(new ID(id));
    Sitecore.Data.Database[] targetDatabases = { target };
    Sitecore.Globalization.Language[] languages = master.Languages;
    bool deep = false;
    bool compareRevisions = true;
    Sitecore.Publishing.PublishManager.PublishItem(home, targetDatabases, languages, deep, compareRevisions);
}

【问题讨论】:

  • 您能否确认该项目所基于的模板存在于“网络”数据库中?
  • 是的,模板存在。此问题不会出现在每个项目的每次发布中。它只发生在某些项目上。
  • 如果您从 Sitecore(而不是代码)手动发布,是否也会出现这种情况?
  • 不,手动发布工作正常,没有任何问题。
  • 当我进入网络数据库并从演示选项卡中点击“重置”时,项目变得一切正常

标签: sitecore publish


【解决方案1】:

如果与您发布的上下文相关

异步发布

您可以尝试异步运行发布作业。 然后通过 Sitecore 作业完成发布。

using Sitecore.Publishing;
PublishOptions publishOptions = new PublishOptions(item.Database, Database.GetDatabase("web"), PublishMode.SingleItem, item.Language, DateTime.Now) { Deep = deep, RootItem = item };

Publisher p = new Publisher(publishOptions);
p.PublishAsync();

如果这没有任何区别,则可能与项目值表中留下的无效字段值有关。

数据库清理

您可以先尝试数据库清理并删除旧字段,如果仍然导致问题,您应该查看数据库级别的值字段,并比较“错误”发布和正确发布上的字段值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多