前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2023年02月 .NET CORE工具案例-Workflow-Core轻量级工作流引擎(数据流转)

【愚公系列】2023年02月 .NET CORE工具案例-Workflow-Core轻量级工作流引擎(数据流转)

作者头像
愚公搬代码
发布2023-03-16 16:20:34
4790
发布2023-03-16 16:20:34
举报
文章被收录于专栏:历史专栏历史专栏

文章目录


前言

1.什么是工作流

工作流是OA系统比较重要的功能之一,主要在于企业流程协同审批,有效进行流程管理。

流程管理起源于生产组织和办公自动化领域,是针对日常工作中具有固定程序的活动提出的一个概念。目的是通过将工作分解成定义良好的任务、角色,按照一定的规则和过程来执行这些任务并对它们进行监控,达到提高办事效率、降低生产成本、提高企业生产经营管理水平和企业竞争力的目标。

现代计算机技术实现了工作流,是支持企业经营过程高效执行并监控其执行过程的计算机软件系统。工作流软件类似电脑桌面操作系统,操作系统驱动电脑各部件协同运转,工作流软件则驱动业务过程自动有序进行。

Workflow-Core地址:https://github.com/danielgerlag/workflow-core

在这里插入图片描述
在这里插入图片描述

一、Workflow-Core轻量级工作流引擎

1.安装包

代码语言:javascript
复制
Install-Package WorkflowCore
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging.Debug
在这里插入图片描述
在这里插入图片描述

2.数据流转

模型类

代码语言:javascript
复制
public class MyDataClass
{
    public int Value1 { get; set; }

    public int Value2 { get; set; }

    public int Value3 { get; set; }

}
在这里插入图片描述
在这里插入图片描述

2.1 定义步骤

1、步骤一

代码语言:javascript
复制
public class AddNumbers : StepBodyAsync
{
    public int Input1 { get; set; }

    public int Input2 { get; set; }

    public int Output { get; set; }


    public override async Task<ExecutionResult> RunAsync(IStepExecutionContext context)
    {
        Output = (Input1 + Input2);
        return ExecutionResult.Next();
    }
}
在这里插入图片描述
在这里插入图片描述

2、步骤二

代码语言:javascript
复制
public class CustomMessage : StepBody
{
    
    public string Message { get; set; }

    public override ExecutionResult Run(IStepExecutionContext context)
    {
        Console.WriteLine(Message);
        return ExecutionResult.Next();
    }
}
在这里插入图片描述
在这里插入图片描述

2.2 定义工作流

1、模型类工作流

代码语言:javascript
复制
public class PassingDataWorkflow : IWorkflow<MyDataClass>
{  
    public void Build(IWorkflowBuilder<MyDataClass> builder)
    {
        builder
            .StartWith(context =>
            {
                Console.WriteLine("Starting workflow...");
                return ExecutionResult.Next();
            })
            .Then<AddNumbers>()
                .Input(step => step.Input1, data => data.Value1)
                .Input(step => step.Input2, data => data.Value2)
                .Output(data => data.Value3, step => step.Output)
            .Then<CustomMessage>()
                .Name("Print custom message")
                .Input(step => step.Message, data => "The answer is " + data.Value3.ToString())
            .Then(context =>
                {
                    Console.WriteLine("Workflow complete");
                    return ExecutionResult.Next();
                });
    }

    public string Id => "PassingDataWorkflow";
        
    public int Version => 1;

}
在这里插入图片描述
在这里插入图片描述

2、字典工作流

代码语言:javascript
复制
public class PassingDataWorkflow2 : IWorkflow<Dictionary<string, int>>
{
    public void Build(IWorkflowBuilder<Dictionary<string, int>> builder)
    {
        builder
            .StartWith(context =>
            {
                Console.WriteLine("Starting workflow...");
                return ExecutionResult.Next();
            })
            .Then<AddNumbers>()
                .Input(step => step.Input1, data => data["Value1"])
                .Input(step => step.Input2, data => data["Value2"])
                .Output((step, data) => data["Value3"] = step.Output)
            .Then<CustomMessage>()
                .Name("Print custom message")
                .Input(step => step.Message, data => "The answer is " + data["Value3"].ToString())
            .Then(context =>
                {
                    Console.WriteLine("Workflow complete");
                    return ExecutionResult.Next();
                });
    }

    public string Id => "PassingDataWorkflow2";

    public int Version => 1;

}
在这里插入图片描述
在这里插入图片描述

2.3 启动工作流

代码语言:javascript
复制
using Microsoft.Extensions.DependencyInjection;
using WorkflowCore.Interface;
using WorkflowCore.Sample03;

IServiceProvider serviceProvider = ConfigureServices();

//start the workflow host
var host = serviceProvider.GetService<IWorkflowHost>();
host.RegisterWorkflow<PassingDataWorkflow, MyDataClass>();
host.RegisterWorkflow<PassingDataWorkflow2, Dictionary<string, int>>();
host.Start();

var initialData = new MyDataClass
{
    Value1 = 2,
    Value2 = 3
};

//host.StartWorkflow("PassingDataWorkflow", 1, initialData);


var initialData2 = new Dictionary<string, int>
{
    ["Value1"] = 7,
    ["Value2"] = 2
};

host.StartWorkflow("PassingDataWorkflow2", 1, initialData2);

Console.ReadLine();
host.Stop();

static IServiceProvider ConfigureServices()
{
    //setup dependency injection
    IServiceCollection services = new ServiceCollection();
    services.AddLogging();
    services.AddWorkflow();
    var serviceProvider = services.BuildServiceProvider();

    return serviceProvider;
}
在这里插入图片描述
在这里插入图片描述

2.4 运行

1、模型类工作流

在这里插入图片描述
在这里插入图片描述

2、字典工作流

在这里插入图片描述
在这里插入图片描述

二、Workflow-Core的流程配置

1.代码配置

代码语言:javascript
复制
public class MyWorkflow : IWorkflow
{
    public void Build(IWorkflowBuilder<MyData> builder)
    {    
        builder
           .StartWith<Task1>()
           .Then<Task2>()
           .Then<Task3>();
    }
}

2.JSON配置

代码语言:javascript
复制
{
  "Id": "HelloWorld",
  "Version": 1,
  "Steps": [
    {
      "Id": "Hello",
      "StepType": "MyApp.HelloWorld, MyApp",
      "NextStepId": "Bye"
    },        
    {
      "Id": "Bye",
      "StepType": "MyApp.GoodbyeWorld, MyApp"
    }
  ]
}

3.YAML配置

代码语言:javascript
复制
Id: HelloWorld
Version: 1
Steps:
- Id: Hello
  StepType: MyApp.HelloWorld, MyApp
  NextStepId: Bye
- Id: Bye
  StepType: MyApp.GoodbyeWorld, MyApp
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
    • 1.什么是工作流
    • 一、Workflow-Core轻量级工作流引擎
      • 1.安装包
        • 2.数据流转
          • 2.1 定义步骤
          • 2.2 定义工作流
          • 2.3 启动工作流
          • 2.4 运行
      • 二、Workflow-Core的流程配置
        • 1.代码配置
          • 2.JSON配置
            • 3.YAML配置
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
            http://www.vxiaotou.com