Elsa V3学习之工作流定义详解
工作流定义的JSON结构
以下是一个空流程的工作流定义的基础节点,包含一个变量一个Input一个Output。
{
"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方法获取变量的值输出。
输出的结果如下图所示:
Input/Output
这里的输入输出可以作为整个工作流的输入输出参数, 相当于动态的添加减少我们工作流的入参和输出。
当工作流勾选Usable as activity时,这个流程可以充当一个Activity节点来使用。
这里把Workflow 3勾选上Usable as activity,并添加分类为Workflow。创建新的工作流,这里可看到左侧节点多了Workflow分类,并包含一个Workflow3的节点。将其拖到画布,可以看到Input就是我们在Workflow3中添加的Input1。
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的连线关系。
结语
本文介绍了工作流定义的基本结构,相信大家对流程的定义会有一定的了解。