科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道《MOSS工作流Tips》之一 “我的任务不给你看”

《MOSS工作流Tips》之一 “我的任务不给你看”

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

我们虽然将任务分配给了某人,但事实上,所有在任务列表中有编辑权限的用户都可以编辑该任务.这个属性表示该任务的"特别权限",如果指定了"特别权限",那么创建的任务就不再继承任务列表的权限了.

来源:cnblogs 2007年11月3日

关键字: 应用 技术 工作流 MOSS Office

  • 评论
  • 分享微博
  • 分享邮件

  一直以来都被MOSS的工作流权限问题所困扰.

  我们虽然将任务分配给了某人,但事实上,所有在任务列表中有编辑权限的用户都可以编辑该任务.

  而我们并不希望用户能够看到不属于自己的任务.

  我曾经尝试过采用以下两种方法解决这一问题,未果.

  1.更改任务列表的视图.

  通常我们会把工作流任务分配给某人或者某组,所以我的想法是将任务列表的"我的任务"视图和"按我的用户组"视图合并为一个新的"所有我的任务"视图;

  设置"所有我的任务"视图为默认视图;

  删除其余视图;

  取消用户创建视图的权限;

  看起来不错,但是我连第一步都没能实现.

  2.定制一个EventHandler

  记得园子里的一个朋友写过一篇通过开发EventHandler来控制工作流权限的文章.

  思路是为任务列表定制一个EventHandler,使任务列表在增加项目时可以自动更改该项目的权限.

  通过定制EventHandler确实可以实现任务的权限分配,但是会引发另外的问题,譬如说,我的工作流中用OnTaskChanged活动来捕捉任务的变更.但是因为在任务创建之后EventHandler马上对其进行权限修改,所以导致工作流会发生一个小小的错误.

  不过奇怪的是,虽然在文档库中显示该工作流发生了错误,但事实上流转还是正常的.

  我一直固执的认为任务列表的权限应该是在MOSS中配置,而不应该在工作流内部做判断,后来,我终于发现我错了.

  我们使用CreateTask活动来创建任务,CreateTask活动有一个HybridDictionary类型的属性叫做SpecialPermissions.

  这个属性表示该任务的"特别权限",如果指定了"特别权限",那么创建的任务就不再继承任务列表的权限了.所以我们可以在创建任务之前为其指定这个"特别权限".

  1.新建一个全局的Contact对象用来存储分配对象

  Contact assignee = default(Contact);

  2.在onWorkflowActivated的Invoked事件中从初始化表单中获取assignee对象

  assignee = Contact.FromName(init.contact[0].DisplayName, workflowProperties.Web);

  3.在属性面板中将createTask的SpecialPermissions属性绑定到新的specialPermissions对象

  4.编写createTask的MethodInvoking方法

  private void createTask1_MethodInvoking(object sender, EventArgs e)

  {

  taskId = Guid.NewGuid();

  taskProperties.AssignedTo = assignee.LoginName; //判断分配对象是否用户

  if (assignee.IsSPUser)

  { //为其添加"参与讨论"的权限.

  specialPermissions.Add(assignee.LoginName, SPRoleType.Contributor);

  } //判断分配对象是否用户组

  if(assignee.IsCollection)

  { try {

  SPGroup group = workflowProperties.Web.Groups[assignee.DisplayName]; //为组内每一个用户添加"参与讨论"的权限.

  foreach (SPUser user in group.Users)

  {

  specialPermissions.Add(user.LoginName, SPRoleType.Contributor);

  }

  } catch { }

  }

  }

  因为默认的"参与讨论"权限就可以编辑工作流任务,所以为任务指定了"特别权限"之后,该任务将对不在SpecialPermissions中的用户不可见,这正是我们所需要的.

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章