Order Planned Stylesheet
This page provides the Liquid Stylesheet O2C - View Order Planned for the JSON Order Planned messages (Step 4) in the Order-to-Cash demo.

The JSON Order Scheduled message rendered as a production schedule: priority, ready-by date, the production lines with their shift and duration, and the materials.
Show planners the schedule, not the JSON. With Nodinite Stylesheets, the planning message reads as a production schedule with its lines and materials. On this page, you will:
- ✅ Transform the JSON Order Scheduled message into a production schedule with Liquid
- ✅ Loop over the production lines and the materials of the order
- ✅ Open the schedule from Log Views and from BPM Log Search New 7.11
Understanding the Order Planned Stylesheet
A Stylesheet is tied to a Message Type. The business Log Event of Step 4, Production Scheduled in ERP, carries the Message Type O2C.Order.Scheduled/1.0, so Nodinite offers O2C - View Order Planned for it. With Message Body is Json checked, Nodinite parses the JSON body and hands its properties to the template as variables, such as scheduleId and productionLines.
Log Event (JSON)"] --> B{"fa:fa-tags Message Type
O2C.Order.Scheduled/1.0"} B --> C["fa:fa-file-code O2C - View Order Planned
(Liquid, Message Body is Json)"] C --> D["fa:fa-file-alt Production schedule"] D --> E1["fa:fa-search Log Views"] D --> E2["fa:fa-sitemap BPM Log Search"] style A fill:#2678BD style B fill:#9E59BB style C fill:#3F827B style D fill:#93d16d style E1 fill:#2678BD style E2 fill:#2678BD
The Order Planned Log Event (blue) is matched to its Message Type (purple); the Liquid Stylesheet (teal) renders the schedule (green), which users open from a Log View or from BPM Log Search (blue).
Where Users Open the Production Schedule
| Where | How |
|---|---|
| Log Views | Search the Log View, open Action on the Production Scheduled in ERP event, and choose View message formatted as 'O2C - View Order Planned'. |
| BPM Log Search New 7.11 | Click Log Search on the Order-to-Cash BPM, search for the order number, and open Action on the Production Scheduled event in the BPM Viewer. |
The dialog is titled View message body formatted as 'O2C - View Order Planned' and has the buttons Open in New Window, Print, and Close. The forwarding event of the step, Planning Request Received, logs O2C.Forwarding/1.0, so this Stylesheet isn't offered there.
Stylesheet Settings
| Setting | Value | Why |
|---|---|---|
| Name | O2C - View Order Planned |
The name users pick in the Action menu |
| Type | Liquid | The Order Scheduled body is JSON |
| Render as HTML | Checked | The template outputs HTML |
| Message Body is Json | Checked | Exposes scheduleId, productionLines, materials, and the other properties as Liquid variables |
| Message Types | O2C.Order.Scheduled/1.0 |
Only the Step 4 business event gets the Stylesheet |
Important
With Message Body is Json unchecked, the template still renders, but every field is empty: the JSON stays one string in
data.
Input JSON
The Order Scheduled body of order 1 as logged by the demo data script, the same message as on the Step 4 page. Orders of 500 USD or more get the priority HIGH.
{
"scheduleId": "SCH-2025-10001",
"orderId": "ORD-10001",
"customerId": "CUST-001",
"customerName": "Contoso Corporation",
"orderDate": "2025-10-14T09:15:00Z",
"scheduleDate": "2025-10-14T09:37:45Z",
"productionLines": [
{
"lineId": "LINE-01",
"lineName": "Assembly Line A",
"scheduledStart": "2025-10-16T06:00:00Z",
"scheduledEnd": "2025-10-16T14:30:00Z",
"expectedDuration": 510,
"shift": "DAY",
"capacity": 50
}
],
"materials": [
{
"materialId": "MAT-SKU-DEMO-001",
"sku": "SKU-DEMO-001",
"description": "Demo Widget",
"quantityRequired": 1,
"quantityAllocated": 1,
"availableAtScheduleTime": true
}
],
"orderQuantity": 1,
"orderAmount": 99.95,
"currency": "USD",
"priorityLevel": "NORMAL",
"schedulingStatus": "CONFIRMED",
"estimatedCompletionDate": "2025-10-16T14:30:00Z"
}
The property order varies between runs, because the script serializes a PowerShell hashtable; Liquid reads properties by name, so the order doesn't matter.
JSON to Schedule Mapping
| JSON property | Shown in the schedule as |
|---|---|
scheduleId, orderId |
The title, Planned for order, and Order ID |
customerName, customerId |
Customer |
orderQuantity, priorityLevel |
Quantity, Priority |
estimatedCompletionDate |
Ready by |
schedulingStatus |
Status, as a badge |
productionLines[] |
Production Lines table: Line, Name, Shift, Start, End, Minutes (expectedDuration) |
materials[] |
Materials table: Material, SKU, Description, Required, Allocated, In stock (Yes when availableAtScheduleTime is true) |
orderAmount, currency |
Order amount |
The JSON parser normalizes dates and numbers before Liquid sees them: 2025-10-16T14:30:00Z shows as 2025-10-16 14:30:00, and 1245.0 shows as 1245. To print amounts with two decimals, see Amounts with two decimals.
Liquid Template
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" />
<div class="container mt-4">
<h1 class="mb-0">Production Schedule {{ scheduleId }}</h1>
<span class="text-muted">Planned for order {{ orderId }}</span>
<table class="table mt-3">
<thead>
<tr><th>Order ID</th><th>Customer</th><th>Quantity</th><th>Priority</th><th>Ready by</th><th>Status</th></tr>
</thead>
<tbody>
<tr>
<td><strong>{{ orderId }}</strong></td>
<td><strong>{{ customerName }}</strong><br/><span class="text-muted">{{ customerId }}</span></td>
<td>{{ orderQuantity }}</td>
<td>{{ priorityLevel }}</td>
<td>{{ estimatedCompletionDate }}</td>
<td><span class="badge badge-success">{{ schedulingStatus }}</span></td>
</tr>
</tbody>
</table>
<h5 class="mt-4">Production Lines</h5>
<table class="table table-sm">
<thead>
<tr><th>Line</th><th>Name</th><th>Shift</th><th>Start</th><th>End</th><th class="text-right">Minutes</th></tr>
</thead>
<tbody>
{%- for line in productionLines -%}
<tr><td>{{ line.lineId }}</td><td>{{ line.lineName }}</td><td>{{ line.shift }}</td><td>{{ line.scheduledStart }}</td><td>{{ line.scheduledEnd }}</td><td class="text-right">{{ line.expectedDuration }}</td></tr>
{%- endfor -%}
</tbody>
</table>
<h5 class="mt-4">Materials</h5>
<table class="table table-sm">
<thead>
<tr><th>Material</th><th>SKU</th><th>Description</th><th class="text-center">Required</th><th class="text-center">Allocated</th><th class="text-center">In stock</th></tr>
</thead>
<tbody>
{%- for m in materials -%}
<tr><td>{{ m.materialId }}</td><td>{{ m.sku }}</td><td>{{ m.description }}</td><td class="text-center">{{ m.quantityRequired }}</td><td class="text-center">{{ m.quantityAllocated }}</td><td class="text-center">{% if m.availableAtScheduleTime %}Yes{% else %}No{% endif %}</td></tr>
{%- endfor -%}
</tbody>
</table>
<p class="text-right">Order amount: <strong>{{ orderAmount }} {{ currency }}</strong></p>
<div class="mt-5 pt-3 border-top text-center text-muted"><small>Rendered by a Nodinite Stylesheet (Liquid) from the Order Scheduled message</small></div>
</div>
Next Steps
- Order Ready Stylesheet — The XML packing message of Step 5
- View all O2C stylesheets — Every demo Stylesheet and its settings
- Generate O2C Demo Data — Create test messages for this Stylesheet
Related Topics
- Order Confirmation Stylesheet
- 4. Order Planned — The step this message belongs to
- What is a Stylesheet?
- Add or manage Stylesheet
- Message Types