Flow Studio
HIL Node Types
Three concrete node types in the node palette implement the HIL patterns. Each has its own executor, configuration form, and output port schema.
ApprovalNode
| Property | Value |
|---|---|
| TypeCode | Approval |
| Executor | ApprovalExecutor (single) or MultiPartyApprovalExecutor |
| Output ports | approved, rejected, timeout |
| Config fields | title, instruction, approvers, strategy, quorumCount, timeoutDuration, timeoutBehavior, escalationActorId |
| Resume data | { decision: "Approved"|"Rejected", comment: string } |
UserFormNode
| Property | Value |
|---|---|
| TypeCode | UserForm |
| Executor | UserFormExecutor |
| Output ports | submitted, timeout |
| Config fields | title, instruction, atlasFormId, actorId, actorType, timeoutDuration, timeoutBehavior |
| Resume data | The submitted Atlas Form field values as a JSON object |
ReviewNode
| Property | Value |
|---|---|
| TypeCode | Review |
| Executor | ReviewExecutor |
| Output ports | acknowledged, timeout |
| Config fields | title, contentToReview, actorId, actorType, requireComment, timeoutDuration, timeoutBehavior |
| Resume data | { acknowledged: true, comment: string } |
BaseHILExecutor
All three executors extend BaseHILExecutor, which handles the common suspension logic:
public abstract class BaseHILExecutor<TInput, TOutput>
: BaseNodeExecutor<TInput, TOutput>
{
protected abstract SuspendPayload BuildSuspendPayload(
NodeExecutionContext ctx, TInput input);
protected override async Task<NodeExecutionResult> ExecuteInternalAsync(
NodeExecutionContext ctx, CancellationToken ct)
{
var payload = BuildSuspendPayload(ctx, ctx.GetInput<TInput>());
return NodeExecutionResult.Suspend(payload);
// Engine catches Suspend result and persists state
}
}