Files
git.stella-ops.org/docs/workflow/tutorials/08-expressions/README.md
master f5b5f24d95 Add StellaOps.Workflow engine: 14 libraries, WebService, 8 test projects
Extract product-agnostic workflow engine from Ablera.Serdica.Workflow into
standalone StellaOps.Workflow.* libraries targeting net10.0.

Libraries (14):
- Contracts, Abstractions (compiler, decompiler, expression runtime)
- Engine (execution, signaling, scheduling, projections, hosted services)
- ElkSharp (generic graph layout algorithm)
- Renderer.ElkSharp, Renderer.ElkJs, Renderer.Msagl, Renderer.Svg
- Signaling.Redis, Signaling.OracleAq
- DataStore.MongoDB, DataStore.PostgreSQL, DataStore.Oracle

WebService: ASP.NET Core Minimal API with 22 endpoints

Tests (8 projects, 109 tests pass):
- Engine.Tests (105 pass), WebService.Tests (4 E2E pass)
- Renderer.Tests, DataStore.MongoDB/Oracle/PostgreSQL.Tests
- Signaling.Redis.Tests, IntegrationTests.Shared

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 19:14:44 +02:00

1.3 KiB

Tutorial 8: Expressions

The expression system enables declarative logic that compiles to portable canonical JSON. All expressions are evaluable at runtime without recompilation.

Path Navigation

Prefix Source Example
start.* Start request fields start.policyId
state.* Mutable workflow state state.customerName
payload.* Task completion payload payload.answer
result.* Step result (by resultKey) result.productInfo.lob

Built-in Functions

Function Description Example
coalesce First non-null coalesce(state.id, start.id, 0)
concat String join concat("Policy #", state.policyNo)
add Sum add(state.attempt, 1)
if Conditional if(state.isVip, "VIP", "Standard")
isNullOrWhiteSpace Null/empty check isNullOrWhiteSpace(state.name)
length String/array length length(state.items)
upper Uppercase upper(state.annexType)
first First array element first(state.objects)
mergeObjects Deep merge mergeObjects(state, payload)

Variants

Next

Tutorial 9: Testing — unit test setup with recording transports.