elsa 变量
在 Elsa 中,变量作为容器在工作流生命周期中存储和检索数据扮演着至关重要的角色。它们促进了活动之间的数据传输,并为这些活动使用的数据提供了存储。
变量结构
每个变量包含以下组件:
- 名称:在工作流中唯一区分大小写的变量标识符。
- 类型:定义变量的数据类型。
- 默认值:创建时可选地分配给变量的默认值。
- 存储提供程序:指定变量数据存储的位置。
组件详细说明
名称
变量的名称是工作流内唯一的标识符,确保了对变量访问和操作的精确性。
默认值
变量可能具有默认值,在变量初始化时使用。
变量类型
Elsa 工作流中的变量可以是 .NET
支持的任何类型,增强了数据处理的灵活性和多功能性。类型包括但不限于:
- 字符串
- 数字
- 布尔值
- 日期时间
- 对象
- 数组
- 自定义类型
存储提供程序
存储提供程序决定了变量存储的位置。Elsa
工作流提供了两个内置提供程序:
- 内存:变量仅在工作流生命周期内可访问。此提供程序适用于存储临时数据或非序列化数据。
- 工作流实例:变量与工作流实例一起保存。此提供程序适用于需要为工作流生命周期保留的序列化数据的存储。
关于变量存储的重要信息
- 工作流实例存储:使用工作流实例存储提供程序时,请确保变量类型是可序列化的,以避免抛出异常。
- 内存存储:请注意,如果使用内存存储提供程序,工作流被持久化并在之后恢复,值将会丢失。
扩展性
自定义类型
Elsa
工作流支持自定义类型,允许开发者定义自己的类型并将其用作变量。例如,可以定义一个名为 Person
的自定义类型如下:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
要将自定义类型用作变量,只需按如下定义变量:
var person = builder.WithVariable<Person>().WithMemoryStorage();
要使该类型从设计器中可用,使用管理服务进行注册:
Program.cs
services.AddElsa(elsa =>
{
elsa.UseWorkflowManagement(management =>
{
management.AddVariableType<Person>(category: "CRM");
});
});
自定义存储提供程序
对于更高级的存储需求,通过实现 IStorageDriver
接口创建自定义存储提供程序,包含:
WriteAsync
:在变量创建或更新时调用。ReadAsync
:当访问变量时被调用。DeleteAsync
:在删除变量时操作。
以下是展示自定义存储提供程序实现的基本示例:
public class MyStorageDriver : IStorageDriver
{
public Task WriteAsync(string key, object value, CancellationToken cancellationToken = default)
{
// 实现将值写入自定义存储提供程序。
}
public Task<object?> ReadAsync(string key, CancellationToken cancellationToken = default)
{
// 实现从自定义存储提供程序读取值。
}
public Task DeleteAsync(string key, CancellationToken cancellationToken = default)
{
// 实现从自定义存储提供程序删除值。
}
}
要注册自定义存储提供程序:
Program.cs
services.AddStorageDriver<MyStorageDriver>();
自定义存储提供程序拓宽了可能性,允许在各种平台(如数据库、文件、Redis、云存储提供商等)上存储变量。
在工作流中定义变量
在编程式和设计式工作流中无缝定义变量,以满足多样的开发需求。
编程式工作流
在编程式工作流中,使用 Variable
方法定义变量。下面是使用内存存储提供程序定义变量的示例:
public class Greeter : WorkflowBase
{
public void Build(IWorkflowBuilder builder)
{
// 初始化一个名为 "Message" 的变量,默认值为 "Hello World!"。
var message = builder.WithVariable<string>("Hello World!").WithMemoryStorage();
// 将消息输出到控制台。
builder.Root = new WriteLine(context => message.Get(context));
}
}
设计式工作流
在设计式工作流中,使用“变量”面板来定义变量,如下例所示:
结论
理解和有效利用变量对于优化 Elsa
工作流的功能和效率至关重要。通过掌握变量类型、存储提供程序和定义方法,增强您的工作流过程并确保在整个 Elsa
工作流中实现强大且可靠的数据处理。