WF 参考手册学习笔记

什么是 WF?

WF(Windows Workflow Foundation,Windows 工作流基础)是一种 Microsoft 开发的 .NET 框架,用于实现符合业务规则的工作流应用程序。

WF 的核心概念

  • 工作流(Workflow):把一个业务过程拆分为多个步骤并组织起来的一种逻辑结构。
  • 活动(Activity):工作流中的基本执行单元,表示一个行动、一项操作或一段代码。
  • 流程控制和数据流(Flow Control and Data Flow):一些特殊的活动,用于控制工作流中活动的执行顺序和传递数据。
  • 状态管理(State Management):指工作流引擎对工作流进行监视、恢复和追踪的机制。
  • 持久化(Persistence):指将正在执行的工作流实例保存到某种持久存储中,在需要时恢复执行。

WF 的应用场景

  • 长时间运行的业务流程(Long-running business processes):例如订单处理、投诉处理等。
  • 协同工作(Collaborative work):例如文档审批、项目管理等。
  • 用户交互式任务(User interactive tasks):例如在线购物、注册流程等。

实例:使用 WF 实现请假流程审批

下面是一份使用 WF 实现请假流程审批的示例代码:

C#Copy Code
using System; using System.Activities; using System.Collections.Generic; namespace WFLeaveApproval { class Program { static void Main(string[] args) { Console.WriteLine("请输入请假天数:"); var days = Convert.ToInt32(Console.ReadLine()); var variables = new Dictionary<string, object> { { "Days", days }, { "Approver", "" } }; var activity = new Sequence() { Activities = { new WriteLine() { Text = "请假申请已提交" }, new If() { Condition = new InArgument<bool>((env) => (int)env["Days"] <= 2), Then = new Assign<string>() { Value = "经理", To = new OutArgument<string>((env) => (string)env["Approver"]) } }, new If() { Condition = new InArgument<bool>((env) => (int)env["Days"] > 2 && (int)env["Days"] <= 5), Then = new Assign<string>() { Value = "部门领导", To = new OutArgument<string>((env) => (string)env["Approver"]) } }, new If() { Condition = new InArgument<bool>((env) => (int)env["Days"] > 5), Then = new Assign<string>() { Value = "总经理", To = new OutArgument<string>((env) => (string)env["Approver"]) } }, new WriteLine() { Text = new InArgument<string>((env) => $"请假申请已通过,审批人为{(string)env["Approver"]}") }, } }; WorkflowInvoker.Invoke(activity, variables); } } }

这个示例实现了一个简单的请假流程:如果请假天数不超过 2 天,需要经理审批;如果请假天数在 3 到 5 天之间,需要部门领导审批;如果请假天数超过 5 天,需要总经理审批。当工作流执行完成时,输出审批人信息。