首页 > 其他分享 >【愚公系列】2023年05月 .NET CORE工具案例-Workflow-Core轻量级工作流引擎(随机流程)

【愚公系列】2023年05月 .NET CORE工具案例-Workflow-Core轻量级工作流引擎(随机流程)

时间:2023-05-13 20:32:04浏览次数:40  
标签:CORE 05 Workflow Id MyApp using ExecutionResult public 轻量级

(文章目录)


前言

1.什么是工作流

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

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

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

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

在这里插入图片描述

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

1.安装包

Install-Package WorkflowCore
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging.Debug

在这里插入图片描述

2.随机流程

2.1 定义步骤

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、步骤二

public class RandomOutput : StepBody
{        
    public override ExecutionResult Run(IStepExecutionContext context)
    {
        Random rnd = new Random();
        int value = rnd.Next(2);
        Console.WriteLine("Generated random value {0}", value);
        return ExecutionResult.Outcome(value);
    }
}

在这里插入图片描述 3、随机步骤

public class CustomMessage : StepBody
{
    
    public string Message { get; set; }

    public override ExecutionResult Run(IStepExecutionContext context)
    {
        Console.WriteLine(Message);
        return ExecutionResult.Next();
    }
}

在这里插入图片描述

public class GoodbyeWorld : StepBody
{
    public override ExecutionResult Run(IStepExecutionContext context)
    {
        Console.WriteLine("Goodbye world");
        return ExecutionResult.Next();
    }
}

在这里插入图片描述

2.2 定义工作流

public class SimpleDecisionWorkflow : IWorkflow
{
    public string Id => "Simple Decision Workflow";

    public int Version => 1;

    public void Build(IWorkflowBuilder<object> builder)
    {
        builder
            .StartWith<HelloWorld>()
            .Then<RandomOutput>(randomOutput =>
            {
                randomOutput
                    .When(0)
                        .Then<CustomMessage>(cm =>
                        {
                            cm.Name("Print custom message");
                            cm.Input(step => step.Message, data => "Looping back....");
                        })
                        .Then(randomOutput);  //loop back to randomOutput

                randomOutput
                    .When(1)
                        .Then<GoodbyeWorld>();
            });
    }
}

在这里插入图片描述

2.3 启动工作流

using Microsoft.Extensions.DependencyInjection;
using WorkflowCore.Interface;
using WorkflowCore.Sample02;

IServiceProvider serviceProvider = ConfigureServices();

//start the workflow host
var host = serviceProvider.GetService<IWorkflowHost>();
host.RegisterWorkflow<SimpleDecisionWorkflow>();
host.Start();

host.StartWorkflow("Simple Decision Workflow");

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 运行

在这里插入图片描述 可以看见直接结束,让我们再次运行 在这里插入图片描述 这次运行发送三次消息才结束

二、Workflow-Core的流程配置

1.代码配置

public class MyWorkflow : IWorkflow
{
    public void Build(IWorkflowBuilder<MyData> builder)
    {    
        builder
           .StartWith<Task1>()
           .Then<Task2>()
           .Then<Task3>();
    }
}

2.JSON配置

{
  "Id": "HelloWorld",
  "Version": 1,
  "Steps": [
    {
      "Id": "Hello",
      "StepType": "MyApp.HelloWorld, MyApp",
      "NextStepId": "Bye"
    },        
    {
      "Id": "Bye",
      "StepType": "MyApp.GoodbyeWorld, MyApp"
    }
  ]
}

3.YAML配置

Id: HelloWorld
Version: 1
Steps:
- Id: Hello
  StepType: MyApp.HelloWorld, MyApp
  NextStepId: Bye
- Id: Bye
  StepType: MyApp.GoodbyeWorld, MyApp

标签:CORE,05,Workflow,Id,MyApp,using,ExecutionResult,public,轻量级
From: https://blog.51cto.com/u_15437432/6273820

相关文章

  • 2023-05 多校联合训练 ZJNU站 热身赛
    猫猫接币币给定两个容量分别为a和b的盒子,已知第i秒天上会掉下i个金币,你会从第1秒开始接金币,每秒钟你可以选择任意一个盒子接金币,但是不能不选,你必须使得两个盒子刚好装满,请问是否存在某个时刻,使得恰好装满两个盒子,输出一个仅由A和B组成的字符串,第\(i\)位的字符即表示第\(i\)......
  • 每日总结2023-05-13
    今天对多线程进行探索: 使用步骤:具体使用: //步骤1:创建线程类(继承自Thread类)classMyThreadextendsThread{//步骤2:复写run(),内容=定义线程行为@Overridepublicvoidrun(){...//定义的线程行为}}//步骤3:创建线程对象,即......
  • 在 ASP.NET Core Web API 中处理 Patch 请求
    一、概述PUT和PATCH方法用于更新现有资源。它们之间的区别是,PUT会替换整个资源,而PATCH仅指定更改。在ASP.NETCoreWebAPI中,由于C#是一种静态语言(dynamic在此不表),当我们定义了一个类型用于接收HTTPPatch请求参数的时候,在Action中无法直接从实例中得知客户......
  • CF1777D Score of a Tree 题解
    题目简述给你一个\(n\)个结点根为\(1\)的树。在\(t=0\)时,每个结点都有一个值,为\(0\)或\(1\)。在每一个\(t>0\)时,每个结点的值都会变成其子结点在\(t-1\)时的值的异或和。定义\(S(t)\)为\(t\)时所有结点值的和。定义\(F(A)\)为树在\(0\let\le10^......
  • 用go设计开发一个自己的轻量级登录库/框架吧(业务篇)
    用go设计开发一个自己的轻量级登录库/框架吧(业务篇)本篇会讲讲框架的登录业务的实现。实现三种登录模式:同一用户只能登录一次同一用户多次登录多token同一用户多次登录共享一个token源码:weloe/token-go:alightloginlibrary(github.com)存储结构首先从我们要考虑是......
  • NET Core 事件总线,分布式事务解决方案:CAP
    转载:https://blog.csdn.net/WuLex/article/details/1245648311.事件总线概念事件总线是一种事件发布/订阅结构,通过发布订阅模式可以解耦不同架构层级,同样它也可以来解决业务之间的耦合,它有以下优点松耦合横切关注点可测试性事件驱动事件总线类型进程内事件(Event):本地事件,它......
  • MPU6050一些问题与解决方案
    第一次参加电赛,调mpu6050调得想死,记录一些问题等待日后查询。 一.输出一直是0.可能1:没有初始化成功,见二。可能2:输出时用的是整型格式而不是浮点数格式。。。可能3:AD0引脚接了高电平(或者低电平),就是地址不对。二.初始化不能成功。我是和......
  • EntityFramework Core 6.0 MySql WebApi
    Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.DesignPomelo.EntityFrameworkCore.MySqlMicrosoft.EntityFrameworkCore.Tools-----------------------------------------------------------------------------------------------------------------------......
  • Hugging News #0512:
    每一周,我们的同事都会向社区的成员们发布一些关于HuggingFace相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「HuggingNews」,本期HuggingNews有哪些有趣的消息,快来看看吧!开源更新Transformers现已支持Meta的S......
  • 2023-05-12:存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号, 给你
    2023-05-12:存在一个由n个节点组成的无向连通图,图中的节点按从0到n-1编号,给你一个数组graph表示这个图,其中,graph[i]是一个列表,由所有与节点i直接相连的节点组成。返回能够访问所有节点的最短路径的长度。你可以在任一节点开始和停止,也可以多次重访节点,并且可以重......