Giter Site home page Giter Site logo

elsa-workflows / elsa-core Goto Github PK

View Code? Open in Web Editor NEW
5.8K 5.8K 1.0K 82.74 MB

A .NET workflows library

Home Page: https://v3.elsaworkflows.io/

License: MIT License

C# 96.08% HTML 0.14% Dockerfile 0.12% PowerShell 0.07% Shell 0.15% Java 3.33% ANTLR 0.11% Batchfile 0.01%
csharp dotnet elsa workflows

elsa-core's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

elsa-core's Issues

Correlation

When resuming workflows, only workflow instances matching a given correlation ID should be resumed.

Join action activity

The Join activity is the counterpart of the Fork activity and has two modes:

  1. WaitAll
  2. WaitAny

WaitAll
With this mode, the activity executes only after all of the incoming activities have executed.

WaitAny
With this mode, the activity executes as soon as one incoming activity has executed.

Running the designer

Any advise please on how to build and run the Elsa Workflows Dashboard? I followed the instructions on readme and no luck, Is it supposed to run out of the box?

Implement Activity Outputs

Currently, activity drivers can set the LastResult variable on the workflow, but we need each activity to maintain its output (if any) so that other activities can read these outputs (using workflow expressions). This requires each activity to be addressable from a workflow expression. This could be done by referencing an activity's ID value, and/or by allowing a user to provide an alias for a given activity and use that.

Add support for "singleton" workflows

A singleton workflow is a workflow that has only one running instance of a given workflow definition at a time.

This is useful for example for workflows starting with a Cron trigger. Right now, a new workflow instance is created on every background sweep. If the sweep happens e.g. every 10 seconds, and the cron trigger is configured to trigger at every 1 minute, 6 workflow instances will be created, and all execute at the same time.

Better would be to mark such a workflow as a "singleton", so that only one instance of that definition exists at a time.

ForEach action activity

The ForEach activity should have the following properties:

  • An expression that evaluates to a list of items to iterate over.
  • A loop variable name
  • The current item
  • The current index

There should be two endpoints:

  • Iterate
  • Done

BPMN support?

I'm not sure if Elsa supports all necessary functions, but have you ever thought about supporting BPMN Models?
BPMN Models are simple XML Files...

I think this could be a huge benefit because of interportibility!
Using an existing BPMN Model( which for example currently runs in Camunda), change a few Parameters, and run this Model in Elsa would be amazing!

Do you think thats possible?

Currently i'm not sure where to start for trying to implement an "Elsa BPMN Parser"...
I will try to find out, how, or if this can be done with Elsa.

If you can give me any directions this would be great!

User Task Activity

User Task activity is a blocking activity (a trigger somewhere in your workflow). This means that in order for the workflow to continue, it needs to be resumed with a given action (one of the actions defined on the User Action itself). To resume such a workflow, your application will have to be able to query the workflow and the defined User Actions (associated with the User Action activity), so that your application can e.g. display these actions as buttons the user can click.

Here's a demonstration of how that works in Orchard: https://www.youtube.com/watch?v=iioKQkXUwXA

Dashboard Menu

The dashboard's menu items should reflect the selected menu item. Currently "Dashboard" is always selected.

While Activity

The While activity should have two endpoints:

  1. Loop
  2. Done

It has a single property called ConditionExpression of type WorkflowExpression<bool>. As long as the condition evaluates to true, the Loop endpoint is triggered. Otherwise, Done is triggered.

Add Execution Log view

Currently when viewing a workflow instance via the dashboard, the workflow shows which activities have executed, are blocking and have faulted. In addition, we need a separate view (tabbed?) that shows a complete log of the workflow's execution (essentially rendering its ExecutionLog to a list of strings).

Update license terms

That's a good start. Kindly add license terms.

There are lot of open source workflow engines in Java but only handful in .NET that is open source on .NET Core. Slickflow is there but do not see active movement.

Update Dashboard Options to define activities from c#

Right now the Dashboard options only supports including JavaScript paths to be included when the page renders (where the javascripts themselves would implement Designer plugins to add activities to the activity picker).

But instead of having to write these plugins, a ASP.NET Core developer implementing a workflow dashboard should be able to use C# to declare these activities. The dashboard only needs to translate these to JSON for the workflow designer component to pick up.

In addition, there should be a fluent API to easily define activities.

Open API Activity Harvester

The TypedActivityHarvester harvests available activities based on C# classes that implement IActivity. Similarly, there should be a OpenApiActivityHarvester that yields activities based on one or more Open API specifications. This makes it easy to integrate with any API exposing an Open API specification, without having to manually craft HTTP requests using the lower level HttpRequestAction activity.

Note: this issue depends on another feature that allows for dynamic UI generation of the activity editor.

Abstract away WorkflowExpression for cleaner workflow definitions by code

Currently, activities leverage workflow expressions to evaluate dynamic values at runtime. This is used to for example get input values, variables and activity output values using JavaScript (and Liquid in a future update).

However, since many expressions are about simply getting certain values, both the coding and workflow designing experience could be improved by introducing a lower-level concept called e.g. WorkflowValue.

A WorkflowExpression would derive from WorkfowValue, but there would now also be classes such as VariableValue, ActivityOutputValue, WorkflowInputValue etc.

I think it would be more intuitive to use these types than having to write JavaScript expressions.

Activity Property Editor

Currently, activity developers need to also separately implement a display driver in order to allow users to edit the activity's properties. This allows for a lot of freedom, which makes sense for more advanced activities. But many activities only have a handful of relatively simple properties that a user can configure. Therefore it will improve the developer experience if all they have to do is define the custom activity class without having to implement a web-based counterpart (the display driver).

The Property Editor should not be driven by reflecting on activities directly. Instead, we need one level of indirection, where the Property Editor receives its information from an abstraction, e.g. IActivityFormProvider. For starters, we would first have a ReflectionActivityFormProvider that uses reflection and annotations to build the object property graph. Later on, we would have additional providers such as an OpenApiActivityFormProvider (see also #20 ).

Cron Tab Activity

Cron Tab Activity allows the user to specify a CRON expression. When this is the starting activity of a workflow, that workflow will be executed every time the cron expression matches the current time. If this is a halting activity (i.e. not the starting activity), the workflow is resumed at the time the cron expression matches the current time.

SQL Store

In addition to the in-memory and file system stores, we need a SQL database store implementation.

Separate Workflow Instance Store from Workflow Definition Store

Currently both workflow definitions and workflow instances are stored in the same store. However we need to separate the two to enable scenarios where for example workflow definitions are stored in YAML files (so they can be source-controlled), while instances are stored in high-performance databases.

Dashboard using Orchard Framework

The Dashboard area is currently not extensible, but making it so would allow for some seriously cool scenarios. For example, someone could implement application specific functionality to manage data that the workflows should work with. Or perhaps some general purpose Forms module allowing an admin to define workflow driven forms.

Many of these things work today in Orchard Core, and we should take advantage of that.

One option could be to build the dashboard as Orchard Core modules.

Another option could be to create the Dashboard as a custom theme, taking full control over the look and feel, while still benefitting from the modular framework.

Fork action activity

The fork activity is the counterpart of the Join activity allows the user to enter N endpoints in the activity editor. For example, the following value:

Branch 1, Branch 2

Would render 2 endpoints on the activity: Branch 1 and Branch 2.
When the Fork activity executes, all of its endpoints should be triggered.

Upgrade workflow process

I'm new to Elsa, and it's not clear how to update existing workflow process? In Windows WF it is possible to update old workflow process or execute side-by-side different versions. Is any of them supported by Elsa?

Enhance HTTP Request trigger activity with SAS

The existing HTTP Request Trigger activity needs to be enhanced so that it allows users to have it generate a SAS token. The workflow will then only be triggered if the provided SAS token is valid. This prevents the workflow from being invoked by anyone other than those who have the full URL (including the SAS token appended as a querystring).

Email action activity

The Email activity allows user to specify a subject, list of recipients, and a message body. When executed, the activity will send an email. The SMTP host is expected to be configured via .NET Core's Configuration API (IConfiguration).

Service Bus activities

We need a set of activities that can send/publish messages to a service bus and receive messages from a service bus. Ideally, the service bus support is abstracted away so that we can implement providers for Azure Service Bus, RabbitMQ and others. I don't want to use MassTransit for this, because that relies on strongly-typed message classes. Instead, this feature should allow the user to send arbitrary payloads with message names, and be able to consume those message from the same or other workflows.

HTTP Response action activity

The HTTP Response activity allows the user to write content back to the response stream. This should include a status code, headers and the body.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.