最近在做状态机工作流,刚好碰到关于任务的权限的问题。
看过听风且呤的文章 我的任务不给你看
发现在createTask1_MethodInvoking 里写代码 specialPermissions.Add(assignee.LoginName, SPRoleType.Contributor);
确实不行。经过一天时间的研究,找到了方法。其实是可以的,可能在循环工作流里也行。方法如下:
1. 关键代码:
在工作流代码里加入属性TaskPermissions。我的任务用户是动态的,所以用taskProperties.AssignedTo,这个taskProperties.AssignedTo可以在createTask1_MethodInvoking里进行设置。当然如果你希望是静态的,用域登录名替换即可,如taskPermissions["domain\user1"] = SPRoleType.Contributor;
public HybridDictionary TaskPermissions
{
get
{
HybridDictionary taskPermissions = new HybridDictionary();
taskPermissions[taskProperties.AssignedTo] = SPRoleType.Contributor;
return taskPermissions;
}
}
2.关键操作:
其实上面的代码大家都看得明白,和听风且呤的写法基本是一样的,关键是以下操作。
a.在流程设计界面选择createtask 活动图标,在属性框选择SpecialPermissions为焦点(不要选择右边的"..."按钮,其实那里也没什么可以选的)。
b.点createtask 活动图标右键,选择"绑定属性'SpecialPermissions'" (出现这个选项和步骤a有关)。
c.选择在关键代码中写好的属性"TaskPermissions"。
(不用在createTask1_MethodInvoking方法中写有关SpecialPermissions的任何代码。)
完成了。
经过测试 SpecialPermissions属性的设置是在createTask1_MethodInvoking之后,所以在createTask1_MethodInvoking中可对属性TaskPermissions中用到的变量等进行初始设置,例如动态用户。