Elsa V3学习之工作流定义详解

2024-08-19 12:47:21 浏览数 (2)

工作流定义的JSON结构

以下是一个空流程的工作流定义的基础节点,包含一个变量一个Input一个Output。

代码语言:javascript复制
{
    "definitionId": "8539248c8575efff",
    "name": "Workflow 3",
    "description": "Description",
    "toolVersion": "3.3.0.0",
    "variables": [
        {
            "id": "a30d4a423c8d43a0",
            "name": "Variable1",
            "typeName": "Object",
            "isArray": false,
            "value": null,
            "storageDriverTypeName": "Elsa.Workflows.Services.WorkflowStorageDriver, Elsa.Workflows.Core"
        }
    ],
    "inputs": [
        {
            "uiHint": "singleline",
            "storageDriverType": "Elsa.Workflows.Services.WorkflowStorageDriver, Elsa.Workflows.Core",
            "type": "Object",
            "isArray": false,
            "name": "Input1",
            "displayName": "Input 1",
            "description": null,
            "category": "Primitives"
        }
    ],
    "outputs": [
        {
            "type": "Object",
            "isArray": false,
            "name": "Output1",
            "displayName": "Output 1",
            "description": null,
            "category": "Primitives"
        }
    ],
    "outcomes": [],
    "customProperties": {},
    "isReadonly": false,
    "options": {
        "activationStrategyType": "Elsa.Workflows.Runtime.ActivationValidators.CorrelatedSingletonStrategy, Elsa.Workflows.Runtime",
        "usableAsActivity": null,
        "autoUpdateConsumingWorkflows": false,
        "activityCategory": null,
        "incidentStrategyType": "Elsa.Workflows.IncidentStrategies.ContinueWithIncidentsStrategy, Elsa.Workflows.Core"
    },
    "root": {
        "type": "Elsa.Flowchart",
        "version": 1,
        "id": "d41f9af2c487a55b",
        "nodeId": "Workflow1:d41f9af2c487a55b",
        "metadata": {},
        "customProperties": {
            "source": "FlowchartJsonConverter.cs:45",
            "notFoundConnections": [],
            "canStartWorkflow": false,
            "runAsynchronously": false
        },
        "activities": [],
        "connections": []
    },
    "links": null,
    "createdAt": "2024-08-18T12:29:50.1620717 00:00",
    "version": 1,
    "isLatest": true,
    "isPublished": false,
    "id": "6fa5ede103434fe9"
}

变量Variables

在工作流中,变量variables是跟随整个工作流程的,我们可以在任何一个节点给变量赋值,以及在任何一个节点读取变量的值。 例如下面操作,我们在SetVariale节点中将变量Variable1设置为123,在WriteLine通过JS方法获取变量的值输出。

image.pngimage.png
image.pngimage.png

输出的结果如下图所示:

image.pngimage.png

Input/Output

这里的输入输出可以作为整个工作流的输入输出参数, 相当于动态的添加减少我们工作流的入参和输出。 当工作流勾选Usable as activity时,这个流程可以充当一个Activity节点来使用。

image.pngimage.png

这里把Workflow 3勾选上Usable as activity,并添加分类为Workflow。创建新的工作流,这里可看到左侧节点多了Workflow分类,并包含一个Workflow3的节点。将其拖到画布,可以看到Input就是我们在Workflow3中添加的Input1。

image.pngimage.png

Usable as activity

前面我们用到了Usable as activity这个选项,这个选项是把整个流程当作一个Activity节点使用,勾选后我们可以选择是否自动更新使用工作流,当发布新版本时,所有使用工作流都将更新为指向此工作流的新版本。以及可以给这个Activity节点设置一个分类。

IncidentStrategy

在流程设置里面,包含了incidentStrategyType参数,表示异常时的运行策略,包括了异常继续运行流程和抛出异常停止的策略,默认是异常停止流程。

ActivationStrategy

activationStrategyType表示的是工作流的运行策略,可设置根据Correlation Id的执行策略,例如同一个Correlation Id只能执行一次等。

Root

Root的本质其实也是一个Activity,类型为flowchart,用于存储和编排整个流程的一个Activity。 里面包含了connections和activities,activities记录了所有在画布的activity,connections用于存储activity的连线关系。

结语

本文介绍了工作流定义的基本结构,相信大家对流程的定义会有一定的了解。

0 人点赞