Events
Event steps allow flows to publish business events that can trigger other processes through the publish-subscribe pattern.
Publish Event
Raises a business event that can trigger event handlers.
| Parameter | Description |
|---|---|
| Event Definition | The event type to publish |
| Event Properties Binding | Mapping of values to event properties |
When an event is published:
- An immutable event instance is created
- All synchronous handlers execute immediately (in order)
- Asynchronous handlers are queued for background execution
- The flow continues after synchronous handlers complete
Example - Simple Event:
PUBLISH EVENT
Event Definition: OrderPlaced
Event Properties Binding:
OrderId: Order.Id
CustomerId: Order.CustomerId
OrderNumber: Order.OrderNumber
TotalAmount: Order.TotalAmount
OrderDate: NOW()
Example - Event with Calculated Properties:
# First calculate some values
RUN LOGIC BLOCK
Logic Block: CalculateOrderMetrics
Inputs: Order
→ Outputs: IsHighValue, IsFirstOrder, CustomerLifetimeValue
# Then publish event with all data
PUBLISH EVENT
Event Definition: OrderCompleted
Event Properties Binding:
OrderId: Order.Id
CustomerId: Order.CustomerId
TotalAmount: Order.TotalAmount
IsHighValue: IsHighValue
IsFirstOrder: IsFirstOrder
CustomerLifetimeValue: CustomerLifetimeValue
CompletedDate: NOW()
ProcessedBy: CurrentUser.Id
Event Patterns
Workflow Completion Events
Publish events when significant workflow milestones are reached:
# At the end of an order processing flow
CONDITION: Order Fully Processed?
Condition: AllStepsSuccessful == true
TRUE BRANCH:
PUBLISH EVENT
Event Definition: OrderProcessingCompleted
Event Properties Binding:
OrderId: Order.Id
ProcessingDuration: DATEDIFF(StartTime, NOW())
ItemsProcessed: ProcessedCount
Status: "Success"
FALSE BRANCH:
PUBLISH EVENT
Event Definition: OrderProcessingFailed
Event Properties Binding:
OrderId: Order.Id
FailureReason: ErrorMessage
FailedAtStep: FailedStepName
Status: "Failed"
Entity Lifecycle Events
Publish events at key points in an entity's lifecycle:
# Customer Onboarding Flow
# After initial setup
PUBLISH EVENT
Event Definition: CustomerCreated
Event Properties Binding:
CustomerId: Customer.Id
CustomerName: Customer.Name
CreatedBy: CurrentUser.Id
# ... additional onboarding steps ...
# After onboarding complete
PUBLISH EVENT
Event Definition: CustomerOnboarded
Event Properties Binding:
CustomerId: Customer.Id
OnboardingDuration: DATEDIFF(Customer.CreatedOn, NOW())
AssignedAccountManager: Customer.AccountManagerId
Integration Events
Publish events when external system interactions complete:
# After payment processing
CALL REST API
Service Connection: PaymentGateway
Operation: ProcessPayment
→ PaymentResult
PUBLISH EVENT
Event Definition: PaymentProcessed
Event Properties Binding:
OrderId: Order.Id
PaymentAmount: Order.TotalAmount
TransactionId: PaymentResult.TransactionId
PaymentMethod: SelectedMethod
Success: PaymentResult.Status == "approved"
ProcessedAt: NOW()
Batch Processing Events
Publish events during and after batch operations:
# Batch processing flow
NEW VARIABLE: ProcessedCount = 0
NEW VARIABLE: ErrorCount = 0
ITERATOR: Process Records
Collection: RecordsToProcess
Item Variable: Record
Steps:
# Process each record...
# Publish progress event periodically
CONDITION: Should Report Progress?
Condition: ProcessedCount % 100 == 0
TRUE BRANCH:
PUBLISH EVENT
Event Definition: BatchProgressUpdate
Event Properties Binding:
BatchId: BatchJob.Id
ProcessedCount: ProcessedCount
TotalCount: TotalRecords
PercentComplete: (ProcessedCount / TotalRecords) * 100
# After batch completes
PUBLISH EVENT
Event Definition: BatchCompleted
Event Properties Binding:
BatchId: BatchJob.Id
TotalProcessed: ProcessedCount
ErrorCount: ErrorCount
Duration: DATEDIFF(BatchStartTime, NOW())
Best Practices
Publish at Business Moments: Events should represent meaningful business occurrences, not technical operations. "OrderPlaced" is better than "RecordSaved".
Include Sufficient Context: Event properties should contain enough information for handlers to do their work without additional queries.
Keep Events Focused: Each event should represent one thing that happened. Don't combine multiple events into one.
Consider Handler Execution: Remember that synchronous handlers block the publishing flow. Keep synchronous handlers fast and move heavy processing to asynchronous handlers.
Don't Rely on Handler Success: The publishing flow should not depend on what handlers do. Handlers may fail independently.
Avoid Circular Events: Be careful not to create event chains where handlers publish events that trigger the original flow.
Document Event Contracts: Clearly document when each event is published and what properties it provides so handler developers know what to expect.
Events by themselves don't do anything—they need Event Handlers to respond to them. See Event documentation for details on creating Event Definitions and Event Handlers.