在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才会以工作流作者(代表着更高的权限?)的权限去执行。