代码改变世界

使用VS进行工作流开发系列博客4-Developing Workflows in VS: Part 3 - Five Steps for Developing Your Workflow

2008-11-24 15:22  Virus-BeautyCode  阅读(818)  评论(0编辑  收藏  举报


原文地址:
http://blogs.msdn.com/sharepoint/archive/2006/11/23/developing-workflows-in-vs-part-3-five-steps-for-developing-your-workflow.aspx
好,此刻你已经等了好久了,如何进行一个自定义的sharepoint工作流开发呢?在这一章节,我们将用五个步骤来解释:
1、 在VS建模你的工作流
2、 创建并绑定你的表单
3、 写代码
4、 部署你的工作流到服务器
5、 调试
记住这些只是建议的步骤,你可以用任务适用你的步骤来完成这些事情。
第一步:给你的工作流建模
第一步是使用VS中的工作流扩展模板对工作流进行建模,也就是创建一个工作流工程,拖拽活动到你的工作流面板,然后设置必须的属性。有了一个流程的框架,将会帮助你看清楚什么是你需要做的,哪里是你在下面的步骤中将要需要绑定到你的表单的。同时,在活动的设计模板设置属性可以节省一些你的来回切换设计和代码的时间。

问题解释:在VS中打不开工作流模板
当在VS中使用sharepoint工作流模板的时候,你可能会遇到打开工程文件.CSPROJ错误的提示。这通常是说你的VS还没有安装工作流扩展模板。在你报错sharepoint节点之前,点击看你在workflow节点下面有无内容。
Sharepoint活动
Sharepoint预定义了一组活动。大部分包装了前面章节提到的服务端方法,更确切的说,他们是活动形式的服务API。
这些方法活动是蓝色的,事件处理活动是绿色的。方法活动继承自工作流的CallExternalMethod活动,你为方法活动的Invoked属性写的功能将在服务方法执行之前执行,事件处理继承自HandleExternalEvent活动,你为Invoked属性写的功能将在方法处理和激活工作流之后执行。
无论什么时候,如果你想要工作流提交或者睡觉工作流,你都可以添加一个事件处理活动,然后当事件发生的时候激活工作流。
通过单击属性旁边的蓝色图标,使用活动属性对话框为你的活动属性创建并且绑定变量。如果不是通过单击蓝色按钮设置,而是直接输入一个值,例如,为一个整型属性输入1,这个属性将会设置为常量。(在你知道这个值不会改变的情况下,这种方法将会花费更少的资源)
容易犯的错误:使用CreateTask或者OnTaskChanged的SPWorkflowTaskProperties对象作为sharepoint任务列表的一个实时代理
当使用CreateTask的时候,你绑定到TaskProperties属性的对象仅仅为任务设置了初始值,他和任务不是同步的,因此他将不会响应任务的任务改变,反之亦然。同样的情况也发生在OnTaskChanged的AfterProperties属性。
相互关系Tokens的重要性
The Importance of Correlation Tokens
在初始化属性的时候很容易放的一个错误是,没有正确设置相互关系tokens去映射不同的活动为相同的对象。如果没有正确的设置,工作流将不会被激活或者响应事件。
你需要一个token作为一个工作流的标识,用来识别和响应sharepoint中的相关对象。
例如,如果在顺序活动中你有一个CreateTask活动、一个OnTaskChanged活动(等待用户编辑这个任务)、一个CompleteTask活动,有想要这三个活动去映射sharepoint中的同一个任务列表,你需要为这三个活动设置相同的correlation token。
你的活动需要一个和工作流自己相关的token,和特定任务或者列表项相关的活动token,每一个修改一个token。这里有一组活动,都需要相同的correlation token(每一组应该有自己的token)。



 
“Workflow” token:


• OnWorkflowActivated
• OnWorkflowItemChanged
• OhWorkflowItemDeleted
• SetState
• SendEmail
• UpdateAllTasks Task token:

CreateTask



CreateTaskWithContentType
UpdateTask
DeleteTask
CompleteTask
RollbackTask
OnTaskChanged
OnTaskDeleted
OnTaskCreated 


Modification token:

• EnableWorkflowModification
• OnWorkflowModified

在这个表格中缺少的就是列表项的服务API(service APIs),那些工具箱中没有的活动。但是如果你为他们使用包装活动(such as those included in the ECM Starter Kit item activities sample),你将对待他们就像对待任务一样:每个相关的项应该使用相同的correlation token。
容易犯的错误:使用工作流token作为任务token
一些时候,开发者使用工作流token作为他们的任务token,现在所有的任务映射到同一件事,这是正确的吗?当然不是正确的,要保证每一组对象有自己的token。例如,不要使用全局工作流token作为你的任务token。同样,为每一个任务创建一个分开的token。记住:如果你在replicator活动中有一个任务序列,改变序列的“活动所有者名称”(Owner Activity Name)将会自动为序列的每一个实例创建一个新的token。
下一章节是:设计并绑定你的表单
谢谢!