解决Sitecore workbox性能问题

解决Sitecore workbox性能问题,sitecore,sitecore6,sitecore-workflow,Sitecore,Sitecore6,Sitecore Workflow,在Sitecore工作框Sitecore.Shell.Applications.workbox中,在DisplayStatesIWorkflow工作流的XmlControl占位符方法中,Sitecore使用以下方法检索特定工作流状态中的项 DataUri[]items=this.GetItemsstate,工作流; 在我们的主数据库中,大约有650000个项目需要查询。 加载工作箱大约需要1½分钟。我使用dotpeek查看了“this.GetItemsstate,workflow”方法中发生的情

在Sitecore工作框Sitecore.Shell.Applications.workbox中,在DisplayStatesIWorkflow工作流的XmlControl占位符方法中,Sitecore使用以下方法检索特定工作流状态中的项

DataUri[]items=this.GetItemsstate,工作流; 在我们的主数据库中,大约有650000个项目需要查询。 加载工作箱大约需要1½分钟。我使用dotpeek查看了“this.GetItemsstate,workflow”方法中发生的情况

在内部,它构造了以下查询,在主数据库中运行需要1½分钟,从650000多个项目中选择36个项目

挑选* 从VersionedFields到VersionedFields.ItemId=Items.Id上的内部联接项 其中ItemId位于从SharedFields中选择ItemId,其中FieldId=Workflowengine字段,Value=Workflowengine FieldId=工作流状态,Value=工作流状态值 按名称、语言、版本排序 有没有办法提高Workbox的性能?

您可以使用Lucene检索特定工作流状态下的项目。首先,您需要通过将以下设置添加到Sitecore.config中来确保为标准字段编制索引:

然后需要重建系统索引。最后,您可以更新GetItems方法:

私有静态数据URI[]GetItemsWorkflowState,IWorkflow工作流 { 使用IndexSearchContext IndexSearchContext=SearchManager.GetIndexsystem.CreateSearchContext { 返回索引SearchContext .Searchnew Term QueryNew Term_uu工作流状态,state.StateID.ToLower,int.MaxValue .FetchResults0,int.MaxValue .Selectresult=>result.GetObject .Whereitem=>item!=null &&item.Access.CanRead &&item.Access.CanReadLanguage&&item.Access.CanWriteLanguage &&Context.IsAdministrator || item.Locking.CanLock | | item.Locking.HasLock .Selectitem=>new DataUriitem.ID、item.Language、item.Version .托雷; } }
如果字段ItemID上的SQL表不存在索引,则可以将其添加到该表中。这可能会加快速度。+1个经过充分研究的问题。你如何改变这种方法,因为它在Sitecore代码本身中?您必须原谅我-我是一个相当多的Sitecore新手。您需要更改Sitecore/shell/Applications/Workbox/Workbox.xml并将此文件中的CodeNext更新为您自己的类,该类将从Sitecore.shell.Applications.Workbox.WorkboxForm类继承。然后你可以覆盖你在课堂上需要的任何东西。我遇到了同样的问题,一些客户抱怨工作盒太慢而无法显示。我尝试了@MarekMusielak的解决方案,但是有什么措施可以检查差异吗?在添加了上述代码之后,一些客户甚至说它比以前慢了。该站点当前正在使用Sitecore 6.6。我想问一下如何重建系统索引?我只能从控制面板找到重建搜索索引的方法。我应该重建这个吗?我发现在/Data/index/_系统lucene-cb7bb949d8cbd6d1648c5f8d0b06d7bf-write.lock中有一个锁文件