使用.net 构建 Elsa Workflow

news/2024/5/19 21:48:48 标签: c#, elsa, 工作流, .netcore, .net, OA, workflow

对接过蓝凌OA 也基于泛微OA数据库原型重新研发上线过产品,自研的开源的也上线过 每个公司对OA流程引擎介绍 都不一样的, 比如Elsa 这款微软MVP开源组件,基于跨平台开发的技术含量高,专门做OA的同行推过对应文章。 直接看怎么用吧。

开发环境 net6

一章 简单使用

官方文档

using Elsa.Extensions;
using Elsa.Workflows.Core.Activities;
using Elsa.Workflows.Core.Contracts;
using Microsoft.Extensions.DependencyInjection;

namespace ConsoleApp1demo
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            {
                //ServiceCollection services = new ServiceCollection();
                nuget: Elsa
                //services.AddElsa();// 注册Elsa服务到容器
                定义一个工作流程,就只有一个工作环节 
                //ServiceProvider serviceprovider = services.BuildServiceProvider();

                //WriteLine workflow = new WriteLine("Hello, World!");

                //IWorkflowRunner workflowRunner = serviceprovider.GetRequiredService<IWorkflowRunner>();
                //await workflowRunner.RunAsync(workflow);    
                //Console.WriteLine("Hello, World!");

            }

            {
                ServiceCollection services = new ServiceCollection();
                //nuget: Elsa
                services.AddElsa();// 注册Elsa服务到容器
                                   定义一个工作流程,就只有一个工作环节 
                ServiceProvider serviceprovider = services.BuildServiceProvider();

                var workflow = new Sequence()
                {
                    Activities = {
                            new WriteLine("Hello world"),
                            new WriteLine("Goodbye 66666")
                   }
                };

                IWorkflowRunner workflowRunner = serviceprovider.GetRequiredService<IWorkflowRunner>();
                await workflowRunner.RunAsync(workflow);

            }
        }

    }
}

二章 改成API 使用的预发行版本 即还没有成为正式发布的版本!!!QAQ

官方文档

不兼容swagger? 先注释

改造成支持httpjson

using Elsa.Http;
using Elsa.Workflows.Core.Activities;
using Elsa.Workflows.Core.Contracts;
using Microsoft.AspNetCore.Mvc;

namespace Zhaoxi.Elsa.Server_Project.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class RunWorkflowController : ControllerBase
    {
        //工作流执行着
        private readonly IWorkflowRunner _workflowRunner;

        public RunWorkflowController(IWorkflowRunner workflowRunner)
        {
            _workflowRunner = workflowRunner;
        }

        [HttpGet]
        public async Task Post()
        {
            await _workflowRunner.RunAsync(new WriteLine("Hello ASP.NET world!")); 
            await _workflowRunner.RunAsync(new WriteHttpResponse()
            { 
                Content = new("Hello ASP.NET world!")
            });
        }
    }
}

三章 开始用用核心点的东西了

好多前潜规则 丢

注册  //配置支持某一个端点 

//Elsa 作为一个端点
builder.Services.AddElsa(elsa =>
{
    elsa.UseWorkflowRuntime(runtime =>
    {
        //配置支持某一个端点 
        runtime.AddWorkflow<CustomWorkflow>();
    });
    elsa.UseHttp();
});

跟swagger  AddControllers 冲突 需要注释掉

使用

app.UseWorkflows();

命名 类似于控制的后缀 workflows 微软风格

http://localhost:5191/workflows/hello-word

第四章 Exposing the REST API

  <PackageReference Include="Elsa" Version="3.0.0-preview.727" />
  <PackageReference Include="Elsa.Http" Version="3.0.0-preview.727" />
  <PackageReference Include="Elsa.Workflows.Api" Version="3.0.0-preview.727" />
  <PackageReference Include="Elsa.Identity" Version="3.0.0-preview.727" />

授权 使用

访问

然后就潜规则 官网居然 直接就 下一页 不告诉怎么搞了 哈哈哈哈

---分割线------------------------


            //----------------------------------------------------------------------------
            //curl--location GET 'http://localhost:5031/elsa/api/workflow-definitions'
            //--header 'Authorization: ApiKey 00000000-0000-0000-0000-000000000000'     访问不到  token不对


            //----------------------------------------------------------------------------
            //要请求访问令牌,我们可以向端点发送以下请求/identity/login:
            //curl--location--request POST 'http://localhost:5031/elsa/api/identity/login' 
            //--header 'Content-Type: application/json' 
            //--data - raw '{
            //    "username": "admin",
            //    "password": "password"
            //}'


            //----------------------------------------------------------------------------
            //要使用访问令牌向 API 端点发出经过身份验证的请求,我们可以包含访问令牌,如下所示:
            // curl--location GET 'http://localhost:5031/elsa/api/workflow-definitions'
            // --header 'Authorization: Bearer {access_token}'

 http://localhost:5032/elsa/api/workflow-definitions

访问不到  token不对
 

  //--header 'Authorization: ApiKey 00000000-0000-0000-0000-000000000000'   

能访问了是通的

开始拿token

  //----------------------------------------------------------------------------
  //要请求访问令牌,我们可以向端点发送以下请求/identity/login:
  //curl--location--request POST 'http://localhost:5031/elsa/api/identity/login' 
  //--header 'Content-Type: application/json' 
  //--data - raw '{
  //    "username": "admin",
  //    "password": "password"
  //}'

默认账号密码就是这

鉴权 颁发token

改成别的就没有数据 鉴权可用

原来的还能用

随便改个值

凭证不对访问 问不了

已知的是1用这个就能拿到token了还要其他干啥

2如何活动的接口也带上token

先用到这里吧


http://www.niftyadmin.cn/n/5174699.html

相关文章

信息系统项目管理师 教材目录、考试大纲、考情

文章目录 考情考试大纲第1章 信息化发展第2章 信息技术发展第3章 信息系统治理第4章 信息系统管理第5章 信息系统工程第6章 项目管理概论第7章 项目立项管理第8章 项目整合管理第9章 项目范围管理272第10章 项目进度管理297第11章 项目成本管理334第12章 项目质量管理358第13章…

第二章 03Java基础-IDEA相关叙述

文章目录 前言一、IDEA概述二、IDEA下载和安装三、IDEA项目结构介绍四、IDEA的项目和模块操作总结前言 今天我们学习Java基础,IDEA下载以及相关配置和基础使用方法 一、IDEA概述 1.IDEA全称IntelliJ IDEA,是用于Java语言开发的集成工具,是业界公认的目前用于Java程序开发最…

Android高级实践分享

以下是我学习过程中&#xff0c;觉得比较好的Android进阶高级实践&#xff0c;分享给大家&#xff0c;可能有些东西差异化比较大了&#xff0c;但是我也想经过这些实践&#xff0c;踩踩坑。 Android进阶之旅&#xff1a; https://www.jianshu.com/p/c0ec2a7fc26a Android自定…

哈希表之闭散列的实现

闭散列实现哈希表 在闭散列实现哈希表中&#xff0c;我们选择线性探测法来解决哈希冲突。在哈希表的简介部分&#xff0c;我们已经介绍过线性探测法啦&#xff01; 线性探测&#xff1a;从发生冲突的位置开始&#xff0c;依次向后探测&#xff0c;直到寻找到下一个空位置为止…

基于C#+WPF编写的调用讯飞星火大模型工具

工具源码&#xff1a;https://github.com/lishuangquan1987/XFYun.SparkChat 工具效果截图&#xff1a; 支持流式输出: 其中ApiKey/ApiSecret/AppId需要自己到讯飞星火大模型官网去注册账号申请&#xff0c;免费的。 申请地址&#xff1a;https://xinghuo.xfyun.cn/ 注册之…

使用决策树分类

任务描述 本关任务&#xff1a;使用决策树进行分类 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.使用决策树进行分类 使用决策树进行分类 依靠训练数据构造了决策树之后&#xff0c;我们可以将它用于实际数据的分类。在执行数据分类时&#xff0c;需要…

springboot苍穹外卖实战:十、缓存菜品(手动用redisTemplate实现缓存逻辑)+缓存套餐(Spring cache实现)

缓存菜品 缺点 缓存和数据库的数据一致性通常解决方案&#xff1a;延时双删、异步更新缓存、分布式锁。 该项目对于缓存菜品的处理较为简单&#xff0c;实际可以用管道技术提高redis的操作效率、同时cache自身有注解提供使用。 功能设计与缓存设计 建议这部分去看下原视频&…

VulnHub Prime_Series_Level-1

一、信息收集 1.nmap扫描 ┌──(root&#x1f480;kali)-[~/桌面] └─# arp-scan -l┌──(root&#x1f480;kali)-[~/桌面] └─# nmap -sS -A -p- 192.168.103.202发现开放了22和80端口 2.web页面 打开80端口的web页面&#xff0c;是一张静态的图片&#xff0c;没什么价…