Action Step Payload Examples

Event Orchestration – Action Step Payload Examples

Aim of this section

Provides ready-to-use examples of the payload (Body, Headers, Properties) that can be sent to a partition or integration target in the Event Workflow / Scheduler Action step.

Related sections

How to Create Event Workflow, How to Create Scheduler

Required permissions

Event Orchestration - edit

Overview

In the Action step you define the payload sent with the triggered action. The payload has three parts:

  • Body – Free-form JSON sent with the action. You can either tick Use the original event payload as the body, or paste custom Payload content.

  • Headers – Key/value pairs delivered as Camel message headers to the target route.

  • Properties – Key/value pairs delivered as Camel exchange properties to the target route.

Payload support by action type:

  • Logic – Body only; its top-level JSON fields become input parameters of the logic.

  • Route – Body, Headers and Properties (Headers and Properties require IntegrationManager 3.2 or newer).

  • All other action types (Calculation (CFS), Calculation Flow, Data Load, PFM Workflow, Data Download, Data Upload) – the payload is not delivered; leave the Payload section empty.

In Schedulers only a subset of these action types is offered (Logic, Calculation, Data Load, Route, Workflow, Data Download). The payload behavior is the same as in Event Workflows.

Headers and Properties are available only for the Route action type. For any other action type they are not delivered to the target (the Scheduler API rejects them with a validation error).


Partition target — Action Type: Logic

For Logic targets, the Body is sent to the partition wrapped in the standard Pricefx API envelope {"data": <your JSON>}.

Example 1

Run a partition logic and pass it parameters. All Body fields are of your choice and become input parameters of the logic, readable in Groovy via the input binding (e.g. input.runMode). Values can be strings, numbers, booleans, arrays or nested objects. The only exception are three reserved field namestargetDate, productSKU and allResults – which the partition consumes itself instead of passing them to the logic (see the table below).

Body

JSON
{
  "runMode": "DELTA",
  "productGroups": ["BEVERAGES", "SNACKS"],
  "targetDate": "2026-07-16",
  "productSKU": "SKU-001",
  "allResults": true
}

In this example, runMode and productGroups become logic inputs (input.runMode, input.productGroups), while the remaining three fields are reserved names consumed by the partition:

Reserved field

Type

Meaning

targetDate

string

Sets the target date of the formula execution. Must be a date string in the partition’s configured date format (typically ISO yyyy-MM-dd); numeric epoch values are rejected.

productSKU

string

Sets the product (SKU) context of the logic.

allResults

boolean

When true, the response contains all result elements, not only the displayed ones.

For Calculation (CFS), Calculation Flow, Data Load, PFM Workflow, Data Download and Data Upload targets the custom payload is currently not delivered to the target — leave the Payload section empty for these action types. These jobs run with their persisted definition; parameters cannot be passed to them from the Action step.


Integration (IM) target — Action Type: Route

When the target is an IntegrationManager route, all three payload parts are delivered. In the target route:

  • Body arrives as the Camel message body as a JSON string (not a parsed object). Parse it first — e.g. with <unmarshal><json/></unmarshal> — before accessing fields with ${body[field]}.

  • Headers are read with ${header.X}.

  • Properties are read with ${exchangeProperty.Y}.

Example 2

Push approved price updates to an external system.

Body

JSON
{
  "priceGridCode": "PG-2026-Q3",
  "currency": "EUR",
  "items": [
    { "sku": "SKU-001", "newPrice": 12.50, "oldPrice": 11.90 },
    { "sku": "SKU-002", "newPrice": 9.99,  "oldPrice": 9.50 }
  ]
}

Headers

Key

Value

X-Correlation-Id

WF-ACME-2026-06-11-001

sourceSystem

PFX-EVENT-ORCHESTRATION

Properties

Key

Value

targetSystem

SAP-S4HANA

integrationScenario

PRICE_UPDATE

How the target route reads the payload:

XML
<route id="pushPriceUpdate">
    <from uri="direct:pushPriceUpdate"/>
    <log message="Scenario ${exchangeProperty.integrationScenario}, corr ${header.X-Correlation-Id}"/>
    <!-- the body arrives as a JSON string; parse it before accessing fields -->
    <unmarshal><json/></unmarshal>
    <log message="Grid ${body[priceGridCode]}"/>
    <split>
        <simple>${body[items]}</simple>
        <!-- per item: ${body[sku]}, ${body[newPrice]} -->
    </split>
</route>
  • Headers and Properties require IntegrationManager 3.2 or newer. When the action targets an older IM instance, only the Body is sent; Headers and Properties are silently dropped.

  • The route is invoked asynchronously (fire-and-forget). A failure inside the route is not reported back to the workflow/scheduler — the Action step succeeds as soon as the invocation is accepted by IM.

  • The target route should consume from a direct: endpoint. Routes consuming from trigger-style endpoints (timer, cron, ftp, …) cannot be invoked this way and the action fails.


Using the original event payload as the Body

This option is available in Event Workflow listeners only. Schedulers are time-triggered and have no source event, so this section does not apply to them.

Instead of entering custom JSON, you can tick Use the original event payload as the body. What the action receives depends on the triggering event:

Events with a job tracker (most job-completion events)

When the partition event references a background job (it contains a trackerId — e.g. CFS calculation completed, data load finished), Event Orchestration fetches the corresponding JobStatusTracker (JST) object from the partition and uses it as the payload. Example (shortened):

JSON
{
  "id": 6081,
  "typedId": "6081.JST",
  "status": "FINISHED",
  "trackerType": "PADATALOAD",
  "targetObject": "24.DMDL",
  "jobName": "Calendar (Calendar)",
  "messages": "[\"Loaded 2192 rows\"]",
  "createDate": "2026-06-11T07:39:46",
  "processingStart": "2026-06-11T07:40:15",
  "processingEnd": "2026-06-11T07:40:18",
  "parameters": "{\"dataLoad\":\"...\"}",
  "parametersObject": { "dataLoad": "..." }
}
  • The JST’s parameters field is a JSON string; Event Orchestration additionally adds parametersObject with the parsed content, so the payload consumer does not have to parse it.

  • Note that the payload is the JST object only — it does not contain the eventType field of the original event.

  • Useful fields to branch on: status (e.g. FINISHED), trackerType, targetObject, jobName.

Events without a job tracker

When the event carries no trackerId (and as a fallback when the JST fetch fails), the raw partition event is used as the payload:

JSON
{
  "eventType": "CUSTOM_myEvent",
  "data": [
    { "typedId": "42.CFS" }
  ]
}

How the target consumes it

  • Logic – the payload’s top-level fields (status, targetObject, parametersObject, …) become the logic input parameters.

  • Route – the payload arrives as a JSON string body; parse it first (see above), then branch on it, e.g. with ${body[status]} or ${body[targetObject]}.