我想从C#访问用户的工作箱,以便我可以遍历其工作箱中的所有项目,并更新每个项目版本的工作流程状态。
我正在使用Sitecore 6.2.0(rev.101105)
感谢您的关注!
答案 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源?