Find a file
Sipke Schoorstra fb2f0f0271
Update InputJsonConverter to deserialize complex value types into their original type (#4878)
* Remove unused using directives in test classes

The using directives for System, System.Collections.Generic, System.IO, and others were not necessary in many of the test classes. These unused directives have been removed to enhance code readability and maintainability.

* Update source port retrieval in ConnectionJsonConverter

The source port retrieval code in ConnectionJsonConverter.cs has been updated. It now uses TryGetProperty instead of GetProperty, enabling it to handle cases where the "port" property may not exist. This enhances error handling and resilience in the activities module.

* Refactor InputJsonConverter for proper variable expressions handling

The InputJsonConverter in the Elsa.Workflows.Serialization has been expanded for efficient handling of variable expressions during the JSON conversion process. The refactor ensures appropriate extraction and assignment of values to variables. This adds robustness to the serialization process, maintaining variable types after serialization.

* Add tests for variable expressions serialization

A new `Tests.cs` file has been added under the `Elsa.IntegrationTests/Serialization/VariableExpressions` directory. This file contains tests for ensuring the serialization of variable expressions works correctly. A corresponding `SampleWorkflow` file has also been established, providing the workflows to be used in the tests.

* Refactor workflow builder extension class

The WorkflowDefinitionBuilderExtensions class has been deleted and replaced with WorkflowBuilderExtensions in Elsa.Workflows.Core. This new class retains similar functionality but includes more detailed comments and dynamic member access capabilities in its method definition.
2024-02-05 21:39:49 +01:00
.github/workflows Convert to use Central Package Management 2024-02-04 13:49:54 +02:00
.nuke Add NUKE build support (#4815) 2024-01-21 10:53:07 +01:00
build Convert to use Central Package Management 2024-02-04 13:49:54 +02:00
design Update artwork 2023-12-25 12:27:07 +01:00
docker Add Docker build script for Elsa Studio 2023-12-27 22:15:57 +01:00
gen Update DSL and sample 2022-03-28 13:25:45 +02:00
migrations Remove migration files for Management module 2024-02-04 01:24:03 +01:00
samples Make workflow runtime methods accept nullable options 2024-02-04 22:15:02 +01:00
src Update InputJsonConverter to deserialize complex value types into their original type (#4878) 2024-02-05 21:39:49 +01:00
test Update InputJsonConverter to deserialize complex value types into their original type (#4878) 2024-02-05 21:39:49 +01:00
.editorconfig Merge scope change into main (#4738) 2024-01-02 14:52:53 +01:00
.gitignore Add NUKE build support (#4815) 2024-01-21 10:53:07 +01:00
build-and-run-all-in-one-web-docker.sh Update AllInOne dockerfile 2023-12-04 14:25:34 +01:00
build.cmd Add NUKE build support (#4815) 2024-01-21 10:53:07 +01:00
build.ps1 Add NUKE build support (#4815) 2024-01-21 10:53:07 +01:00
build.sh Add NUKE build support (#4815) 2024-01-21 10:53:07 +01:00
CONTRIBUTING.md Create CONTRIBUTING.md 2024-01-03 16:22:03 +01:00
Directory.Build.props replace configureawait.props and frameworks.props with Directory.Build.props 2024-01-26 19:04:39 +02:00
Directory.Packages.props Convert to use Central Package Management 2024-02-04 13:49:54 +02:00
docker-compose.yml Support sub-workflow dependency handling of JSON workflows (#4098) 2023-06-03 12:28:10 +02:00
docker-run-all-in-one-web.ps1 Add samples and docker support 2022-04-29 14:40:25 +02:00
Elsa.sln Update InputJsonConverter to deserialize complex value types into their original type (#4878) 2024-02-05 21:39:49 +01:00
Elsa.sln.DotSettings Implement Zstd compression and update related components 2024-02-04 12:18:55 +01:00
generate-migrations-initial copy.sh Add compression feature for workflow state data 2024-02-03 22:24:46 +01:00
icon.png Debug 2022-12-20 12:47:41 +01:00
LICENSE Add sources from experimental repo 2022-01-04 09:42:12 +01:00
NuGet.Config Convert to use Central Package Management 2024-02-04 13:49:54 +02:00
README.md Update artwork 2023-12-25 12:27:07 +01:00

ELSA 3.0

Elsa Workflows

Elsa 3 Prerelease Nuget (with prereleases) feedz.io npm feedz.io Docker Image Version (latest semver) Discord Stack Overflow questions Subreddit subscribers

For Elsa 2 Click Here

Introduction

Elsa is a powerful workflow library that enables workflow execution within any .NET application. Elsa allows you to define workflows in various ways, including:

  • Writing C# code
  • Using a visual designer
  • Specifying workflows in JSON

Elsa ships with a powerful visual designer

Try with Docker

To give the Elsa Studio + Elsa Server a quick spin, you can run the following command to start the Elsa Docker container:

docker pull elsaworkflows/elsa-v3:latest
docker run -t -i -e ASPNETCORE_ENVIRONMENT='Development' -e HTTP_PORTS=8080 -p 13000:8080 elsaworkflows/elsa-v3:latest

This Docker image is based on a reference ASP.NET application that hosts both the workflow server and designer and is not intended for production use.

By default, you can access http://localhost:13000 and log in with:

  Username: admin
  Password: password

Table of Contents

Documentation

For comprehensive documentation and to get started with Elsa, please visit the Elsa Documentation Website.

Known Issues and Limitations

Elsa is continually evolving, and while it offers powerful capabilities, there are some known limitations and ongoing work:

  • Documentation is still a work in progress.
  • The designer is not yet fully embeddable in other applications; this feature is planned for a future release.
  • C# and Python expressions are not yet fully tested.
  • Bulk Dispatch Workflows is a new activity and not yet fully tested.
  • Input/Output is not yet implemented in the Workflow Instance Viewer.
  • Starting workflows from the designer is currently supported only for workflows that do not require input and do not start with a trigger; this is planned for a future release.
  • The designer currently only supports Flowchart activities. Support for Sequence and StateMachine activities is planned for a future release.
  • UI input validation is not yet implemented.

Features

Elsa offers a wide range of features for building and executing workflows, including:

  • Execution of workflows in any .NET application with support for .NET 6 and beyond.
  • Support for both short-running and long-running workflows.
  • A programming model loosely inspired by Windows Workflow Foundation.
  • A web-based drag & drop designer with support for custom activities.
  • Native support for activity composition, including activities like Sequence, Flowchart, and ForEach.
  • Parallel execution of activities.
  • Built-in activities for common scenarios, such as sending emails, making HTTP calls, scheduling tasks, sending and receiving messages, and more.
  • Workflow versioning and migration via API.
  • Easy integration with external applications via HTTP, message queues, and more.
  • Actor model for increased workflow throughput.
  • Dynamic expressions with support for C#, JavaScript, Python, and Liquid.
  • Persistence agnostic, with support for Entity Framework Core, MongoDB, and Dapper out of the box.
  • Elsa Studio: a modular Blazor dashboard app for managing and designing workflows.

Roadmap

The following features are planned for future releases of Elsa:

  • Multi-tenancy
  • State Machine activity
  • Designer support for Sequence activity & StateMachine activity
  • BPMN 2.0 support
  • DMN support
  • Workflow migration to new versions via UI
  • Capsules ("hot" deployable workflow packages containing activities and configuration)

Use Cases

Elsa can be used in a variety of scenarios, including:

  • Long-running workflows such as order fulfillment and product approval.
  • Short-running workflows such as sending emails and generating PDFs.
  • Scheduled workflows such as sending daily reports.
  • Event-driven workflows such as sending welcome emails when a user signs up.

Programmatic Workflows

Elsa allows you to define workflows in code using C#. The following example shows how to receive HTTP requests and send an email in response:

public class SendEmailWorkflow : WorkflowBase
{
    protected override void Build(IWorkflowBuilder builder)
    {
        builder.Root = new Sequence
        {
            Activities =
            {
                new HttpEndpoint
                {
                    Path = new("/send-email"),
                    SupportedMethods = new(new[] { HttpMethods.Post }),
                    CanStartWorkflow = true
                },
                new SendEmail
                {
                    From = new("alic@acme.com"),
                    To = new(new[]{ "bob@acme.com" }),
                    Subject = new("Your workflow has been triggered!"),
                    Body = new("Hello!")
                }
            }
        };
    }
}

Designed Workflows

Elsa allows you to define workflows using a visual designer. The following example shows how to receive HTTP requests and send an email in response:

Elsa ships with a powerful visual designer