Visual Studio 2010的SharePoint工作流功能
在Visual Studio 历代版本中,Visual Studio 2010的变化算是比较大的。就连同时发布的.NET Framework 4.0也将CLR从2.0一下子升级到了4.0。
在新建项目对话框中可以看出,Visual Studio 2010仍然支持SharePoint 2007项目,不过只有工作流项目。而在SharePoint 2010分类中,却多出了如此多的内容,这便是全新的Microsoft SharePoint Development Tools。
由于SharePoint 2010的工作流仍然基于WF 3.5,所以我们仍然可以并且只能创建Sequential和State Machine两种工作流(SharePoint 2010没有使用WF 4.0真是件让人扫兴的事情)。除了这两种经典的工作流类型之外,Visual Studio 2010还能够导入由SharePoint Designer 2010设计的Reusable Workflow。
SharePoint 2010引入了一种新的解决方案类型,叫做sandboxed solution。SharePoint网站管理员可以不经过服务器管理员之手,直接将解决方案部署到网站集范围内,而且该解决方案的操作范围也被限制在部署它的网站集中。这极大地方便了简单解决方案的部署和使用,相信将来SharePoint 2010 Online推出之后,这种解决方案一定会大放异彩。不过SharePoint工作流并不支持这种部署方式,我们只能老老实实地将它设计成为一个farm solution,如下图所示:
Visual Studio 2010也能够创建SharePoint 2010新增的工作流类型:Site Workflow,如下图所示:
Visual Studio 2010并没有像SharePoint Designer那样大量新增活动,相比上一版本,只增加了如下图所示的几个活动:
此外,由于Site Workflow根本没有和具体的列表项绑定,所以不能使用和列表项相关的OnWorkflowItemChanged和OnWorkflowItemDeleted两个活动,其余所有活动都和List Workflow相同,这一点和SharePoint Designer 2010相似。
活动的变化暂时先看到这里,下面我们来看看其他变化,下图展示了Visual Studio 2010的SharePoint工作流解决方案资源管理器:
我们看到两个崭新的文件夹:Features和Packages。Microsoft SharePoint Development Tools提供了在组织解决方案内的Feature和Package的能力,通过这一功能,我们可以以图形化的方式来组织和管理Feature和Package,十分方便。下图展示了崭新的Feature编辑器:
在下图所示的添加项对话框中,我们可以看到,除了Sequential Workflow和State Machine Workflow之外,和工作流相关的可添加项还有Workflow Association Form和Workflow Initiation Form。
这两种页面的格式都是ASPX,但很可惜的是并没有提供可视化设计支持。我宁愿相信这也是beta版本的原因,因为Visual Studio 2010新增的Visual Web Part都能够使用可视化的方式来设计了。不管怎么说,我们终于可以比较方便的为工作流设计基于ASP.NET的启动页面和关联页面了。
当然,我们仍然可以使用InfoPath表单作为工作流的启动页面和管理页面。和上一版本一样,我们需要手工修改Workflow.xml文件,添加必要的宿主页面、内容类型ID和表单URN,Visual Studio 2010并没有替我们完成这部分内容(令人不解的是,为什么不把宿主页面和那个长长内容类型ID也像表单URN的相关元素一样注释起来,以供我们更加方便地使用呢?)。
我们从上面的解决方案资源管理器中看到的Elements.xml就是以前的Workflow.xml,并且由于新增了Site Workflow,Elements.xml的MetaData元素中也相应地增加了一个AssociationCategories元素,用以标识工作流时List Workflow还是Site Workflow。
本来想尝试用SharePoint Designer 2010和Visio 2010设计一个包含它们特有的操作(活动)的Reusable Workflow,然后保存为WSP模板,再使用Visual Studio 2010导入,看看会发生些什么。
结果可耻的失败了数次,唯一的收获就是发现如果Visio 2010设计的工作流流程图如果包含了那四个神秘的权限操作的话,虽然导入到SharePoint Designer 2010里可以正常识别并且设置属性,但是在检查错误的时候就会提示该活动放错了位置,只要将其移动到SharePoint Designer 2010新增的Impersonation Step中,错误就会得以解决。
我猜想是因为设置权限这种操作本身就需要更高的权限才能执行,而SharePoint 2010的工作流貌似已经是以启动工作流的用户权限来运行了,只有其中的Impersonation Step才会以工作流作者(代表着更高的权限?)的权限去执行。