Sitecore Item Bucket查询全部返回null

时间:2013-01-05 01:37:49

标签: c# sitecore sitecore6

我正在将Sitecore项目桶实施到我的Sitecore 6.4,.NET 2.0项目中。

我安装了所有内容,但似乎一切正常。我创建了一个项目桶和一个可用于存储的模板。搜索UI在内容编辑器查询中完美运行。我还可以在Sitecore索引查看器以及Sitecore Rocks Index实用程序中查询我的项目的索引。

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

我也启用了Debug日志记录,当我通过“搜索”选项卡在内容编辑器中搜索时,我看到了查询的日志记录,但是当我的代码执行时,不会生成任何日志条目。有没有人知道为什么会这样。非常乐意提供更多信息来尝试和追踪这一点。

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); 

有一点需要注意的是,我很好奇上面的代码是在DAL模块中执行的,该模块无法访问 Sitecore.Context ,但是 MasterDatabase.GetItem() call确实从master数据库中检索了Item,但我不知道Bucket API代码 Context 中的某个地方是否可能被引用?

1 个答案:

答案 0 :(得分:4)

好的,所以在发布之后我沿着我关于上下文的最后评论的路径,并使用Reflector挖掘 Sitecore.ItemBucket.Kernel.Util.IndexSearcher Sitecore.ItemBucket.Kernel.Managers.BucketManager 类我看到两者确实引用了 Context 项。 我的部分问题是我开始使用服务器端处理脚本中的项目桶而不是Sitecore内容树的一部分,因此不会通过处理管道,所以这就是为什么我没有 Context < / strong>执行期间可用。

在这里的答案中,我找到了从web.config <site>设置以编程方式设置当前上下文的方法:Set Active Site as Context

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

            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}");
            }

进行此更改后,我按预期收到了我的铲斗物品!!

SIDE注意:此外,对于任何可能沿着与此问题无关的代码示例走同一条道路的人,但我在跟踪代码示例时遇到的情况也是如此。确保在web.config中正确设置了<site name='website' ... content='master' >设置,以使用开发人员指南中使用的Sitecore.Context.ContentDatabase.GetItem()方法,并且我还在搜索器类中看到了一些参考引用了 Context.ContentDatabase

希望这能比其他人节省更多时间!