# Att bygga ett arbetsflödessystem med HTMX och ASP.NET Core - Del 1: Introduktion

<!--category-- ASP.NET, HTMX, Alpine.js, Workflow -->
<datetime class="hidden">2025-01-15T12:00</datetime>

## Inledning

Arbetsflödessystem finns överallt i moderna applikationer - från enkla godkännandeprocesser till komplexa flerstegsautomatiseringar.

Även om det finns utmärkta kommersiella lösningar som Temporal, Airflow, och n8n, ibland behöver du något skräddarsytt för dina specifika behov.

- I den här serien går jag igenom ett komplett arbetsflödessystem från grunden med hjälp av ASP.NET Core, HTMX, Alpine.js och Hangfire.
- I slutet av denna serie har du ett fullt fungerande arbetsflödessystem med:
- En visuell nodbaserad editor för att bygga arbetsflöden
- JSON-definierade arbetsflöden noder med ingångar, utgångar och villkor
- En egen exekveringsmotor för arbetsflöden
- Bakgrund jobbhantering med Hangfire för röstning fjärr API:er

[TOC]

## Statlig förvaltning och ihållande verksamhet

En instrumentpanel för övervakning av arbetsflödets utförande

**Varför bygga ditt eget arbetsflödessystem?**

- Innan du dyker in, låt oss tala till elefanten i rummet: varför inte använda en befintlig lösning?
- När du ska bygga ditt eget:
- Du behöver djup integration med din befintliga applikation
- Du har specifik affärslogik som inte passar in i generiska arbetsflödesverktyg
- Du vill ha full kontroll över exekveringsmodell och skalning

**Du måste minimera externa beroenden**

- Du vill lära dig hur arbetsflödessystem fungerar under huven
- När du ska använda befintliga verktyg:
- Du behöver en beprövad, stridsprövad lösning omedelbart

Du behöver funktioner som distribuerad körning över många maskiner

## Du har inte tid att bygga och underhålla anpassad infrastruktur

För denna serie väljer vi att bygga våra egna eftersom det ger oss fullständig flexibilitet och är en utmärkt inlärningsmöjlighet.

### Vad vi bygger

Vårt arbetsflödessystem kommer att stödja flera nyckelkoncept:

- **1. Vad är det som händer?**Noder
- **Noder är byggstenarna i arbetsflöden.**Varje nod representerar en diskret åtgärd eller beslutspunkt.
- **Exempel:**HTTP- begärans nod
- **: Ringer API-samtal till externa tjänster**Villkorsnod
- **: Utvärderar uttryck och filialer verkställande**Förvandla nod

### : Processdata (JSON-manipulering, filtrering osv.)

Försenad nod

### : Väntar på en viss tid

Utlösande nod

- : Startar ett arbetsflöde baserat på händelser eller scheman
- Två.
- Arbetsflöden
- Ett arbetsflöde är en riktad graf av anslutna noder.
- Data flödar från en nod till en annan genom anslutningar, med varje nod bearbetning och omvandla data vid behov.

### 3. Vad är det som händer?

Körningsgränssnitt

- Den motor som tolkar arbetsflödesdefinitionen och utför noder i rätt ordning, hanterar:
- Sekventiellt genomförande
- Parallellt utförande (när noder inte beror på varandra)
- Villkorlig förgrening
- Felhantering och retries

### Tillståndets varaktighet

Fyra.

- Visuell editorName
- Ett webbaserat användargränssnitt där användare kan:
- Dra och släpp noder på en duk
- Anslut noder genom att rita kanter mellan dem

## Anpassa nodegenskaper

Testarbetsflöden

### Visa körhistorik

- **För att uppnå detta mål har kommissionen beslutat att inleda ett förfarande enligt artikel 108.2 i fördraget om Europeiska unionens funktionssätt (nedan kallat EUF-fördraget).**Bakgrundsbehandling
- **Med hjälp av Hangfire, ska vi genomföra:**Schemalagd körning av arbetsflöden
- **API-röstning för externa data**Försök igen logik för misslyckade avrättningar
- **Dashboard för övervakning av arbetstillfällen**Teknologi Stack
- **Här är vad vi kommer att använda:**Bakgrundsprogram

### ASP.NET Kärna 9,0

- **: Vårt webbramverk**Entitetsramar
- **: För datavaraktighet**PostgreSQL
- **: Databas för lagring av arbetsflödesdefinitioner och utförandetillstånd**Hangfire
- **: Bakgrund jobbhantering**System.Text.Json

### : För arbetsflöde JSON serialisering

- **Gränssnitt**HTMX 2,0
- **: För dynamiska, serverdrivna uppdateringar av användargränssnittet utan att skriva JavaScript**Alpina.js
- **: Lätt JavaScript-ramverk för interaktiva komponenter**TailwindCSS + DaisyUI

## : Styling och UI komponenter

Ledarlinjen

```
Mostlylucid.Workflow/
├── Mostlylucid.Workflow.Engine/      # Core workflow execution engine
│   ├── Models/                        # Node, Workflow, Connection models
│   ├── Execution/                     # Workflow executor and runtime
│   └── Nodes/                         # Built-in node implementations
├── Mostlylucid.Workflow.Shared/       # Shared models and DTOs
├── Mostlylucid.Workflow.DbContext/    # Entity Framework context
└── Mostlylucid/                       # Main web app (existing)
    ├── Controllers/WorkflowController.cs
    ├── Services/WorkflowService.cs
    └── Views/Workflow/                # Workflow UI views
```

### : För ritning anslutningar mellan noder (vi ska undersöka alternativ)

**Infrastruktur**
Docka

```json
{
  "id": "node-1",
  "type": "HttpRequest",
  "name": "Fetch User Data",
  "inputs": {
    "url": "https://api.example.com/users/{{userId}}",
    "method": "GET",
    "headers": {
      "Authorization": "Bearer {{apiToken}}"
    }
  },
  "outputs": {
    "response": "{{result.body}}",
    "statusCode": "{{result.statusCode}}"
  },
  "conditions": {
    "onSuccess": "next-node-id",
    "onError": "error-handler-node-id"
  }
}
```

**: För containertillverkning**
Seq Ordförande

- : För strukturerad loggning
- Prometheus + Grafana
- : För övervakning

**Översikt över arkitekturen**
Vårt system kommer att organiseras i flera projekt:

- Viktiga beslut om utformning
- 1. Vad är det som händer?
- JSON-baserade noddefinitioner
- Noder kommer att definieras i JSON, vilket gör dem lätta att serialisera, version, och dela:

**Två.**
Grafbaserat genomförande

- Arbetsflöden är riktade acykliska grafer (DAG).
- Exekveringsmotorn kommer att
- Utför topologisk sortering för att bestämma verkställande order

## Kör noder parallellt om möjligt

### Hantera villkorlig förgrening baserat på nodutgångar

- 3. Vad är det som händer?
- Statens ihärdighet
- Varje arbetsflöde kommer att spåras:
- Arbetsflödestillstånd (Körning, Färdig, Misslyckades)

### Nodutföranderesultat

- Trigger-tillstånd för schemalagda arbetsflöden
- Avrättningshistorik och logg
- Fyra.
- Omfattning
- Nodsystemet kommer att vara plugin-baserat:

### Inbyggda noder för gemensamma insatser

- Anpassade nodtyper kan registreras
- Nodvalidering och genomförande av schema
- Vad som kommer i den här serien
- Del 2: Arkitektur och grundläggande arbetsflödesmotor
- Inrättande av projektstrukturen

### Bygga de centrala arbetsflödesmodellerna (Node, Workflow, Connection)

- Genomförande av grafens exekveringsmotor
- Topologisk sortering och beroendelösning
- Del 3: Att bygga den visuella redaktören
- Skapa arbetsflödesduken med HTMX och Alpine.js
- Drag-och-släpp nod placering

## Ritning av visuell anslutning

Inställningspanel för nod

- Serialisering av arbetsflöde
- Del 4: Integrering av hangfire och statlig förvaltning
- Ställa in Hangfire för bakgrundsbehandling
- Genomförande av API-röstning noder
- Utlösande statlig förvaltning

## Försök igen logik och felhantering

Integrering av Dashboard

Del 5: Avancerade funktioner och spridning

## Genomförande av egna noder

Version av arbetsflöde

Provningsstrategier

Prestandaoptimering