工作流是OA系统比较重要的功能之一,主要在于企业流程协同审批,有效进行流程管理。
流程管理起源于生产组织和办公自动化领域,是针对日常工作中具有固定程序的活动提出的一个概念。目的是通过将工作分解成定义良好的任务、角色,按照一定的规则和过程来执行这些任务并对它们进行监控,达到提高办事效率、降低生产成本、提高企业生产经营管理水平和企业竞争力的目标。
现代计算机技术实现了工作流,是支持企业经营过程高效执行并监控其执行过程的计算机软件系统。工作流软件类似电脑桌面操作系统,操作系统驱动电脑各部件协同运转,工作流软件则驱动业务过程自动有序进行。
Workflow-Core地址:https://github.com/danielgerlag/workflow-core
Install-Package WorkflowCore
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging.Debug
1、步骤一
using System;
using System.Linq;
using WorkflowCore.Interface;
using WorkflowCore.Models;
namespace WorkflowCore.Sample01.Steps
{
public class HelloWorld : StepBody
{
public override ExecutionResult Run(IStepExecutionContext context)
{
Console.WriteLine("Hello world");
return ExecutionResult.Next();
}
}
}
2、步骤二
using Microsoft.Extensions.Logging;
using WorkflowCore.Interface;
using WorkflowCore.Models;
namespace WorkflowCore.Sample01.Steps
{
public class GoodbyeWorld : StepBody
{
private ILogger _logger;
public GoodbyeWorld(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<GoodbyeWorld>();
}
public override ExecutionResult Run(IStepExecutionContext context)
{
Console.WriteLine("Goodbye world");
_logger.LogInformation("Hi there!");
return ExecutionResult.Next();
}
}
}
using WorkflowCore.Interface;
using WorkflowCore.Models;
using WorkflowCore.Sample01.Steps;
namespace WorkflowCore.Sample01
{
public class HelloWorldWorkflow : IWorkflow
{
public void Build(IWorkflowBuilder<object> builder)
{
builder
.UseDefaultErrorBehavior(WorkflowErrorHandling.Suspend)
.StartWith<HelloWorld>()
.Then<GoodbyeWorld>();
}
public string Id => "HelloWorld";
public int Version => 1;
}
}
using Microsoft.Extensions.DependencyInjection;
using WorkflowCore.Interface;
using WorkflowCore.Sample01;
using WorkflowCore.Sample01.Steps;
IServiceProvider serviceProvider = ConfigureServices();
//start the workflow host
var host = serviceProvider.GetService<IWorkflowHost>();
host.RegisterWorkflow<HelloWorldWorkflow>();
host.Start();
host.StartWorkflow("HelloWorld");
Console.ReadLine();
host.Stop();
static IServiceProvider ConfigureServices()
{
//setup dependency injection
IServiceCollection services = new ServiceCollection();
services.AddLogging();
services.AddWorkflow();
//services.AddWorkflow(x => x.UseMongoDB(@"mongodb://localhost:27017", "workflow"));
services.AddTransient<GoodbyeWorld>();
var serviceProvider = services.BuildServiceProvider();
return serviceProvider;
}
public class MyWorkflow : IWorkflow
{
public void Build(IWorkflowBuilder<MyData> builder)
{
builder
.StartWith<Task1>()
.Then<Task2>()
.Then<Task3>();
}
}
{
"Id": "HelloWorld",
"Version": 1,
"Steps": [
{
"Id": "Hello",
"StepType": "MyApp.HelloWorld, MyApp",
"NextStepId": "Bye"
},
{
"Id": "Bye",
"StepType": "MyApp.GoodbyeWorld, MyApp"
}
]
}
Id: HelloWorld
Version: 1
Steps:
- Id: Hello
StepType: MyApp.HelloWorld, MyApp
NextStepId: Bye
- Id: Bye
StepType: MyApp.GoodbyeWorld, MyApp