Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Lesedauer 6 Min.

Andere arbeiten lassen

Mit Elsa lässt sich komplexe Geschäftslogik einfach visualisieren und bearbeiten.
Im .NET-Umfeld hat sich in den vergangenen Jahren eine gesunde Open-Source-Community entwickelt, die durchaus interessante und sinnvolle Projekte liefert. Leider werden diese angesichts der deutlich größeren und besser vermarkteten Open-Source-Lösungen aus dem Hause Microsoft häufig zu wenig beachtet. Dieser Artikel wirft einen genauen Blick auf das Projekt Elsa Workflows [1], kurz Elsa. Elsa ist ein Framework, um Arbeitsabläufe in .NET-Projekten zu bearbeiten und auszuführen. Dabei können diese Arbeitsabläufe – oder Workflows – durch Verknüpfung von Boxen in einem webbasierten Designer erstellt werden. Jede Box erhält Eingabeparameter und gibt als Ausgabe einen oder mehrere Werte zurück. Am Ende können die Workflows beliebig groß und komplex werden. Ebenso lassen sich Arbeitsabläufe mithilfe von C#-Code erstellen.

Worum geht’s?

Beim Erweitern von Applikationen denken Entwickler häufig an Fabrikmuster oder Plug-ins – selten jedoch an die Automatisierung von Standardaufgaben über einen Workflow. Dabei ist Letzteres für Endanwender häufig wichtiger als das direkte Nutzen weiterer externer Funktionalitäten.Ein Arbeitsablauf kann im Prinzip beliebig komplex aufgebaut werden. Die Grundsteine finden sich im Regelfall in der bereitstellenden Anwendung. So können Ereignisse, die von der Software ausgelöst werden, sinnvolle Trigger darstellen. Eingabeparameter oder Ausgaben sind häufig auch stark an die Applikationsdomäne gebunden. Wer es generischer möchte, kann einen HTTP-Aktuator als Ziel eintragen. Dadurch lassen sich Dienste wie Zapier oder IFTTT zur weiteren Bearbeitung ansprechen.

Interview mit Sipke Schoorstra, Entwickler von Elsa Workflows

In der Praxis

Während Elsa in vielen Aspekten versucht, ein würdiger Nachfolger für die Workflow Foundation zu sein, so ist die allgemeine Tendenz, eine doch deutlich modernere Alternative zu repräsentieren. Das fängt bereits bei der sehr gut gestalteten, ausführlichen Dokumentation an und zieht sich über die Installation bis hin zur Konfiguration und Verwendung. Wie in Bild 1 dargestellt, ist über die Homepage des Projekts ohne große Umwege weiteres Lernmaterial zu erreichen.
Die Homepage von Elsamacht es dem Besucher einfach, an ­Informationen zu kommen(Bild 1) © Autor
Es gibt zwei Modelle, um die Arbeitspläne auszuführen:
  • In-process: Arbeitspläne werden innerhalb der Anwendung angestoßen und ausgeführt.
  • Out-of-process: Hier werden die Arbeitspläne in einem externen Prozess verwaltet, der Interaktionen über HTTP und AMQP zulässt. Somit kann jede beliebige Applikation die Workflow-Engine von Elsa verwenden – und zwar unabhängig vom benutzten Technologie-Stack. Dies erlaubt auch Zugriff von Skriptsprachen wie etwa PHP oder Ruby.
Elsa versteht sich hierbei als generische Workflow-Engine. Im Regelfall wird das Framework innerhalb einer ASP.NET-Anwendung (Core) eingebunden. In diesem Fall kann man bereits in den grundlegenden Diensten die Basis für Dependency Injection legen. Listing 1 zeigt die Integration von Elsa in einer ASP.NET-Core-Applikation.
Listing 1: Integration von Elsa in ASP.NET Core
public void ConfigureServices(
  IServiceCollection services) 
{ 
  services 
    .AddElsa() 
    .AddTimerActivities(); 
} 
Zusätzlich ist es noch möglich, Elsa an dieser Stelle ausführlich zu konfigurieren. Zunächst sollte dafür das NuGet-Paket Elsa eingerichtet werden. Experten können anstelle der kombinierten Abhängigkeit auch mit Elsa.Core starten. Hierbei handelt es sich um Kernfunktionalitäten mit der geringsten Anzahl an Abhängigkeiten. Erweiterungen und Vorkonfigurationen wie zum Beispiel die Möglichkeit, AddTimer­Activities() zu konfigurieren, sind hier noch nicht enthalten.Die Arbeitspläne selbst sind vollständig serialisierbar. Dies führt dazu, dass diese nicht nur in C# erstellt werden, sondern auch aus JSON-, XML- und anderen Dateien importiert werden können. Auch das Speichern auf der Festplatte oder in einer Datenbank ist problemlos möglich.Für ein direktes und unaufwendiges Bereitstellen von Workflows genügt es, das IWorkflow-Interface zu implementieren. In der Build()-Methode lässt sich daraufhin der Workflow über das Fluent-API eines IWorkflow-Objekts erstellen. In Listing 2 wird darüber ein wiederkehrender Workflow erzeugt, der alle fünf Sekunden angestoßen wird. Über Java­ScriptExpression ist es möglich, einen String zur Laufzeit dynamisch auszuwerten. Hier kann durchaus auch komplexere Logik verwendet werden.
Listing 2: Definition eines wiederkehrenden Workflows
public class RecurringTaskWorkflow : IWorkflow 
{ 
  public void Build(IWorkflowBuilder builder) 
  { 
    builder 
      .AsSingleton() 
      .StartWith<TimerEvent>(x =>
      x.TimeoutExpression = new
      LiteralExpression<TimeSpan>("00:00:05")) 
      .Then<WriteLine>(x => x.TextExpression = 
      new JavaScriptExpression<string>(
      "'It’s now ${new Date()}. "
      + "Let’s do this thing!'")); 
  } 
}  
Um zeitgesteuerte Aktivitäten zu ermöglichen, muss vorab der entsprechende Service hinzugefügt werden. In Listing 1 wurde der hierzu notwendige Code bereits eingefügt.Der visuelle Designer wird über das NuGet-Paket Elsa.Dashboard zur Verfügung gestellt. Seine Installation ist genauso einfach wie bei Elsa selbst. Über die Erweiterungsmethode Add­ElsaDashboard() lassen sich die notwendigen Dienste konfigurieren. Zur optimalen Anzeige sollten statische Dateien vom ASP.NET-Core-Server ausgespielt werden. In Bild 2 ist die Standardansicht des Workflow-Editors dargestellt.
Erstelleneines Workflowsmit Elsas visuellem Designer(Bild 2) © Autor
Besonders beeindruckend ist die direkt nach der Installa­tion vorhandene Auswahl von Szenarien, Auslösern und Optionen. Das Framework erfüllt so ziemlich alle Wünsche bereits ohne irgendwelche weiteren Konfigurationen oder Installationen. Man kann also direkt loslegen, ohne viel Zeit mit der grundlegenden Integration und Bereitstellung verbringen zu müssen.

„So ziemlich jedes Backend-System könntevon so etwas profitieren“

<span class="zitat-autor-name">Sipke Schoorstra: </span><br/>Ich erinnere mich immer noch lebhaft an meinen ersten Computer, den ich an Weihnachten bekommen habe: ein Nintendo Entertainment System. Beigefügt waren ­jede Menge Spiele, unter anderem Mario Bros, Zelda und The Battle of Olympus. Da wusste ich bereits, was ich mal werden will: Game Designer.

Einen Beitrag leisten

Im Vergleich zu den häufiger anzutreffenden MIT-lizenzierten Projekten ist Elsa aufgrund der gewählten BSD-3-Variante ein wenig restriktiver. Im Regelfall hat dies jedoch kaum spürbare Auswirkungen. So ließen sich mittlerweile an die 18 unterschiedliche Mitwirkende zu einem Pull Request (PR) hinreißen. Auch Bug Reports oder spezielle Feature Requests sind gerne gesehen. Um einen PR zu erstellen, sollte man sich zunächst mit dem Prozess vertraut machen.Hier wird auf den recht gebräuchlichen GitHub-Flow gesetzt. Im Unterschied zum Git-Flow zeichnet sich dieser durch sehr häufige Releases und möglichst geringen Overhead aus. Im Fall von Elsa startet die Entwicklung immer im Develop-Branch. Dieser sollte auch als Ziel für mögliche PRs verwendet werden.Wie die meisten Open-Source-Projekte setzt auch Elsa Workflow eine Zusammenarbeit primär über die in den GitHub-Issues geführten Diskussionen voraus. Zwar können PRs ohne vorangehende Diskussion durchaus akzeptiert werden, vor allem bei größeren Änderungen sinkt so aber die schnelle Erfolgsaussicht rapide.

Einschätzung

Mit Elsa gibt es eine wahrlich grandiose Möglichkeit, die Fähigkeiten der Workflow Foundation in .NET-Core-Applika­tionen wiederaufleben zu lassen. Dank des webbasierten ­visuellen Designers und der verschiedenen Bereitstellungsmöglichkeiten können Anwendungen sehr einfach von Endanwendern erweitert werden.Populäre Projekte wie Orchard profitieren bereits von der Integration einer Workflow-Engine, wie auch Elsa-Autor Sipke Schoorstra im Interview erläutert (siehe Kasten). Sein Ziel, mit dem Framework jedem Entwickler solche Möglichkeiten zur Verfügung zu stellen, scheint meiner Meinung nach nicht nur nah, sondern bereits weitestgehend erfüllt zu sein.

Fussnoten

  1. Elsa Workflows,
  2. Klik & Play,
  3. Workflow Engine, https://workflowengine.io
  4. Orchard Core, https://orchardcore.net/

Neueste Beiträge

Arbeiten mit Tabellen und KI in Dataverse
Microsoft unterstützt die zentrale Datenmanagement-Lösung Dataverse in Power Apps mit KI-Features.
7 Minuten
6. Aug 2025
Browser-Apps mit Avalonia entwickeln - Avalonia
Klassische UI-Frameworks finden ihren Weg in den Browser
7 Minuten
11. Aug 2025
Dokumente in MongoDB speichern
Der GridFS-Speicher als Fundament für KI-gestützte .NET-Anwendungen
6 Minuten
13. Aug 2025
Miscellaneous

Das könnte Dich auch interessieren

Sicher ist sicher - Azure DevOps Pipelines Security
Als integraler Bestandteil der Entwicklungsumgebung ist Azure DevOps Pipelines oft Ziel von Angriffen. Da ist es gut zu wissen, wo die Schwachstellen des Systems liegen.
14 Minuten
16. Jun 2025
CodeProject.AI Server in neuer Version - Lokaler AI-Server
CodeProject.AI Server (jetzt in Version 2.1.10) ist ein lokal installierter, selbstgehosteter, schneller, kostenloser und Open Source Artificial Intelligence Server für jede Plattform und jede Sprache.
2 Minuten
Für Einsteiger: Backend-Webentwicklung mit .NET - Microsoft
Auf YouTube bietet Microsoft eine Videoserie für Einsteiger in die Backend-Webentwicklung mit .NET.
2 Minuten
13. Feb 2024
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige