Elsa is a workflows library that enables workflow execution in any .NET application. Workflows can be defined in a variety of ways:
- Using C# code
- Using a designer
- Using JSON
- Using a custom DSL
Please checkout the documentation website to get started.
Here are some of the more important features offered by Elsa:
- Execute workflows in any .NET app.
- Supports both short-running and long-running workflows.
- Programming model loosely inspired on WF4 (composable activities).
- Support for complex activities such as Sequence, Flowchart and custom composite activities (which are like mini-workflows that can be used as activities).
- Ships with a workflows designer web component (currently supports Flowchart diagrams only).
The following is a simple Hello World workflow created as a console application. The workflow is created using C#.
using Elsa.Extensions;
using Elsa.Workflows.Core.Activities;
using Elsa.Workflows.Core.Services;
using Microsoft.Extensions.DependencyInjection;
// Setup service container.
var services = new ServiceCollection();
// Add Elsa services.
services.AddElsa();
// Build service container.
var serviceProvider = services.BuildServiceProvider();
// Create a workflow.
var workflow = new WriteLine("Hello World!");
// Resolve a workflow runner to run the workflow.
var workflowRunner = serviceProvider.GetRequiredService<IWorkflowRunner>();
// Run the workflow.
await workflowRunner.RunAsync(workflow);
Outputs:
Hello World!
To build workflows that execute more than one step, choose an activity that can do so. For example, the Sequence
activity lets us add multiple activities to execute in sequence (plumbing code left out for brevity):
// Create a workflow.
var workflow = new Sequence
{
Activities =
{
new WriteLine("Hello World!"),
new WriteLine("Goodbye cruel world...")
}
};
Outputs:
Hello World!
Goodbye cruel world...
The following demonstrates a workflow where it asks the user to enter their age, and based on this, offers a beer or a soda:
// Declare a workflow variable for use in the workflow.
var ageVariable = new Variable<string>();
// Declare a workflow.
var workflow = new Sequence
{
// Register the variable.
Variables = { ageVariable },
// Setup the sequence of activities to run.
Activities =
{
new WriteLine("Please tell me your age:"),
new ReadLine(ageVariable), // Stores user input into the provided variable.,
new If
{
// If aged 18 or up, beer is provided, soda otherwise.
Condition = new Input<bool>(context => ageVariable.Get<int>(context) < 18),
Then = new WriteLine("Enjoy your soda!"),
Else = new WriteLine("Enjoy your beer!")
},
new WriteLine("Come again!")
}
};
Notice that:
- To capture activity output, a workflow variable (ageVariable) is used.
- Depending on the result of the condition of the
If
activity, either theThen
or theElse
activity is executed. - After the If activity completes, the final WriteLine activity is executed.