我正在将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 中的某个地方是否可能被引用?
答案 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 。
希望这能比其他人节省更多时间!