Portal Community

What an Executor Does

The process engine calls the executor's ExecuteAsync method with a NodeExecutionContext containing everything the executor needs: the node's configuration, upstream output data, tenant identity, and a cancellation token. The executor performs its work and returns a NodeExecutionResult indicating which output port to follow next.

Where Executors Live

CategoryProject Path
Core (built-in logic)ExecutionNodes/Core/BizFirst.Ai.ExecutionNodes.Core/
Standard integrationsExecutionNodes/Standard/*/
Social integrationsExecutionNodes/Social/*/
Enterprise integrationsExecutionNodes/Enterprise/*/
AI execution nodesExecutionNodes/Ai/*/
Custom (your node)ExecutionNodes/Custom/*/ (new project per node family)

Executor Pipeline Stages

BaseNodeExecutor runs every executor through a multi-stage pipeline before calling your ExecuteInternalAsync:

  1. Entry — load node definition and context
  2. EntryValidate — parse and validate configuration
  3. PreGuardRails — run pre-execution guard rails (rate limit, quota)
  4. PreProcess — HIL check; suspension if waiting for approval
  5. Process — calls ExecuteInternalAsync (your code)
  6. PostProcess — post-execution hooks
  7. PostGuardRails — content policy, output validation
  8. Exit — emit SignalR event, persist result
  9. Error — called if any stage throws

You only implement stage 5. The base class handles all others.

Three-File Structure

Each executor typically splits across three files following the single-responsibility principle:

FileContents
MyNodeExecutor.csClass declaration, NodeTypeName const, constructor, ExecuteInternalAsync routing
MyNodeExecutor.Config.csCreateExecutorSettings() override, settings property accessor
MyNodeSettings.csSettings class extending BaseNodeExecutorSettings

Key Source Locations

ComponentFile
IProcessElementExecutionProcessEngine/Domain/Node/Interfaces/IProcessElementExecution.cs
BaseNodeExecutorProcessEngine/Service/Services/Executor/Service/Base/Executor/BaseNodeExecutor.cs
NodeExecutionContextProcessEngine/Domain/Execution/NodeExecutionContext.cs
NodeExecutionResultProcessEngine/Domain/Execution/Context/ExecutionResult/NodeExecutionResult.cs
BaseNodeExecutorSettingsProcessEngine/Domain/Node/Configuration/Settings/Base/BaseNodeExecutorSettings.cs
Registration exampleExecutionNodes/Core/Dependency/CoreExecutorDependency.cs