我正在尝试获取项目的子项目,其中一些子项目已应用发布限制,并且结束日期已过期。 我想收集所有子项目,无论它是否已过期。 当我调试我的代码时,我只得到那些有结束日期的项目。 我使用了以下代码
var childItems=item.GetChildren();
子项集合仅收集那些有结束日期的子项目。
有没有收集所有项目的方法?
我在sitecore论坛上问过,他们要求从master数据库中获取子项,但这种方法也无效。我也尝试过以下代码。
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Item parentNode= master.GetItem("ItemNAme");
var childItems=parentNode.GetChildren();
子项目仅收集结束日期未过期的子项目 请为我建议一些解决方案
提前致谢
-Vaibhav
答案 0 :(得分:2)
关于转到master数据库的说法是正确的,因为master包含所有内容的所有版本,而不仅仅是公开发布的内容。我会将您的代码包装在SecurityDisabler()
中,以防以某种方式干扰获取正确的项目。
using(new SecurityDisabler()) {
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Item parentNode= master.GetItem("ItemNAme");
var childItems=parentNode.GetChildren();
}
答案 1 :(得分:0)
您发现此问题的原因与安全性无关。
当IsPreview为true(基于cookie)并且允许对网站配置进行过滤时,您将无法获得具有发布限制的项目。此功能来自PageEditor Preview的实现,您需要在其中浏览主数据库,就像发布的项目不可见一样。
查看Sitecore Publishable flag makes it impossible to GetItem() from Master database
上的答案