Dha*_*777 7 sitecore sitecore6 sitecore-workflow
在Sitecore工作箱中(Sitecore.Shell.Applications.Workbox),在该DisplayStates(IWorkflow workflow, XmlControl placeholder)方法中,Sitecore使用以下方法检索特定工作流状态中的项目.
DataUri[] items = this.GetItems(state, workflow);
Run Code Online (Sandbox Code Playgroud)
在我们的主数据库中,有650,000个项目需要查询.加载工作箱需要1分半钟.我看看使用dotpeek在"this.GetItems(state,workflow)"方法中发生了什么.
在内部,它构造以下查询,在主数据库中运行1½分钟(从650,000多项中选择36项),
SELECT *
FROM VersionedFields INNER JOIN Items ON VersionedFields.ItemId = Items.Id
WHERE ItemId IN (SELECT ItemId FROM SharedFields WHERE FieldId=Workflowengine field AND Value= workflowengine)
AND FieldId=workflow state AND Value= workflowstate value
ORDER BY Name, Language, Version
Run Code Online (Sandbox Code Playgroud)
有没有办法提高Workbox的性能?
Mar*_*lak 11
您可以Lucene用于检索特定工作流状态的项目.首先,您需要确保通过将以下设置添加到以下内容来索引标准字段Sitecore.config:
<setting name="Indexing.IndexStandardTemplateFields" value="true"/>
Run Code Online (Sandbox Code Playgroud)
那么你需要重建system索引.最后你可以更新GetItems方法:
private static DataUri[] GetItems(WorkflowState state, IWorkflow workflow)
{
using (IndexSearchContext indexSearchContext = SearchManager.GetIndex("system").CreateSearchContext())
{
return indexSearchContext
.Search(new TermQuery(new Term("__workflow state", state.StateID.ToLower())), int.MaxValue)
.FetchResults(0, int.MaxValue)
.Select(result => result.GetObject<Item>())
.Where(item => item != null
&& item.Access.CanRead()
&& (item.Access.CanReadLanguage() && item.Access.CanWriteLanguage())
&& (Context.IsAdministrator || item.Locking.CanLock() || item.Locking.HasLock()))
.Select(item => new DataUri(item.ID, item.Language, item.Version))
.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |