Программный доступ к рабочему окну пользователя Sitecore - PullRequest
0 голосов
/ 28 июня 2011

Я хотел бы получить доступ к рабочему ящику пользователя из C #, чтобы я мог просмотреть все элементы в его рабочем ящике и обновить состояние рабочего процесса для каждой версии элементов.

Я использую Sitecore 6.2.0 (рев. 101105)

Спасибо за внимание!

Ответы [ 2 ]

4 голосов
/ 28 июня 2011

РЕДАКТИРОВАТЬ: Следующий код должен быть запущен в главном контексте - «Изнутри администратора сайта».Если вы запускаете его из веб-контекста (страницы на сайте), а 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();

Надеюсь, это поможет!

2 голосов
/ 28 июня 2011

Не уверен, в каком контексте выполняется ваш код, или как часто, но не могли бы вы использовать RSS-канал из рабочего окна пользователя?

...