zoukankan      html  css  js  c++  java
  • .NET CORE 开源工作流 elsa-core 基础使用示例

    分享一个 不错的 轻量型且功能强大的开源工作流项目 Elsa-core 

    转载请注明出处: https://www.cnblogs.com/Qbit/p/13871837.html

    关于该项目的其他介绍请百度其他文章介绍

    项目地址   官方文档  如何运行

    目前官方手册和文档还很不完善,研究了几天踩了不少坑,特此留下笔记。

    Recive HTTP Request 

    首先是 Recive HTTP Request 它是最常用的 一个Activity, 可以接收一个POST 或者 GET以及其他常用的 请求方法 , 勾选下方的 Read Content 将从请求的Body获取提交信息,常用的方式是使用一个 POST 方法接收 JSON数据

    另外需要注意的是,在工作流的任何位置都可以 放置一个 Recive HTTP Request ,工作流运行到此处时会挂起等待新的请求。

    那么就产生一个问题,它的Path 是不可编码的,我们如何区分不同工作流实例的请求呢?请往下看

    Correlate 

    该活动用于将你的业务文档关联,比如 申请单的主键

    SetVariable

    用于设置流程变量,我们使用一个Recive HTTP Request  接收一个请求后使用  SetVariable 活动保存接收到的数据 ,这里可用的动态表达式包括 Liquid 和 JavaScript,当然也可以直接使用第一个选项 用纯文本

    可用的Javascript  内置 函数

    input(name)

    variable(name)

    lastResult()

    correlationId()

    currentCulture()

    newGuid()

     需要注意的是 这里的表达式 不支持未声明直接调用 

    另外:注意 数组变量在保存后将被 解析为 JArray, 它不再是 js 的 Arry,   所以没有 push 方法, 你需要调用 Add()

    如 初始化变量时直接使用[]:

    myArray=[];

    在后续的活动中想要往 myArray 中添加对象然后更新此对象需要再添加一个同名的 Set Variable 活动,然后脚本部分这么写:

    myArray.Add(obj);  
    return myArray;

      同样的,由于它不是Js对象,你需要调用它的 ToString() 方法将其解析成字符串 再使用JSON.parse 转换为js对象

    就像下面这样:

    return JSON.stringify({
    requestId: correlationId(), 
    approveResult: ApproveLog.approveAction.Value,
    logs: JSON.parse(ApproveLogList.ToString())
    })

    请求的实例关联

    在流程中的 Recive Http Request 活动 , 如果我们存在多个审批中的文档,需要使用Correlate 活动将其区分,在客户端发送审批请求时需要附带一个 X-Correlation-Id 到你的请求头中,为其赋值为 你的 CorrelationId (也就是申请单主键)

     源代码见:https://github.com/elsa-workflows/elsa-core/blob/cc94472301d876cc500326a253f9468c248e6d34/src/activities/Elsa.Activities.Http/RequestHandlers/Handlers/TriggerRequestHandler.cs#L49

    如果后台收到此请求,Elsa会从进行中的实例中找到使用 这个 ID 的实例,并继续运行

    以下是一个二级审批的工作流 

    使用 PostMan 进行测试

    {
        "submitType": "Monthly", "clientUrl": "http://xxxx",
        "sender": {
            "userName": "zhangsan",
            "email": "x"
        },
        "requestId": 3,
        "approvers": [
            {
                "userName": "ZhangSan1",
                "email": "x"
            },
            {
                "userName": "ZhangSan2",
                "email": "x"
            }
        ],
        "apiBaseUrl": "http://localhost:44388/"
    }

    审批请求:

     别忘了在请求头附加 X-Correlation-Id ,也就是启动工作流时发送的 requestId

    { "userName":"ZhangSan1", "remark":"通过啦?","approveAction":true}

  • 相关阅读:
    二进制位运算
    Leetcode 373. Find K Pairs with Smallest Sums
    priority_queue的用法
    Leetcode 110. Balanced Binary Tree
    Leetcode 104. Maximum Depth of Binary Tree
    Leetcode 111. Minimum Depth of Binary Tree
    Leetcode 64. Minimum Path Sum
    Leetcode 63. Unique Paths II
    经典的递归练习
    案例:java中的基本排序
  • 原文地址:https://www.cnblogs.com/Qbit/p/13871837.html
Copyright © 2011-2022 走看看