Sharepoint 2007中,用SPD设计的工作流并没有提供任务重新指派的功能,但是在某些场景下,我们确实很需要这样的功能,但是如何实现呢?

界面上就很简单了,无非就是在下拉菜单中添加一个操作项“重新指派”就可以了,使用Feature就可以了,不再多讲。

但是后台如何实现呢?我们最直接想到的方法就是将“分配对象”属性直接设置为其他用户:

代码如下:

//test reassign
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite spsite = new SPSite("http://localhost:1000/yoursite"))
                    using (SPWeb spweb = spsite.OpenWeb())
                    {

SPList list = spweb.Lists["工作任务"];
                        SPListItem task1 = list.GetItemById(1);
                        task1[SPBuiltInFieldId.AssignedTo] = spweb.SiteUsers["zhangsan"];
                        task1.Update();

}
                });
//end test reassign

运行的时候你会发现,执行到task1.Update(); 的时候,会扔出一个异常“此任务当前被某个正在运行的工作流锁定,无法对其进行编辑。”

如果你不用task1.Update(),而是用task1.SystemUpdate(),那么虽然能够成功更新“分配对象”,但是在完成任务时会有如下问题“数据源控件未能执行更新命令”:

所以用SystemUpdate()不行,我认为SystemUpdate是绕过了工作流的一些触发操作,从而导致任务不可用。

所以仍然检查第一个异常产生的原因,我一直认为工作流有可能对正在运行的任务进行了“Lock”处理,于是反复在Microsoft.SharePoint.Workflow寻找加锁和解锁的处理机制,结果均没有找到,经过多次尝试、反编译和查找资料,发现在类“Microsoft.SharePoint.Workflow.SPWinOEItemReceiver”中,扔出了该异常,如下:

SPResource.GetString("WorkflowTaskLocked", new object[0]);

而扔出该异常的条件是:

((int) itemById[SPBuiltInFieldId.WorkflowVersion]) != 1

很奇怪的现象!

于是修改了代码,做了如下处理:

//test reassign
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite spsite = new SPSite("http://localhost:1000/yoursite"))
                    using (SPWeb spweb = spsite.OpenWeb())
                    {

SPList list = spweb.Lists["工作任务"];
                        SPListItem task1 = list.GetItemById(1);

task1[SPBuiltInFieldId.WorkflowVersion] = 1;
                        task1[SPBuiltInFieldId.AssignedTo] = spweb.SiteUsers["zhangsan"];
                        task1.Update();

}
                });
//end test reassign

结果成功!

原来是类SPWinOEItemReceiver的ItemUpdating(SPItemEventProperties properties)监听了Task的更新事件,如果task1[SPBuiltInFieldId.WorkflowVersion]不等于1,那么则扔出“此任务当前被某个正在运行的工作流锁定,无法对其进行编辑。”,这是一个容易让人迷惑的信息。

目前还不是很明白Sharepoint这样设置

跟我遇到类似的问题:http://geekswithblogs.net/MTex/archive/2008/03/01/120117.aspx

http://geek.hubkey.com/2007/09/locked-workflow.html

用上述的方法,可以实现工作流任务的的重新指派。

更进一步的完善,可以考虑和OutLook日历相结合,实现自动委派。

转载于:https://www.cnblogs.com/HeavyMetal/articles/1559681.html

How to Reassign Workflow Task in Sharepoint 2007相关推荐

  1. 一步一步SharePoint 2007系列文章目录

    一步一步SharePoint 2007之一:安装SharePoint http://tech.ddvip.com/2008-10/122535494387212.html 一步一步SharePoint ...

  2. 一些SharePoint 2007开发的在线课程

    在Microsoft Learning站点,放上去了两个SharePoint 2007开发相关的在线课程,加上之前的两个介绍性质的,一起列在下面. Getting Started with Micro ...

  3. SharePoint 2007部署过程

    SharePoint 2007部署过程 这是岳老师给我们布置得一道考试题,现在本菜鸟就把它与大家一起分享一下吧!嘿嘿--..首先,我们了解一下Sharepoint简介! Sharepoint 产品简介 ...

  4. SharePoint 2007 安装与配置

    环境 win 2003 sp2 .net 3.0 framework SQL Server 2005 SharePoint 2007 server 安装 安装windows组件 网络服务/域名系统(D ...

  5. QuickPart : 用户控件包装器 for SharePoint 2007

    用户控件包装器升级了!现在它已经支持Microsoft Office SharePoint Server 2007 Beta2,可以让我们直接将ASP.NET 2.0的用户控件直接用在SharePoi ...

  6. SharePoint 2007 SDK v1.5

    SharePoint 2007 SDK 中文版 (*)中文版的目前是1.4的, 英文版的SDK有1.5版 WSS 3.0 SDK http://www.microsoft.com/downloads/ ...

  7. sharepoint 2007 网站操作 显示菜单不全

    sharepoint 2007 制作的网站: 现象: 1.编辑工具栏附近出现"未将对象引用设置到对象的实例" 2.网站操作 下拉菜单 显示不全,只有创建网页, 网站设置  导致以上 ...

  8. 使用SharePoint 2007 Web Service上传文件到文档库

    SharePoint 2010中有了全新的客户端模型,给我们在客户端操作SharePoint对象提供了很大的方便,但是在SharePoint 2007中我们可以使用的方式就比较有限,Web Servi ...

  9. SharePoint 2007 Backup Strategies

    SharePoint 2007 Backup Strategies from http://www.sharepointkicks.com/ 转载于:https://www.cnblogs.com/i ...

最新文章

  1. 260万奖金池!目标检测新赛事来了
  2. 微信公众号基本信息配置
  3. jsp的相对路径问题
  4. win7下删除提示没权限删除文件的方法
  5. struts中文问题,struts国际化问题的终极解决方案
  6. HDU 5980 2016ICPC大连 J: Find Small A
  7. 2n皇后的问题java_蓝桥杯java 基础练习 2n皇后问题
  8. 蓝桥杯2017年第八届C/C++省赛B组第二题-等差素数列
  9. 【解题报告】表达式求值(栈,表达式树)
  10. 关于计算机技术职业资格那些事
  11. sh计算机c盘如何管理,c盘瘦身三种方法详解
  12. autoCAD编辑图案填充
  13. Python图像(字母数字)识别
  14. 最近公共祖(LCA)模板_祖先深度_区域祖先_(欧拉序列+标准RMQ+四毛子)O(n)-O(1)
  15. 记一下怎样关闭windows defender安全中心
  16. LightOJ 1224 DNA Prefix
  17. xp系统 共享文件夹服务器,WinXP如何共享文件夹?共享文件夹的方法
  18. 明日之后全部服务器怎么修改,明日之后怎么转区 服务器怎么换
  19. 用 Python 自动玩王者荣耀,有点意思!
  20. 小米8手机相册中的图片怎么识别文字?

热门文章

  1. 技术项目中的人、风险与应对方法
  2. Word里面怎么才能输入平方
  3. Vue中如果关闭语法检查
  4. animated-rotate
  5. ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  6. 黑马程序员---java基础-Java之IO
  7. pointer-events用法
  8. 在windows10上安装图形化ubuntu桌面(亲测有效)
  9. SpringBoot(七) 整合Mybatis
  10. macOS SwiftUI 进度指示器组件规范之 01 进度指标是什么 Progress Indicators