Portal Community

Output Ports

Port When Triggered Description
success After ALL parallel lanes have completed (successfully or with errors when fail_fast is false) Fires exactly once after the last lane reports completion. The full merged execution context — including all lane_N_* prefixed results and the lane_outputs collection — is available to all downstream nodes connected to this port.

Output Data Structure

Field Type Description
lane_outputs array Ordered array of each lane's complete final execution context. Index 0 = lane 0 context, index 1 = lane 1 context, etc. Iterate this array to process all lane results generically.
lane_0_*, lane_1_*, ... various All variables produced within each lane, prefixed with the lane index. Enables direct access to specific lane results by name: $var.lane_0_emailSent, $var.lane_2_documentUrl.
lane_success_count integer Count of lanes that completed without error.
lane_failure_count integer Count of lanes that completed with error. Zero when fail_fast cancelled remaining lanes.
IsParallelExecutionActive boolean (false) Reset to false — normal sequential execution resumes.
Pre-fork base context as before fork All variables and data that existed before the Fork node fired are preserved unchanged in the base context alongside the lane result keys.

Complete Data Flow Example

// === Pre-fork context ===
{
  "orderId": "ORD-2024-112",
  "customerId": "C-5501",
  "IsParallelExecutionActive": false
}

// === Parallel Fork fires (3 lanes) ===
// Lane 0: SendEmail       → sets emailSent=true, emailId="MSG-001"
// Lane 1: SendSms         → sets smsSent=true, smsId="SMS-889"
// Lane 2: PostSlackMsg    → sets slackPosted=true, slackTs="1234567890.001"

// === All lanes complete → Parallel Join fires success port ===
{
  // Pre-fork base context (unchanged)
  "orderId": "ORD-2024-112",
  "customerId": "C-5501",

  // Parallel execution state reset
  "IsParallelExecutionActive": false,

  // Per-lane prefixed results
  "lane_0_emailSent": true,
  "lane_0_emailId": "MSG-001",
  "lane_1_smsSent": true,
  "lane_1_smsId": "SMS-889",
  "lane_2_slackPosted": true,
  "lane_2_slackTs": "1234567890.001",

  // Aggregate counts
  "lane_success_count": 3,
  "lane_failure_count": 0,

  // Full lane contexts as array
  "lane_outputs": [
    { "emailSent": true, "emailId": "MSG-001", ... },
    { "smsSent": true,   "smsId": "SMS-889",   ... },
    { "slackPosted": true, "slackTs": "...",    ... }
  ]
}

Accessing Lane Results Downstream

After the Join's success port fires, downstream nodes can access any lane result using standard $var expressions:

// Check if all notification channels succeeded
$var.lane_success_count === 3

// Access specific lane result
$var.lane_0_emailId          // "MSG-001"
$var.lane_1_smsSent          // true

// Use lane_outputs for generic iteration (e.g., in a Loop)
// items = "lane_outputs"
// current_item.emailSent, current_item.smsSent, etc.