РЕДАКТИРОВАТЬ: Следующий код должен быть запущен в главном контексте - «Изнутри администратора сайта».Если вы запускаете его из веб-контекста (страницы на сайте), а Context.Database является "web", то вам необходимо заменить все экземпляры Sitecore.Context.Database на Factory.GetDatabase ("master")
Сначала вам нужно получить все рабочие процессы
Sitecore.Context.Database.WorkflowProvider.GetWorkflows();
Затем для каждого рабочего процесса вам нужно получить все состояния:
workflow.GetStates();
Затем для каждого состояния вы можете получить всеэлементы
var itemDataUris = workflow.GetItems(state);
GetItems возвращает список dataUris Так что, если вы вошли в систему с данным пользователем, вы можете просто сделать
foreach (var dataUri in itemDataUris)
{
var item = Context.Database.GetItem(dataUri);
//check if the item is null (if null the user doesn't have access to it
if (item != null)
usersWorkflowItems.Add(item); //Here you also need to somehow add which state the item is in
}
Если вы работаете как администратор и хотитечтобы получить предмет для другого пользователя, вам нужно обернуть указанный выше код в UserSwitcher
Sitecore.Security.Accounts.UserSwitcher.Enter(Sitecore.Security.Accounts.User.FromName("sitecore\User", true));
foreach (var dataUri in itemDataUris)
{
var item = Context.Database.GetItem(dataUri);
//check if the item is null (if null the user doesn't have access to it
if (item != null)
usersWorkflowItems.Add(item); //Here you also need to somehow add which state the item is in
}
Sitecore.Security.Accounts.UserSwitcher.Exit();
Надеюсь, это поможет!