今天发现了SharePoint2010的一个bug,是在SharePoint 2010 April CU 2014中引入的,当用户使用“New Document”方式创建一个文档的时候,触发状态机工作流运行出错。
具体的复现方法是:
1. 使用VS,创建一个最简单的状态机(state machine)工作流,这个工作流在启动的时候,会通过workflowProperties.Item读取当前item的信息,并在Task列表中创建一条item。代码片段如下图(红框的部分会抛错),完整代码请点这里下载(也可以到Code上查看: git@code.csdn.net:shrenk/statemachineworkflowtest.git)。
2. 将工作流部署到一个文档库(部署之前请修改target library,即工程中用来调试的文档库),将工作流的启动选项设置为在创建文档的时候启动。
3. 在文档库中添加一个required column,同时在文档库的版本设置里,勾选“Require documents to be checked out before they can be edited”。
4.使用“New Document”选项新建一个文档,在Word中编辑,然后保存。
5. 文档创建成功,但是工作流状态显示“Error Ocurred”,发生错误,具体的log信息如下,是一个空引用异常引起的:
通过调试发现,代码中“workflowProperties.Item”的item属性为null。也就是说workflowProperties中的item没有绑定。
6. 当我使用“Upload Document” 来上传一个文档的时候,工作流工作正常。
目前还不知道具体的原因是什么,应该是April CU 2014对工作流做了某些修改导致的,有兴趣的同学可以看一下。
建议SharePoint 2010的环境,如果运行着状态机工作流,谨慎升级到April CU 2014。