Sitecore Item Bucket查询全部返回null

本文关键字:返回 null 全部 查询 Item Bucket Sitecore | 更新日期: 2023-09-27 17:50:40

我在Sitecore 6.4, . net 2.0的项目中实现了Sitecore Item Buckets。

我已经安装了所有的东西,似乎都工作正常。我创建了一个项目桶和一个桶模板。搜索UI在内容编辑器查询中工作完美。我还可以在Sitecore索引查看器以及Sitecore岩石索引实用程序中查询我的项目索引。

然而,当我尝试在代码中实现UI时,无论我尝试什么方法,我都无法获得任何结果。对于我尝试运行的每种类型的查询,我总是返回null。我尝试过BucketManager,搜索扩展方法和BucketQuery都无济于事。

我还打开了调试日志记录,当我通过搜索选项卡在内容编辑器中搜索时,我看到查询的日志记录,但是当我的代码执行时,没有生成任何日志条目。有人知道为什么会这样吗?我很乐意提供更多的信息来追踪此事。

Item root = MasterDatabase.GetItem(Constants.ARI_BUCKET_LOCATION_ID); 
var items = root.Search(out hitCount, 
text: "*", 
indexName: "itembuckets_buckets", 
location: root.ID.ToString(), 
language: "en", 
startDate: "01/01/2013", 
endDate: "12/31/2013", 
numberOfItemsToReturn: 100, 
pageNumber: 1, 
templates: tmpInventoryRate.ID.ToString()); 
var itemresults = root.Search(out hitCount, numberOfItemsToReturn: 100, language: "en"); 
var results = BucketManager.Search(root, out hitCount, templates: tmpInventoryRate.ID.ToString()); 
var textresults = BucketManager.Search(MasterDatabase.GetItem(Constants.ARI_BUCKET_LOCATION_PATH), out hitCount, text: "OEH", location: root.ID.ToString()); 
var pathresults = BucketManager.Search(MasterDatabase.GetItem(Constants.ARI_BUCKET_LOCATION_PATH), out hitCount, templates: tmpInventoryRate.ID.ToString()); 
var queryresults = new BucketQuery().WhereTemplateIs("*").Run(root, 100); 
我很好奇的一点是,上面的代码是在一个不能访问Sitecore的DAL模块中执行的。上下文但是MasterDatabase.GetItem()调用实际上确实从主数据库检索项目,但我不知道是否在桶API代码上下文的某个地方被潜在地引用?

Sitecore Item Bucket查询全部返回null

好的,所以在发布之后,我沿着我上一个关于Context的评论的路径,并使用Reflector来挖掘Sitecore.ItemBucket.Kernel.Util。Sitecore.ItemBucket.Kernel.Managers. IndexSearcher我看到它们都引用了Context项。我的部分问题是我从服务器端处理脚本上的项目桶开始,该脚本不是Sitecore内容树的一部分,因此不经过处理管道,所以这就是为什么我在执行期间没有上下文可用。

在这里的答案中,我找到了从web编程设置当前上下文的方法。config <site> setting:设置主用站点为上下文

然后使用下面的Using块将所需的站点设置为当前上下文,如下所示:

            int hitCount;
            Item root = MasterDatabase.GetItem(Constants.ARI_BUCKET_LOCATION_ID);
            using (new SecurityDisabler())
            {
                Sitecore.Context.SetActiveSite("website"); //Set Current Context
                var items = root.Search(out hitCount,
                                    text: "*",
                                    indexName: "itembuckets_buckets",
                                    location: root.ID.ToString(),
                                    language: "en",
                                    startDate: "01/01/2013",
                                    endDate: "12/31/2013",
                                    numberOfItemsToReturn: 100,
                                    pageNumber: 1,
                                    templates: "{3B0476F4-C3C4-43DD-8490-2B3FF67C368B}");
            }

在做了这个改变后,我收到了我的桶项目如预期的!!

旁注:也只是作为一个注意事项,对于那些可能沿着相同的路径跟随代码示例的人来说,这与这个问题无关,但我在跟随代码示例时遇到了一些问题。确保你有你的<site name='website' ... content='master' >设置正确设置在你的网页。配置使用开发人员指南中使用的Sitecore.Context.ContentDatabase.GetItem()方法,我还在Searcher类中看到了引用上下文的一些参考。ContentDatabase

希望这能为别人节省比我多一点的时间!