以编程方式访问Sitecore用户的工作箱

时间:2011-06-28 15:55:58

标签: workflow sitecore

我想从C#访问用户的工作箱,以便我可以遍历其工作箱中的所有项目,并更新每个项目版本的工作流程状态。

我正在使用Sitecore 6.2.0(rev.101105)

感谢您的关注!

2 个答案:

答案 0 :(得分:4)

编辑:以下代码需要在主上下文下运行 - “来自sitecore admin内部”。如果从Web上下文(站点上的页面)运行它并且Context.Database是“web”,则需要使用Factory.GetDatabase(“master”)替换Sitecore.Context.Database的所有实例


首先,您需要获得所有工作流程

Sitecore.Context.Database.WorkflowProvider.GetWorkflows();

然后,您需要获得所有状态的foreach工作流程:

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();

希望有所帮助!

答案 1 :(得分:2)

不确定代码运行的位置或频率,但是您是否可以使用用户工作箱中的RSS源?