Workflows v2 Architectuur
Workflows 2.0 is de moderne vervanger van de eerder gebruikte Azure Functions-gebaseerde Orchestrators (inmiddels verwijderd). De execution engine draait op Hangfire en is volledig geïntegreerd in AutoMate.API. Alle automatiseringslogica wordt als workflow definitie geïmplementeerd.
Architectuur
Registratie
Alle services worden geregistreerd via WorkflowsSetup.AddWorkflowServices():
Hangfire jobs worden automatisch door Hangfire opgelost — ze hoeven niet handmatig als DI-registratie te worden toegevoegd.
Triggers
Workflows worden gestart door twee trigger streams:
Trigger type | Bron | Hangfire job |
|---|---|---|
| AutoMate Formulier (nieuw medewerker) |
|
| AutoMate Formulier (medewerker gewijzigd) |
|
| AutoMate Formulier (accountEnabled → false) |
|
IAM Sync events | IAM HR Sync pipeline |
|
Wanneer een medewerker via het formulier wordt bijgewerkt en accountEnabled verandert naar false, worden zowel een EmployeeOffboarded - als een EmployeeUpdated-trigger afgevuurd binnen dezelfde batch.
WorkflowTriggerService
WorkflowTriggerService is de centrale service voor alle trigger streams. De methode TriggerMatchingWorkflowsAsync zoekt alle actieve workflow definities op die overeenkomen met het trigger type en doorloopt de filter evaluatie:
Per matching workflow wordt een Hangfire batch aangemaakt en een execution record opgeslagen in de database. Wanneer WorkflowTriggers:DryRunMode op true staat in configuratie, worden werkelijke executions overgeslagen en alleen gelogd.
Tenant ID wordt via IMultiTenantService.GetTenantId() verkregen uit de X-Tenant-Id header — nooit uit de request body.
Filter Evaluatie
WorkflowFilterEvaluator.EvaluateFilters bepaalt of een workflow getriggerd wordt voor een specifieke medewerker. De evaluatie werkt op de TriggerNodeDataDto die in de workflow definitie payload is opgeslagen.
Filter logic
EnableFilter = falseof geen regels: workflow triggert altijdFilterLogic = "And": alle regels moeten voldaan zijnFilterLogic = "Or": minimaal één regel moet voldaan zijn
Ondersteunde operators
Code | Operator | Beschrijving |
|---|---|---|
0 |
| Case-insensitieve vergelijking |
1 |
| Ongelijk aan waarde |
2 |
| Bevat substring (case-insensitief) |
3 |
| Bevat substring niet |
4 |
| Begint met waarde |
5 |
| Eindigt met waarde |
6 |
| Groter dan (numeriek, datum, of string) |
7 |
| Kleiner dan (numeriek, datum, of string) |
8 |
| Veld is leeg of null |
9 |
| Veld heeft een waarde |
10 |
| Veld staat in de lijst van gewijzigde velden |
Veldpaden ondersteunen dot-notatie voor geneste waarden (bijv. manager.displayName). Het frontend stuurt paden in de notatie [employee.jobTitle] — de evaluator strip automatisch de bracket-notatie en het employee.-prefix.
Execution Flow
WorkflowDispatcherJob
WorkflowDispatcherJob is de eerste job in elke Hangfire batch. Hij:
Laadt het execution record en vergrendeld version ID op
Deserialiseert de
WorkflowDefinitionDtouit de version payloadZoekt het trigger node op (
Type == "trigger")Controleert op
OnboardingDateType = "StartDate"met een hire date in de toekomstEnqueued of scheduled de
WorkflowTriggerActivityJobviaBatchJob.Attach
De workflow versie is vergrendeld op het moment dat de execution aangemaakt wordt — latere publishes van de workflow definitie hebben geen invloed op lopende executions.
Activity Jobs
Na de trigger job worden vervolgjobs via de graph van edges bepaald:
Job | Type node | Beschrijving |
|---|---|---|
|
| Start node, geeft employee data door |
|
| Voert Microsoft 365 acties uit |
|
| Verstuurt berichten (Teams, email) |
|
| Vertakt op basis van conditie |
WorkflowSchedulerJob wordt gebruikt om vervolgstappen met vertraging in te plannen — dit houdt de jobs gelinkt binnen de Hangfire batch.
Endpoints
Alle endpoints vereisen de Workflows policy. Tenant ID wordt verkregen via de X-Tenant-Id header.
Methode | Pad | Beschrijving |
|---|---|---|
|
| Nieuwe workflow definitie aanmaken met initiële draft versie |
|
| Draft publiceren als actieve versie |
|
| Workflow handmatig triggeren voor een specifieke medewerker |
|
| Gedetailleerde execution status inclusief stappen |
|
| Alle workflow definities voor de tenant |
|
| Specifieke workflow definitie |
|
| Lopende execution annuleren |
|
| Gefaalde execution opnieuw starten |
|
| Actieve executions opvragen |
|
| Execution history opvragen |
|
| Status van workflow definitie bijwerken |
|
| Workflow definitie bijwerken |
|
| Workflow definitie verwijderen |
|
| Workflow definitie dupliceren |
SignalR Notificaties
WorkflowNotificationService stuurt real-time status updates via SignalR naar het Management Portal. Clients abonneren per tenant via de SubscribeToTenant methode op de hub.
Hub URL:
/hubs/workflow-executionsHub class:
WorkflowExecutionsHubAuthenticatie:
[Authorize], tenant-validatie in elke hub methode
Events
Event | Payload | Wanneer |
|---|---|---|
|
| Execution aangemaakt via handmatige trigger |
|
| Execution status gewijzigd |
|
| Individuele activiteit stap gewijzigd |
MSP-gebruikers met de rol Automate365.Customers.ReadWrite kunnen zich abonneren op klant-tenants. De hub valideert de PartnerTenantId van de gevraagde tenant om te voorkomen dat SystemTenantHasAccess-tenants toegankelijk zijn.
Data Model
WorkflowDefinitionDto
TriggerNodeDataDto
filterRules kan als JSON-encoded string of als direct array worden opgeslagen in de workflow payload — FilterRulesConverter handelt beide formaten af.