You can use Lucene
for retrieving items in particular workflow state. First you need to ensure you're indexing standard fields by adding the following setting to the Sitecore.config
:
<setting name="Indexing.IndexStandardTemplateFields" value="true"/>
then you need to rebuild the system
index. Finally you can update the GetItems
method:
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();
}
}