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 Codeusing 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 天,需要总经理审批。当工作流执行完成时,输出审批人信息。