我目前正在使用处于草稿工作流状态的sitecore项目。发生以下情况:
这会导致我们的控件渲染项目但是使用标准值,因为没有版本。当然,我们可以添加item.Versions.Count>的检查。 0但我的问题是为什么会发生这种情况?
草稿工作流状态中的项目肯定不会以任何方式出现在Web数据库中吗?
使用的工作流程非常标准,没有自定义。状态和命令是:
提前致谢。
答案 0 :(得分:1)
我个人认为您应该检查版本计数。如果您计划支持多语言网站,则完全可以使用一种语言版本,而不是另一种语言版本(例如,未以西班牙语批准)。您希望控件能够处理该场景(或执行回退)。
当前语言的当前用户可能没有有效的版本回来是完全有效的。我希望Web控件的业务逻辑能够处理这些场景。
答案 1 :(得分:1)
要明确回答您的问题,会发生这种情况,因为该项不是null但没有版本。版本是项目的维度,它恰好是"空的"如果你没有版本。因此,您的代码获取了一个有效的非null项,但没有字段值,因为没有版本,因此您的控件不会填充数据。
这只会发生在新物品上。示例:创建一个项目,你有v1,它在草稿中。你"发布"这个项目。该项目转到Web数据库,但它的v1维度没有,因此您将留下一个没有版本的非null项目。
正如杰伊所说,解决方案是在查询项目时检查这一点。
答案 2 :(得分:1)
我相信您可以在配置中的每个站点节点上使用以下属性。
<site name="website" filterItems="true" ... />
如果将此设置为true无法解决问题,那么除了上述设置之外,您还可以在Sitecore.Pipelines.FilterItem.EnsureFilteredItem
步骤之前添加以下管道步骤。
public class HideEmptyItem
{
public void Process(FilterItemPipelineArgs args)
{
if ((Context.Site != null && Context.Site.DisplayMode == DisplayMode.Normal) && args.Item.Paths.Path.StartsWith("/sitecore/content/"))
{
try
{
Context.Site.DisableFiltering = true;
if (args.Item.Database.GetItem(args.Item.ID, Context.Language).Versions.Count == 0)
{
args.FilteredItem = null;
}
}
finally
{
Context.Site.DisableFiltering = false;
}
}
}
}
同时确保相应地设置以下内容,默认值为false
;
<setting name="Publishing.PublishEmptyItems" value="false" />
我实际上遇到了这个问题但是以不同的方式。如果您使用发布限制,您最终可能会得到一个没有版本但仍可以发布的项目。项目最终没有任何版本的方式有很多种,而不仅仅是一个没有通过工作流推送的单个版本的新项目。上述修复实际上是由Sitecore支持提供的,并为我工作。
如果这对您不起作用,那么我会建议在发布项目时添加检查以查看它们是否有任何版本,但我相信这是上面的解决方案应该做的。
编辑:将属性从“hideEmptyItems”更改为“filterItems”并添加了进一步说明。
答案 3 :(得分:0)
首先,默认工作流程应设置为项目模板&#34; __标准值&#34;。
第二,工作流程与&#34; admin&#34;帐户不起作用。尝试其他帐户。