ASOU Readme
ASOU is acronym for Another yet Service Orchestration Utility.
Introducing our open source project called ASOU, the BPMN Flow Management Tool. ASOU is designed to help developers focus on writing individual steps for their applications, rather than spending time and effort coding all step transitions, persistence, fault tolerance, etc. Our tool takes care of these difficult tasks for the developer, providing an easy-to-use and intuitive interface for managing BPMN flows. By using this tool, developers can improve code maintenance and decrease code complexity, allowing them to focus on creating high-quality and reliable applications.
This project is open-source and available for anyone to use and contribute to, we are looking forward to contributions from community.
By using this tool, developers can create applications that are more maintainable, more reliable, and easier to update, which will ultimately lead to better user experiences.
Engine
One of the unique features of this project is its switchable engine, which allows developers to choose between different engines to suit their specific needs. For simple processes, we offer a fast graph-based engine that can be described directly in the developer's code. This means that the developer doesn't need to deal with BPMN process description storage and other complexities.
For more difficult and often-changing processes, we offer a fully-featured BPMN engine with a visual process editor. This allows developers to create, test, and manage complex BPMN processes with ease.
The basics of process
Business Process Model and Notation (BPMN) is a visual language for describing business processes. It is a standardized notation that is used to model and analyze business processes in a graphical way. The BPMN flow is the sequence of activities that are performed in a business process, and how they are connected to each other. These activities can include things like tasks that need to be completed, decisions that need to be made, and events that occur.
Quick start
Describe your process
public class SampleProcessDefinition : IProcessDefinition
{
public Guid Id => new("c380b7f4-2a76-44fc-9d5d-ecc7c105969b");
public Guid VersionId => new("2a8038b9-921e-4aaa-a72d-f85d6ff512e8");
public int Version => 1;
public string Name => "SampleProcess";
public void Describe(GraphProcessContract builder)
{
builder.StartFrom<DoSimpleStep>()
.WithParameter<DoSimpleStep, string>("Parameter1",
instance => (string)instance.ProcessRuntime.Parameters["Parameter1"]!,
(instance, value) => instance.ProcessRuntime.Parameters["Parameter1"] = value)
.WithParameter<DoSimpleStep, string>("Parameter2",
setter: (instance, value) => instance.ProcessRuntime.Parameters["Parameter2"] = value)
.Then<AsynchronousResumeStep>()
.Then<ConditionalStep>();
builder.Conditional<ConditionalStep, EndStep>("ToExit");
builder.Conditional<ConditionalStep, DoSimpleStep>("TryAgain");
}
}
Execute
app.MapPost("/", async (ProcessExecutionEngine processExecutionEngine, CancellationToken cancellationToken) =>
{
var timer = Stopwatch.StartNew();
var result = await processExecutionEngine.ExecuteAsync(new Guid("c380b7f4-2a76-44fc-9d5d-ecc7c105969b"),
new ProcessParameters { { "Parameter1", "Hello World" }, { "Parameter2", "" } }, cancellationToken);
timer.Stop();
result["ElapsedMilliseconds"] = timer.ElapsedMilliseconds;
return result;
});
How it works
Process instance creation
classDiagram
ProcessExecutionEngine --|> IProcessExecutionDriver
IProcessExecutionDriver --|> IProcessFactory
IProcessFactory --|> IProcessRuntime
IProcessFactory --|> ProcessInstance
class IProcessRuntime {
}
class IProcessFactory {
}
class ProcessInstance {
}
class ProcessExecutionEngine {
}
class IProcessExecutionDriver {
}
And all together
Contribution
Our open source project is maintained by a small team of developers, but we are always looking for new members to join us and help improve the project. There are many ways to contribute to the project, including:
- Reporting bugs and providing feedback on the tool
- Submitting bug fixes or feature enhancements
- Writing documentation or tutorials
- Helping to answer questions from other users on our community forums
- Spread the word about the project and help to increase its visibility
To communicate with the team, you can open an issue in our GitHub repository. The team will review it and respond to it as soon as possible.
We welcome contributions of all kinds, whether you are an experienced developer or just getting started. We believe that everyone has something valuable to contribute, and we are always happy to work with new contributors to help them get started and make their first contributions. If you have any questions or need help getting started, please don't hesitate to reach out to us. We are excited to see what you can bring to the project!
Current state of project
Please note that this project is currently under active development and is not yet ready for production use. While we are working hard to make it stable and functional, there may be bugs and unfinished features. There are currently no releases available and the codebase is subject to change.
Features / milestones
- Conditional transitions
- Parameter binding
- Event subsystem and asynchronous resume support
- Process execution and data persistence on restart or failure
- BPMN flow designer
- BPMN engine. Extend Graph base engine to export BPMN flow to graph contract.
- ContextCall bindings
If you are interested in testing out the project or would like to contribute, we welcome you to do so by checking out our development branch. We appreciate your patience as we work to improve and stabilize the project.
CI/CD
Section WIP.
Change Log
All changes described in CHANGELOG.md
Guarantee and Security
This project is not covered by the security advisory policy. Use at your own risk.
License
License described in LICENSE.md