基于WF4.0流程平台开发过程中的知识积累(二)多书签会签
2014-04-25 20:52
295 查看
在WF4.0的自定义活动支持创建多个书签,通过多书签方式,我们可以实现会签审批的效果。
首先这里介绍一下会签与普通审批节点的区别:
普通审批节点是抢占式的,即一个任务同时到达审批人一和审批人二那里,只要其中有一个人进行了审批操作,该审批节点就通过了。
对应会签审批,不分先后,只有当所有人员都需签署了意见,该审批节点才会通过。
下面我们将列创建一个工程,以模拟实现简单的会签功能,首先先创建一个名为BooklMark2的WF控制台工程。在工程内创建一个会签自定义流程节点,命名为ApproveNode,其代码如下:
大部分代码与上一篇的例子是一样的,只是这里我们一共创建了三个书签,分别命名为审批人一,审批人二,审批人三,这三个书签都已Continue作为回调函数。只有所有三个书签都被恢复,才能结束流程位于该节点的中断。
下图是案例的流程图:
为了更加直观地对流程进行操作,我们在工程在添加一个窗体来控制流程,命名为Form1。
同时将主函数的代码更改如下:
上面创建了一个全局的WorkflowApplication,这样可以在其他地方,比如在窗体中操作WorkflowApplication,实现流程运行。主函数先发起流程,然后加载一个窗体。
窗体如下所示:
针对三个按钮,我们编写三个对应的按键响应函数,代码如下:
可以看出,针对不同按钮,执行了释放不同的书签的操作。
运行程序,一开始流程处于待审批状态,如下图:
之后,在对话窗体中依次点击所有的按钮,模拟会签人依次审批的过程。只有所有按钮都被点击完毕后,流程才会进入下一状态,如下图:
代码下载
下一篇,我将继续介绍书签的应用,如何利用书签来实现WF的子流程效果。
首先这里介绍一下会签与普通审批节点的区别:
普通审批节点是抢占式的,即一个任务同时到达审批人一和审批人二那里,只要其中有一个人进行了审批操作,该审批节点就通过了。
对应会签审批,不分先后,只有当所有人员都需签署了意见,该审批节点才会通过。
下面我们将列创建一个工程,以模拟实现简单的会签功能,首先先创建一个名为BooklMark2的WF控制台工程。在工程内创建一个会签自定义流程节点,命名为ApproveNode,其代码如下:
public sealed class ApproveNode : NativeActivity { // 定义一个字符串类型的活动输入参数 public InArgument<string> Text { get; set; } /// <summary> /// 重写这个方法,以便返回true值,true用来控制工作流闲置,可以挂起 /// 默认的情况为false,表示工作流不会挂起执行,因此用户无法和工作流之间进///行交互 /// </summary> protected override bool CanInduceIdle { get { return true; } } // 如果活动返回值,则从 CodeActivity<TResult> // 派生并从 Execute 方法返回该值。 protected override void Execute(NativeActivityContext context) { // 获取 Text 输入参数的运行时值 string text = context.GetValue(this.Text); //创建书签 context.CreateBookmark("审批人一", new BookmarkCallback(Continue)); context.CreateBookmark("审批人二", new BookmarkCallback(Continue)); context.CreateBookmark("审批人三", new BookmarkCallback(Continue)); } //书签恢复后调用的函数 void Continue(NativeActivityContext context, Bookmark bookmark, object obj) { } }
大部分代码与上一篇的例子是一样的,只是这里我们一共创建了三个书签,分别命名为审批人一,审批人二,审批人三,这三个书签都已Continue作为回调函数。只有所有三个书签都被恢复,才能结束流程位于该节点的中断。
下图是案例的流程图:
为了更加直观地对流程进行操作,我们在工程在添加一个窗体来控制流程,命名为Form1。
同时将主函数的代码更改如下:
class Program { public static WorkflowApplication wa; static void Main(string[] args) { wa = new WorkflowApplication(new Workflow1()); wa.Run(); Form1 form = new Form1(); form.ShowDialog(); } }
上面创建了一个全局的WorkflowApplication,这样可以在其他地方,比如在窗体中操作WorkflowApplication,实现流程运行。主函数先发起流程,然后加载一个窗体。
窗体如下所示:
针对三个按钮,我们编写三个对应的按键响应函数,代码如下:
private void button1_Click(object sender, EventArgs e) { Program.wa.ResumeBookmark("审批人一", null); } private void button2_Click(object sender, EventArgs e) { Program.wa.ResumeBookmark("审批人二", null); } private void button3_Click(object sender, EventArgs e) { Program.wa.ResumeBookmark("审批人三", null); }
可以看出,针对不同按钮,执行了释放不同的书签的操作。
运行程序,一开始流程处于待审批状态,如下图:
之后,在对话窗体中依次点击所有的按钮,模拟会签人依次审批的过程。只有所有按钮都被点击完毕后,流程才会进入下一状态,如下图:
代码下载
下一篇,我将继续介绍书签的应用,如何利用书签来实现WF的子流程效果。
相关文章推荐
- 基于WF4.0流程平台开发过程中的知识积累(三)书签实现子流程
- 基于WF设计业务流程平台-权限体系
- 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 开发流程
- 基于AT91RM9200与LINUX2.6.26内核的嵌入式平台开发全过程
- 基于AT91RM9200与LINUX2.6.26内核的嵌入式平台开发全过程
- 一个基于WF的业务流程平台
- SylixOS 基于STM32平台的GPIO模仿I2C总线的驱动开发流程
- 基于微信硬件公众平台的智能控制开发流程
- 基于Wiki的网络协作/知识积累试验平台
- 基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)ArcGIS相关知识补充学习
- 基于WF设计业务流程平台_功能列表
- 基于WF设计业务流程平台_消息收集、通知接口
- 基于Wiki的网络协作/知识积累试验平台
- Cordys BOP 4平台开发入门实战演练——会签流程建模开发
- 基于WF设计业务流程平台-架构
- 一个基于WF的业务流程平台
- 基于WF设计业务流程平台_特定群体与特定人
- 基于WF设计业务流程平台_工作域与一人多部门多职能
- windows7平台搭建Python3开发环境(本学习过程全部基于Python3.x)
- 基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET 4.0 简介